@azure-tools/typespec-ts 0.12.0 → 0.13.0
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/.rush/temp/operation/build/all.log +1 -0
- package/.rush/temp/operation/build/state.json +3 -0
- package/.rush/temp/package-deps_build.json +205 -190
- package/.rush/temp/shrinkwrap-deps.json +488 -471
- package/CHANGELOG.md +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/modelUtils.d.ts +1 -1
- package/dist/src/modelUtils.d.ts.map +1 -1
- package/dist/src/modelUtils.js +79 -56
- package/dist/src/modelUtils.js.map +1 -1
- package/dist/src/operationUtil.d.ts +26 -0
- package/dist/src/operationUtil.d.ts.map +1 -1
- package/dist/src/operationUtil.js +76 -17
- package/dist/src/operationUtil.js.map +1 -1
- package/dist/src/transform/transform.d.ts.map +1 -1
- package/dist/src/transform/transform.js +9 -6
- package/dist/src/transform/transform.js.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
- package/dist/src/transform/transformApiVersionInfo.js +3 -3
- package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
- package/dist/src/transform/transformHelperFunctionDetails.d.ts +6 -0
- package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -0
- package/dist/src/transform/{transformAnnotationDetails.js → transformHelperFunctionDetails.js} +2 -2
- package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -0
- package/dist/src/transform/transformParameters.d.ts.map +1 -1
- package/dist/src/transform/transformParameters.js +41 -33
- package/dist/src/transform/transformParameters.js.map +1 -1
- package/dist/src/transform/transformPaths.d.ts.map +1 -1
- package/dist/src/transform/transformPaths.js +20 -12
- package/dist/src/transform/transformPaths.js.map +1 -1
- package/dist/src/transform/transformResponses.d.ts.map +1 -1
- package/dist/src/transform/transformResponses.js +29 -8
- package/dist/src/transform/transformResponses.js.map +1 -1
- package/dist/src/transform/transformSchemas.js +1 -1
- package/dist/src/transform/transformSchemas.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -38
- package/src/index.ts +2 -0
- package/src/modelUtils.ts +143 -47
- package/src/operationUtil.ts +111 -22
- package/src/transform/transform.ts +20 -5
- package/src/transform/transformApiVersionInfo.ts +18 -3
- package/src/transform/{transformAnnotationDetails.ts → transformHelperFunctionDetails.ts} +3 -3
- package/src/transform/transformParameters.ts +71 -20
- package/src/transform/transformPaths.ts +30 -15
- package/src/transform/transformResponses.ts +50 -6
- package/src/transform/transformSchemas.ts +1 -1
- package/test/commands/cadl-ranch-list.ts +25 -28
- package/test/commands/gen-cadl-ranch.ts +6 -2
- package/test/integration/arrayItemTypes.spec.ts +2 -2
- package/test/integration/azurecore.spec.ts +64 -24
- package/test/integration/collectionFormat.spec.ts +44 -0
- package/test/integration/dictionary.spec.ts +2 -2
- package/test/integration/extensibleEnums.spec.ts +8 -8
- package/test/integration/fixedEnums.spec.ts +7 -7
- package/test/integration/generated/arrays/itemTypes/src/arrayItemTypesClient.ts +5 -1
- package/test/integration/generated/arrays/itemTypes/src/clientDefinitions.ts +20 -20
- package/test/integration/generated/arrays/itemTypes/src/logger.ts +5 -0
- package/test/integration/generated/authentication/apiKey/package.json +1 -1
- package/test/integration/generated/authentication/apiKey/src/authApiKeyClient.ts +6 -2
- package/test/integration/generated/authentication/apiKey/src/logger.ts +5 -0
- package/test/integration/generated/authentication/oauth2/src/authOauth2Client.ts +6 -2
- package/test/integration/generated/authentication/oauth2/src/logger.ts +5 -0
- package/test/integration/generated/authentication/union/src/authUnionClient.ts +6 -2
- package/test/integration/generated/authentication/union/src/logger.ts +5 -0
- package/test/integration/generated/azure/core/package.json +1 -1
- package/test/integration/generated/azure/core/src/azureCoreClient.ts +5 -1
- package/test/integration/generated/azure/core/src/clientDefinitions.ts +22 -8
- package/test/integration/generated/azure/core/src/isUnexpected.ts +18 -7
- package/test/integration/generated/azure/core/src/logger.ts +5 -0
- package/test/integration/generated/azure/core/src/outputModels.ts +7 -0
- package/test/integration/generated/azure/core/src/paginateHelper.ts +55 -5
- package/test/integration/generated/azure/core/src/parameters.ts +1 -0
- package/test/integration/generated/azure/core/src/responses.ts +23 -1
- package/test/integration/generated/azure/core-traits/package.json +1 -1
- package/test/integration/generated/azure/core-traits/src/azureCoreTraitsClient.ts +5 -1
- package/test/integration/generated/azure/core-traits/src/clientDefinitions.ts +7 -25
- package/test/integration/generated/azure/core-traits/src/isUnexpected.ts +6 -19
- package/test/integration/generated/azure/core-traits/src/logger.ts +5 -0
- package/test/integration/generated/azure/core-traits/src/outputModels.ts +15 -0
- package/test/integration/generated/azure/core-traits/src/parameters.ts +4 -19
- package/test/integration/generated/azure/core-traits/src/responses.ts +6 -30
- package/test/integration/generated/dictionary/package.json +1 -1
- package/test/integration/generated/dictionary/src/clientDefinitions.ts +22 -22
- package/test/integration/generated/dictionary/src/dictClient.ts +5 -1
- package/test/integration/generated/dictionary/src/logger.ts +5 -0
- package/test/integration/generated/enums/extensible/README.md +3 -3
- package/test/integration/generated/enums/extensible/package.json +1 -1
- package/test/integration/generated/enums/extensible/src/clientDefinitions.ts +5 -5
- package/test/integration/generated/enums/extensible/src/index.ts +3 -3
- package/test/integration/generated/enums/extensible/src/logger.ts +5 -0
- package/test/integration/generated/enums/extensible/src/{enumsExtensible.ts → typeEnumExtensible.ts} +9 -5
- package/test/integration/generated/enums/fixed/README.md +3 -3
- package/test/integration/generated/enums/fixed/package.json +1 -1
- package/test/integration/generated/enums/fixed/src/clientDefinitions.ts +5 -5
- package/test/integration/generated/enums/fixed/src/index.ts +3 -3
- package/test/integration/generated/enums/fixed/src/logger.ts +5 -0
- package/test/integration/generated/enums/fixed/src/{enumsFixed.ts → typeEnumFixed.ts} +9 -5
- package/test/integration/generated/internal/src/clientDefinitions.ts +38 -12
- package/test/integration/generated/internal/src/index.ts +0 -1
- package/test/integration/generated/internal/src/internalClient.ts +5 -1
- package/test/integration/generated/internal/src/logger.ts +5 -0
- package/test/integration/generated/internal/src/outputModels.ts +9 -5
- package/test/integration/generated/internal/src/parameters.ts +32 -8
- package/test/integration/generated/internal/src/responses.ts +18 -5
- package/test/integration/generated/lro/lroCore/README.md +3 -3
- package/test/integration/generated/lro/lroCore/package.json +2 -2
- package/test/integration/generated/lro/lroCore/src/clientDefinitions.ts +8 -5
- package/test/integration/generated/lro/lroCore/src/index.ts +3 -3
- package/test/integration/generated/lro/lroCore/src/isUnexpected.ts +14 -7
- package/test/integration/generated/lro/lroCore/src/logger.ts +5 -0
- package/test/integration/generated/lro/lroCore/src/pollingHelper.ts +38 -0
- package/test/integration/generated/lro/lroCore/src/responses.ts +18 -0
- package/test/integration/generated/lro/lroCore/src/{azureLroCore.ts → specsAzureCoreLroStandard.ts} +9 -5
- package/test/integration/generated/lro/{lroBasic → lroRPC}/README.md +7 -7
- package/test/integration/generated/lro/{lroBasic → lroRPC}/api-extractor.json +1 -1
- package/test/integration/generated/lro/{lroBasic → lroRPC}/package.json +6 -6
- package/test/integration/generated/lro/lroRPC/src/clientDefinitions.ts +79 -0
- package/test/integration/generated/{resiliency/devDriven → lro/lroRPC}/src/index.ts +4 -4
- package/test/integration/generated/{resiliency/devDriven → lro/lroRPC}/src/isUnexpected.ts +57 -21
- package/test/integration/generated/lro/lroRPC/src/logger.ts +5 -0
- package/test/integration/generated/lro/lroRPC/src/models.ts +8 -0
- package/test/integration/generated/lro/lroRPC/src/outputModels.ts +40 -0
- package/test/integration/generated/lro/lroRPC/src/parameters.ts +20 -0
- package/test/integration/generated/lro/{lroBasic → lroRPC}/src/pollingHelper.ts +52 -0
- package/test/integration/generated/lro/lroRPC/src/responses.ts +124 -0
- package/test/integration/generated/lro/lroRPC/src/specsAzureCoreLroRpc.ts +35 -0
- package/test/integration/generated/lro/{lroBasic → lroRPC}/tspconfig.yaml +2 -2
- package/test/integration/generated/models/inheritance/README.md +3 -3
- package/test/integration/generated/models/inheritance/package.json +1 -1
- package/test/integration/generated/models/inheritance/src/clientDefinitions.ts +13 -11
- package/test/integration/generated/models/inheritance/src/index.ts +3 -3
- package/test/integration/generated/models/inheritance/src/logger.ts +5 -0
- package/test/integration/generated/models/inheritance/src/{modelsInheritance.ts → typeModelInheritance.ts} +9 -5
- package/test/integration/generated/models/propertyNullable/README.md +3 -3
- package/test/integration/generated/models/propertyNullable/package.json +1 -1
- package/test/integration/generated/models/propertyNullable/src/clientDefinitions.ts +43 -43
- package/test/integration/generated/models/propertyNullable/src/index.ts +3 -3
- package/test/integration/generated/models/propertyNullable/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyNullable/src/parameters.ts +14 -12
- package/test/integration/generated/models/propertyNullable/src/responses.ts +4 -4
- package/test/integration/generated/models/propertyNullable/src/{modelsPropertyNullable.ts → typePropertyNullable.ts} +9 -5
- package/test/integration/generated/models/propertyOptional/README.md +3 -3
- package/test/integration/generated/models/propertyOptional/package.json +1 -1
- package/test/integration/generated/models/propertyOptional/src/clientDefinitions.ts +47 -47
- package/test/integration/generated/models/propertyOptional/src/index.ts +3 -3
- package/test/integration/generated/models/propertyOptional/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyOptional/src/parameters.ts +7 -6
- package/test/integration/generated/models/propertyOptional/src/responses.ts +4 -4
- package/test/integration/generated/models/propertyOptional/src/{modelsPropertyOptional.ts → typePropertyOptional.ts} +9 -5
- package/test/integration/generated/models/propertyTypes/README.md +3 -3
- package/test/integration/generated/models/propertyTypes/package.json +1 -1
- package/test/integration/generated/models/propertyTypes/src/clientDefinitions.ts +123 -47
- package/test/integration/generated/models/propertyTypes/src/index.ts +3 -3
- package/test/integration/generated/models/propertyTypes/src/logger.ts +5 -0
- package/test/integration/generated/models/propertyTypes/src/models.ts +24 -0
- package/test/integration/generated/models/propertyTypes/src/outputModels.ts +24 -0
- package/test/integration/generated/models/propertyTypes/src/parameters.ts +48 -6
- package/test/integration/generated/models/propertyTypes/src/responses.ts +52 -4
- package/test/integration/generated/models/propertyTypes/src/{modelsPropertyTypes.ts → typePropertyValueTypes.ts} +9 -5
- package/test/integration/generated/models/usage/README.md +3 -3
- package/test/integration/generated/models/usage/package.json +1 -1
- package/test/integration/generated/models/usage/src/clientDefinitions.ts +7 -7
- package/test/integration/generated/models/usage/src/index.ts +3 -3
- package/test/integration/generated/models/usage/src/logger.ts +5 -0
- package/test/integration/generated/models/usage/src/{modelsUsage.ts → typeModelUsage.ts} +9 -5
- package/test/integration/generated/models/visibility/README.md +3 -3
- package/test/integration/generated/models/visibility/package.json +1 -1
- package/test/integration/generated/models/visibility/src/clientDefinitions.ts +3 -3
- package/test/integration/generated/models/visibility/src/index.ts +3 -3
- package/test/integration/generated/models/visibility/src/logger.ts +5 -0
- package/test/integration/generated/models/visibility/src/{modelsVisibilityAutomatic.ts → typeModelVisibility.ts} +9 -5
- package/test/integration/generated/parameters/collection-format/src/clientDefinitions.ts +24 -0
- package/test/integration/generated/parameters/collection-format/src/collectionFormatClient.ts +5 -1
- package/test/integration/generated/parameters/collection-format/src/logger.ts +5 -0
- package/test/integration/generated/parameters/collection-format/src/parameters.ts +33 -0
- package/test/integration/generated/parameters/collection-format/src/responses.ts +15 -0
- package/test/integration/generated/parameters/collection-format/src/serializeHelper.ts +12 -0
- package/test/integration/generated/parameters/spread/src/clientDefinitions.ts +61 -0
- package/test/integration/generated/{lro/lroBasic → parameters/spread}/src/index.ts +4 -5
- package/test/integration/generated/parameters/spread/src/logger.ts +5 -0
- package/test/integration/generated/{lro/lroBasic/src/outputModels.ts → parameters/spread/src/models.ts} +2 -3
- package/test/integration/generated/parameters/spread/src/parameters.ts +61 -0
- package/test/integration/generated/{lro/lroBasic/src/azureLro.ts → parameters/spread/src/parametersSpread.ts} +10 -6
- package/test/integration/generated/parameters/spread/src/responses.ts +25 -0
- package/test/integration/generated/{resiliency/devDriven → parameters/spread}/tspconfig.yaml +2 -4
- package/test/integration/generated/projection/src/clientDefinitions.ts +47 -21
- package/test/integration/generated/projection/src/logger.ts +5 -0
- package/test/integration/generated/projection/src/models.ts +18 -7
- package/test/integration/generated/projection/src/parameters.ts +32 -10
- package/test/integration/generated/projection/src/projectionClient.ts +5 -1
- package/test/integration/generated/projection/src/responses.ts +18 -3
- package/test/integration/generated/resiliency/srvDriven1/README.md +4 -4
- package/test/integration/generated/resiliency/srvDriven1/package.json +1 -1
- package/test/integration/generated/resiliency/srvDriven1/src/clientDefinitions.ts +25 -49
- package/test/integration/generated/resiliency/srvDriven1/src/index.ts +3 -5
- package/test/integration/generated/resiliency/srvDriven1/src/logger.ts +5 -0
- package/test/integration/generated/resiliency/srvDriven1/src/parameters.ts +11 -32
- package/test/integration/generated/resiliency/srvDriven1/src/responses.ts +9 -24
- package/test/integration/generated/resiliency/srvDriven1/src/serviceDrivenOldClient.ts +43 -0
- package/test/integration/generated/resiliency/srvDriven1/tspconfig.yaml +1 -0
- package/test/integration/generated/resiliency/srvDriven2/README.md +13 -4
- package/test/integration/generated/resiliency/srvDriven2/package.json +1 -1
- package/test/integration/generated/resiliency/srvDriven2/src/clientDefinitions.ts +32 -68
- package/test/integration/generated/resiliency/srvDriven2/src/index.ts +3 -5
- package/test/integration/generated/resiliency/srvDriven2/src/logger.ts +5 -0
- package/test/integration/generated/resiliency/srvDriven2/src/parameters.ts +19 -42
- package/test/integration/generated/resiliency/srvDriven2/src/responses.ts +10 -31
- package/test/integration/generated/resiliency/srvDriven2/src/serviceDrivenNewClient.ts +43 -0
- package/test/integration/generated/resiliency/srvDriven2/tspconfig.yaml +1 -0
- package/test/integration/generated/server/path/multiple/src/logger.ts +5 -0
- package/test/integration/generated/server/path/multiple/src/multipleParamInServerPathClient.ts +6 -2
- package/test/integration/generated/server/path/single/src/logger.ts +5 -0
- package/test/integration/generated/server/path/single/src/singleParamInServerPathClient.ts +6 -2
- package/test/integration/generated/specialWords/src/logger.ts +5 -0
- package/test/integration/generated/specialWords/src/specialWordsClient.ts +5 -1
- package/test/integration/generated/unions/src/clientDefinitions.ts +8 -8
- package/test/integration/generated/unions/src/logger.ts +5 -0
- package/test/integration/generated/unions/src/unionsClient.ts +5 -1
- package/test/integration/internal.spec.ts +45 -12
- package/test/integration/lroCore.spec.ts +89 -0
- package/test/integration/modelInheritance.spec.ts +13 -13
- package/test/integration/modelPropertyNullable.spec.ts +8 -8
- package/test/integration/modelPropertyOptional.spec.ts +32 -32
- package/test/integration/modelPropertyType.spec.ts +22 -6
- package/test/integration/modelUsage.spec.ts +7 -7
- package/test/integration/projection.spec.ts +62 -15
- package/test/integration/resiliencyDpgCustomization.spec.ts +133 -38
- package/test/integration/spreadParameters.spec.ts +82 -0
- package/test/integration/unions.spec.ts +4 -4
- package/test/unit/apiVersion.spec.ts +19 -7
- package/test/unit/clientFactoryGenerator.spec.ts +44 -16
- package/test/unit/modelsGenerator.spec.ts +212 -2
- package/test/unit/util/emitUtil.ts +13 -4
- package/test/unit/util/testUtil.ts +7 -2
- package/typespec-ts.build.log +0 -1
- package/dist/src/transform/transformAnnotationDetails.d.ts +0 -6
- package/dist/src/transform/transformAnnotationDetails.d.ts.map +0 -1
- package/dist/src/transform/transformAnnotationDetails.js.map +0 -1
- package/test/integration/generated/internal/src/models.ts +0 -8
- package/test/integration/generated/lro/lroBasic/src/clientDefinitions.ts +0 -37
- package/test/integration/generated/lro/lroBasic/src/parameters.ts +0 -8
- package/test/integration/generated/lro/lroBasic/src/responses.ts +0 -23
- package/test/integration/generated/resiliency/devDriven/.eslintrc.json +0 -11
- package/test/integration/generated/resiliency/devDriven/README.md +0 -56
- package/test/integration/generated/resiliency/devDriven/api-extractor.json +0 -18
- package/test/integration/generated/resiliency/devDriven/package.json +0 -81
- package/test/integration/generated/resiliency/devDriven/rollup.config.js +0 -118
- package/test/integration/generated/resiliency/devDriven/src/clientDefinitions.ts +0 -75
- package/test/integration/generated/resiliency/devDriven/src/models.ts +0 -8
- package/test/integration/generated/resiliency/devDriven/src/outputModels.ts +0 -25
- package/test/integration/generated/resiliency/devDriven/src/paginateHelper.ts +0 -154
- package/test/integration/generated/resiliency/devDriven/src/parameters.ts +0 -17
- package/test/integration/generated/resiliency/devDriven/src/resiliencyDevDriven.ts +0 -31
- package/test/integration/generated/resiliency/devDriven/src/responses.ts +0 -62
- package/test/integration/generated/resiliency/devDriven/tsconfig.json +0 -25
- package/test/integration/generated/resiliency/srvDriven1/src/models.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven1/src/outputModels.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven1/src/resiliencyServiceDriven1.ts +0 -31
- package/test/integration/generated/resiliency/srvDriven2/src/models.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven2/src/outputModels.ts +0 -6
- package/test/integration/generated/resiliency/srvDriven2/src/resiliencyServiceDriven2.ts +0 -31
- package/test/integration/helloWorld.spec.ts +0 -20
- package/test/integration/lroBasic.spec.ts +0 -25
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/.eslintrc.json +0 -0
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/rollup.config.js +0 -0
- /package/test/integration/generated/lro/{lroBasic → lroRPC}/tsconfig.json +0 -0
package/package.json
CHANGED
|
@@ -1,28 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure-tools/typespec-ts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "An experimental CADL emitter for TypeScript RLC",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"clean": "rimraf ./dist ./cadl-output",
|
|
9
|
-
"build": "tsc -p .",
|
|
10
|
-
"test": "npm run unit-test && npm run integration-test-ci",
|
|
11
|
-
"lint": "eslint src --ext .ts --max-warnings=0",
|
|
12
|
-
"lint:fix": "eslint src --fix --ext .ts",
|
|
13
|
-
"format": "npm run -s prettier -- --write",
|
|
14
|
-
"check-format": "npm run prettier -- --check",
|
|
15
|
-
"prettier": "prettier --config ./.prettierrc src/**/*.ts",
|
|
16
|
-
"check:tree": "ts-node ./test/commands/check-clean-tree.ts",
|
|
17
|
-
"integration-test-ci": "npm run start-test-server & npm run copy:typespec && npm run generate-and-run",
|
|
18
|
-
"start-test-server": "mkdirp -p coverage && npx cadl-ranch serve ./node_modules/@azure-tools/cadl-ranch-specs/http --coverageFile ./coverage/cadl-ranch-coverage-typescript.json",
|
|
19
|
-
"copy:typespec": "rm -rf temp && mkdirp -p temp && cp -r ./node_modules/@azure-tools/cadl-ranch-specs/http ./temp",
|
|
20
|
-
"generate-and-run": "npm run generate-cadl-only && npm run integration-test:alone && npm run stop-test-server",
|
|
21
|
-
"generate-cadl-only": "ts-node ./test/commands/gen-cadl-ranch.ts",
|
|
22
|
-
"integration-test:alone": "cross-env TS_NODE_PROJECT=tsconfig.test.json mocha -r ts-node/register --experimental-specifier-resolution=node --timeout 2000 ./test/integration/*.spec.ts",
|
|
23
|
-
"stop-test-server": "npx cadl-ranch server stop",
|
|
24
|
-
"unit-test": "cross-env TS_NODE_PROJECT=tsconfig.json mocha -r ts-node/register --experimental-specifier-resolution=node --experimental-modules=true './test/unit/**/*.spec.ts'"
|
|
25
|
-
},
|
|
26
7
|
"author": "Jose Heredia <joheredi@microsoft.com>",
|
|
27
8
|
"license": "MIT",
|
|
28
9
|
"devDependencies": {
|
|
@@ -33,7 +14,7 @@
|
|
|
33
14
|
"@types/fs-extra": "^9.0.13",
|
|
34
15
|
"@typescript-eslint/eslint-plugin": "^5.58.0",
|
|
35
16
|
"@typescript-eslint/parser": "^5.58.0",
|
|
36
|
-
"@typespec/http": "~0.
|
|
17
|
+
"@typespec/http": "~0.44.0",
|
|
37
18
|
"chai": "^4.3.6",
|
|
38
19
|
"mkdirp": "^2.1.2",
|
|
39
20
|
"eslint": "^8.9.0",
|
|
@@ -42,30 +23,33 @@
|
|
|
42
23
|
"ts-node": "^10.9.1",
|
|
43
24
|
"typescript": "~5.0.0",
|
|
44
25
|
"prettier": "~2.7.1",
|
|
45
|
-
"@azure-tools/cadl-ranch-specs": "~0.
|
|
46
|
-
"@typespec/versioning": "~0.
|
|
47
|
-
"@azure-tools/cadl-ranch-expect": "^0.
|
|
48
|
-
"@azure-tools/cadl-ranch": "~0.4.
|
|
26
|
+
"@azure-tools/cadl-ranch-specs": "~0.14.10",
|
|
27
|
+
"@typespec/versioning": "~0.44.0",
|
|
28
|
+
"@azure-tools/cadl-ranch-expect": "^0.3.0",
|
|
29
|
+
"@azure-tools/cadl-ranch": "~0.4.13",
|
|
49
30
|
"chalk": "^4.0.0",
|
|
50
|
-
"@azure-rest/core-client": "^1.1.
|
|
31
|
+
"@azure-rest/core-client": "^1.1.3",
|
|
51
32
|
"@azure/core-auth": "^1.3.2",
|
|
52
33
|
"cross-env": "^7.0.3",
|
|
53
34
|
"@azure/core-paging": "^1.5.0",
|
|
54
|
-
"@azure/core-lro": "^2.
|
|
55
|
-
"@azure/core-rest-pipeline": "^1.9.2"
|
|
35
|
+
"@azure/core-lro": "^2.5.3",
|
|
36
|
+
"@azure/core-rest-pipeline": "^1.9.2",
|
|
37
|
+
"@azure/logger": "^1.0.4"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@azure-tools/typespec-azure-core": ">=0.30.0 <1.0.0",
|
|
41
|
+
"@azure-tools/typespec-client-generator-core": ">=0.30.0 <1.0.0",
|
|
42
|
+
"@typespec/compiler": ">=0.44.0 <1.0.0",
|
|
43
|
+
"@typespec/http": ">=0.44.0 <1.0.0",
|
|
44
|
+
"@typespec/rest": ">=0.44.0 <1.0.0",
|
|
45
|
+
"@typespec/versioning": ">=0.44.0 <1.0.0"
|
|
56
46
|
},
|
|
57
47
|
"dependencies": {
|
|
58
|
-
"@typespec/compiler": "~0.43.0",
|
|
59
|
-
"@azure-tools/typespec-azure-core": "~0.29.0",
|
|
60
|
-
"@typespec/rest": "~0.43.0",
|
|
61
48
|
"prettier": "^2.6.1",
|
|
62
49
|
"tslib": "^2.3.1",
|
|
63
|
-
"@azure-tools/rlc-common": "^0.
|
|
50
|
+
"@azure-tools/rlc-common": "^0.13.0",
|
|
64
51
|
"ts-morph": "^15.1.0",
|
|
65
|
-
"
|
|
66
|
-
"fs-extra": "^11.1.0",
|
|
67
|
-
"@typespec/openapi": "0.43.0",
|
|
68
|
-
"@typespec/openapi3": "0.43.0"
|
|
52
|
+
"fs-extra": "^11.1.0"
|
|
69
53
|
},
|
|
70
54
|
"mocha": {
|
|
71
55
|
"extension": [
|
|
@@ -76,5 +60,24 @@
|
|
|
76
60
|
"bugs": {
|
|
77
61
|
"url": "https://github.com/Azure/autorest.typescript/issues"
|
|
78
62
|
},
|
|
79
|
-
"homepage": "https://github.com/Azure/autorest.typescript/tree/main/packages/typespec-ts/"
|
|
80
|
-
|
|
63
|
+
"homepage": "https://github.com/Azure/autorest.typescript/tree/main/packages/typespec-ts/",
|
|
64
|
+
"scripts": {
|
|
65
|
+
"clean": "rimraf ./dist ./cadl-output",
|
|
66
|
+
"build": "tsc -p .",
|
|
67
|
+
"test": "npm run unit-test && npm run integration-test-ci",
|
|
68
|
+
"lint": "eslint src --ext .ts --max-warnings=0",
|
|
69
|
+
"lint:fix": "eslint src --fix --ext .ts",
|
|
70
|
+
"format": "npm run -s prettier -- --write",
|
|
71
|
+
"check-format": "npm run prettier -- --check",
|
|
72
|
+
"prettier": "prettier --config ./.prettierrc src/**/*.ts",
|
|
73
|
+
"check:tree": "ts-node ./test/commands/check-clean-tree.ts",
|
|
74
|
+
"integration-test-ci": "npm run start-test-server & npm run copy:typespec && npm run generate-and-run",
|
|
75
|
+
"start-test-server": "mkdirp -p coverage && npx cadl-ranch serve ./node_modules/@azure-tools/cadl-ranch-specs/http --coverageFile ./coverage/cadl-ranch-coverage-typescript.json",
|
|
76
|
+
"copy:typespec": "rm -rf temp && mkdirp -p temp && cp -r ./node_modules/@azure-tools/cadl-ranch-specs/http ./temp",
|
|
77
|
+
"generate-and-run": "npm run generate-cadl-only && npm run integration-test:alone && npm run stop-test-server",
|
|
78
|
+
"generate-cadl-only": "ts-node ./test/commands/gen-cadl-ranch.ts",
|
|
79
|
+
"integration-test:alone": "cross-env TS_NODE_PROJECT=tsconfig.test.json mocha -r ts-node/register --experimental-specifier-resolution=node --timeout 4000 ./test/integration/*.spec.ts",
|
|
80
|
+
"stop-test-server": "npx cadl-ranch server stop",
|
|
81
|
+
"unit-test": "cross-env TS_NODE_PROJECT=tsconfig.json mocha -r ts-node/register --experimental-specifier-resolution=node --experimental-modules=true './test/unit/**/*.spec.ts'"
|
|
82
|
+
}
|
|
83
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
buildSampleTest,
|
|
26
26
|
buildReadmeFile,
|
|
27
27
|
buildSerializeHelper,
|
|
28
|
+
buildLogger,
|
|
28
29
|
RLCOptions
|
|
29
30
|
} from "@azure-tools/rlc-common";
|
|
30
31
|
import { transformRLCModel } from "./transform/transform.js";
|
|
@@ -71,6 +72,7 @@ export async function $onEmit(context: EmitContext) {
|
|
|
71
72
|
await emitContentByBuilder(program, buildParameterTypes, rlcModels);
|
|
72
73
|
await emitContentByBuilder(program, buildIsUnexpectedHelper, rlcModels);
|
|
73
74
|
await emitContentByBuilder(program, buildIndexFile, rlcModels);
|
|
75
|
+
await emitContentByBuilder(program, buildLogger, rlcModels);
|
|
74
76
|
await emitContentByBuilder(program, buildTopLevelIndex, rlcModels);
|
|
75
77
|
await emitContentByBuilder(program, buildPaginateHelper, rlcModels);
|
|
76
78
|
await emitContentByBuilder(program, buildPollingHelper, rlcModels);
|
package/src/modelUtils.ts
CHANGED
|
@@ -39,7 +39,9 @@ import {
|
|
|
39
39
|
NumericLiteral,
|
|
40
40
|
Service,
|
|
41
41
|
listServices,
|
|
42
|
-
Program
|
|
42
|
+
Program,
|
|
43
|
+
getEncode,
|
|
44
|
+
EncodeData
|
|
43
45
|
} from "@typespec/compiler";
|
|
44
46
|
import { reportDiagnostic } from "./lib.js";
|
|
45
47
|
import {
|
|
@@ -74,12 +76,15 @@ export function getBinaryType(usage: SchemaContext[]) {
|
|
|
74
76
|
|
|
75
77
|
export function getSchemaForType(
|
|
76
78
|
program: Program,
|
|
79
|
+
dpgContext: SdkContext,
|
|
77
80
|
typeInput: Type,
|
|
78
81
|
usage?: SchemaContext[],
|
|
79
|
-
needRef
|
|
82
|
+
needRef: boolean = false,
|
|
83
|
+
relevantProperty?: ModelProperty
|
|
80
84
|
) {
|
|
81
85
|
const type = getEffectiveModelFromType(program, typeInput);
|
|
82
|
-
|
|
86
|
+
|
|
87
|
+
const builtinType = mapCadlTypeToTypeScript(program, dpgContext, type, usage);
|
|
83
88
|
if (builtinType !== undefined) {
|
|
84
89
|
// add in description elements for types derived from primitive types (SecureString, etc.)
|
|
85
90
|
const doc = getDoc(program, type);
|
|
@@ -89,7 +94,13 @@ export function getSchemaForType(
|
|
|
89
94
|
return builtinType;
|
|
90
95
|
}
|
|
91
96
|
if (type.kind === "Model") {
|
|
92
|
-
const schema = getSchemaForModel(
|
|
97
|
+
const schema = getSchemaForModel(
|
|
98
|
+
program,
|
|
99
|
+
dpgContext,
|
|
100
|
+
type,
|
|
101
|
+
usage,
|
|
102
|
+
needRef
|
|
103
|
+
) as any;
|
|
93
104
|
if (usage && usage.includes(SchemaContext.Output)) {
|
|
94
105
|
schema.outputTypeName = `${schema.name}Output`;
|
|
95
106
|
schema.typeName = `${schema.name}`;
|
|
@@ -97,13 +108,13 @@ export function getSchemaForType(
|
|
|
97
108
|
schema.usage = usage;
|
|
98
109
|
return schema;
|
|
99
110
|
} else if (type.kind === "Union") {
|
|
100
|
-
return getSchemaForUnion(program, type, usage);
|
|
111
|
+
return getSchemaForUnion(program, dpgContext, type, usage);
|
|
101
112
|
} else if (type.kind === "UnionVariant") {
|
|
102
|
-
return getSchemaForUnionVariant(program, type, usage);
|
|
113
|
+
return getSchemaForUnionVariant(program, dpgContext, type, usage);
|
|
103
114
|
} else if (type.kind === "Enum") {
|
|
104
115
|
return getSchemaForEnum(program, type);
|
|
105
116
|
} else if (type.kind === "Scalar") {
|
|
106
|
-
return getSchemaForScalar(program, type);
|
|
117
|
+
return getSchemaForScalar(program, dpgContext, type, relevantProperty);
|
|
107
118
|
}
|
|
108
119
|
if (isUnknownType(type)) {
|
|
109
120
|
const returnType: any = { type: "unknown" };
|
|
@@ -152,16 +163,22 @@ export function includeDerivedModel(model: Model): boolean {
|
|
|
152
163
|
);
|
|
153
164
|
}
|
|
154
165
|
|
|
155
|
-
function getSchemaForScalar(
|
|
156
|
-
|
|
166
|
+
function getSchemaForScalar(
|
|
167
|
+
program: Program,
|
|
168
|
+
dpgContext: SdkContext,
|
|
169
|
+
scalar: Scalar,
|
|
170
|
+
relevantProperty?: ModelProperty
|
|
171
|
+
) {
|
|
172
|
+
let result = getSchemaForStdScalar(program, scalar, relevantProperty);
|
|
157
173
|
if (!result && scalar.baseScalar) {
|
|
158
|
-
result = getSchemaForScalar(program, scalar.baseScalar);
|
|
174
|
+
result = getSchemaForScalar(program, dpgContext, scalar.baseScalar);
|
|
159
175
|
}
|
|
160
176
|
return applyIntrinsicDecorators(program, scalar, result);
|
|
161
177
|
}
|
|
162
178
|
|
|
163
179
|
function getSchemaForUnion(
|
|
164
180
|
program: Program,
|
|
181
|
+
dpgContext: SdkContext,
|
|
165
182
|
union: Union,
|
|
166
183
|
usage?: SchemaContext[]
|
|
167
184
|
) {
|
|
@@ -170,7 +187,7 @@ function getSchemaForUnion(
|
|
|
170
187
|
|
|
171
188
|
for (const variant of variants) {
|
|
172
189
|
// We already know it's not a model type
|
|
173
|
-
values.push(getSchemaForType(program, variant.type, usage));
|
|
190
|
+
values.push(getSchemaForType(program, dpgContext, variant.type, usage));
|
|
174
191
|
}
|
|
175
192
|
|
|
176
193
|
const schema: any = {};
|
|
@@ -202,10 +219,11 @@ function getSchemaForUnion(
|
|
|
202
219
|
|
|
203
220
|
function getSchemaForUnionVariant(
|
|
204
221
|
program: Program,
|
|
222
|
+
dpgContext: SdkContext,
|
|
205
223
|
variant: UnionVariant,
|
|
206
224
|
usage?: SchemaContext[]
|
|
207
225
|
): Schema {
|
|
208
|
-
return getSchemaForType(program, variant, usage);
|
|
226
|
+
return getSchemaForType(program, dpgContext, variant, usage);
|
|
209
227
|
}
|
|
210
228
|
|
|
211
229
|
// An openapi "string" can be defined in several different ways in Cadl
|
|
@@ -323,26 +341,10 @@ function isSchemaProperty(program: Program, property: ModelProperty) {
|
|
|
323
341
|
const statusCodeinfo = isStatusCode(program, property);
|
|
324
342
|
return !(headerInfo || queryInfo || pathInfo || statusCodeinfo);
|
|
325
343
|
}
|
|
326
|
-
|
|
327
|
-
// switch (type.kind) {
|
|
328
|
-
// case "String":
|
|
329
|
-
// return type.value;
|
|
330
|
-
// case "Number":
|
|
331
|
-
// return type.value;
|
|
332
|
-
// case "Boolean":
|
|
333
|
-
// return type.value;
|
|
334
|
-
// case "Tuple":
|
|
335
|
-
// return type.values.map(item => getDefaultValue(program, item));
|
|
336
|
-
// default:
|
|
337
|
-
// reportDiagnostic(program, {
|
|
338
|
-
// code: "invalid-default",
|
|
339
|
-
// format: { type: type.kind },
|
|
340
|
-
// target: type,
|
|
341
|
-
// });
|
|
342
|
-
// }
|
|
343
|
-
// }
|
|
344
|
+
|
|
344
345
|
function getSchemaForModel(
|
|
345
346
|
program: Program,
|
|
347
|
+
dpgContext: SdkContext,
|
|
346
348
|
model: Model,
|
|
347
349
|
usage?: SchemaContext[],
|
|
348
350
|
needRef?: boolean
|
|
@@ -413,8 +415,13 @@ function getSchemaForModel(
|
|
|
413
415
|
}
|
|
414
416
|
})
|
|
415
417
|
.join("");
|
|
416
|
-
|
|
417
|
-
|
|
418
|
+
if (
|
|
419
|
+
paged.itemsProperty.name === "value" &&
|
|
420
|
+
paged.nextLinkProperty?.name === "nextLink"
|
|
421
|
+
) {
|
|
422
|
+
modelSchema.alias = `Paged<${templateName}>`;
|
|
423
|
+
modelSchema.outputAlias = `Paged<${templateName}Output>`;
|
|
424
|
+
}
|
|
418
425
|
}
|
|
419
426
|
}
|
|
420
427
|
}
|
|
@@ -430,10 +437,23 @@ function getSchemaForModel(
|
|
|
430
437
|
};
|
|
431
438
|
}
|
|
432
439
|
for (const child of derivedModels) {
|
|
433
|
-
const childSchema = getSchemaForType(
|
|
440
|
+
const childSchema = getSchemaForType(
|
|
441
|
+
program,
|
|
442
|
+
dpgContext,
|
|
443
|
+
child,
|
|
444
|
+
usage,
|
|
445
|
+
true
|
|
446
|
+
);
|
|
434
447
|
for (const [name, prop] of child.properties) {
|
|
435
448
|
if (name === discriminator?.propertyName) {
|
|
436
|
-
const propSchema = getSchemaForType(
|
|
449
|
+
const propSchema = getSchemaForType(
|
|
450
|
+
program,
|
|
451
|
+
dpgContext,
|
|
452
|
+
prop.type,
|
|
453
|
+
usage,
|
|
454
|
+
true,
|
|
455
|
+
prop
|
|
456
|
+
);
|
|
437
457
|
childSchema.discriminatorValue = propSchema.type.replace(/"/g, "");
|
|
438
458
|
break;
|
|
439
459
|
}
|
|
@@ -476,7 +496,14 @@ function getSchemaForModel(
|
|
|
476
496
|
continue;
|
|
477
497
|
}
|
|
478
498
|
|
|
479
|
-
const propSchema = getSchemaForType(
|
|
499
|
+
const propSchema = getSchemaForType(
|
|
500
|
+
program,
|
|
501
|
+
dpgContext,
|
|
502
|
+
prop.type,
|
|
503
|
+
usage,
|
|
504
|
+
true,
|
|
505
|
+
prop
|
|
506
|
+
);
|
|
480
507
|
if (propSchema === undefined) {
|
|
481
508
|
continue;
|
|
482
509
|
}
|
|
@@ -501,17 +528,18 @@ function getSchemaForModel(
|
|
|
501
528
|
}
|
|
502
529
|
|
|
503
530
|
// Apply decorators on the property to the type's schema
|
|
504
|
-
const newPropSchema = applyIntrinsicDecorators(
|
|
531
|
+
const newPropSchema = applyIntrinsicDecorators(
|
|
532
|
+
program,
|
|
533
|
+
|
|
534
|
+
prop,
|
|
535
|
+
propSchema
|
|
536
|
+
);
|
|
505
537
|
if (newPropSchema === undefined) {
|
|
506
538
|
continue;
|
|
507
539
|
}
|
|
508
540
|
// Use the description from ModelProperty not devired from Model Type
|
|
509
541
|
newPropSchema.description = propertyDescription;
|
|
510
542
|
|
|
511
|
-
if (prop.default) {
|
|
512
|
-
// modelSchema.properties[name]['default'] = getDefaultValue(program, prop.default);
|
|
513
|
-
}
|
|
514
|
-
|
|
515
543
|
// Should the property be marked as readOnly?
|
|
516
544
|
const vis = getVisibility(program, prop);
|
|
517
545
|
if (vis && vis.includes("read")) {
|
|
@@ -549,15 +577,24 @@ function getSchemaForModel(
|
|
|
549
577
|
) {
|
|
550
578
|
// Take the base model schema but carry across the documentation property
|
|
551
579
|
// that we set before
|
|
552
|
-
const baseSchema = getSchemaForType(
|
|
580
|
+
const baseSchema = getSchemaForType(
|
|
581
|
+
program,
|
|
582
|
+
dpgContext,
|
|
583
|
+
model.baseModel,
|
|
584
|
+
usage
|
|
585
|
+
);
|
|
553
586
|
modelSchema = {
|
|
554
587
|
...baseSchema,
|
|
555
588
|
description: modelSchema.description
|
|
556
589
|
};
|
|
557
590
|
} else if (model.baseModel) {
|
|
558
591
|
modelSchema.parents = {
|
|
559
|
-
all: [
|
|
560
|
-
|
|
592
|
+
all: [
|
|
593
|
+
getSchemaForType(program, dpgContext, model.baseModel, usage, true)
|
|
594
|
+
],
|
|
595
|
+
immediate: [
|
|
596
|
+
getSchemaForType(program, dpgContext, model.baseModel, usage, true)
|
|
597
|
+
]
|
|
561
598
|
};
|
|
562
599
|
}
|
|
563
600
|
return modelSchema;
|
|
@@ -566,6 +603,7 @@ function getSchemaForModel(
|
|
|
566
603
|
// OA schema is just a regular object schema.
|
|
567
604
|
function mapCadlTypeToTypeScript(
|
|
568
605
|
program: Program,
|
|
606
|
+
dpgContext: SdkContext,
|
|
569
607
|
cadlType: Type,
|
|
570
608
|
usage?: SchemaContext[]
|
|
571
609
|
): any {
|
|
@@ -577,7 +615,7 @@ function mapCadlTypeToTypeScript(
|
|
|
577
615
|
case "Boolean":
|
|
578
616
|
return { type: `${cadlType.value}` };
|
|
579
617
|
case "Model":
|
|
580
|
-
return mapCadlStdTypeToTypeScript(program, cadlType, usage);
|
|
618
|
+
return mapCadlStdTypeToTypeScript(program, dpgContext, cadlType, usage);
|
|
581
619
|
}
|
|
582
620
|
if (cadlType.kind === undefined) {
|
|
583
621
|
if (typeof cadlType === "string") {
|
|
@@ -685,6 +723,7 @@ function getSchemaForEnum(program: Program, e: Enum) {
|
|
|
685
723
|
*/
|
|
686
724
|
function mapCadlStdTypeToTypeScript(
|
|
687
725
|
program: Program,
|
|
726
|
+
dpgContext: SdkContext,
|
|
688
727
|
cadlType: Model,
|
|
689
728
|
usage?: SchemaContext[]
|
|
690
729
|
): any | undefined {
|
|
@@ -696,6 +735,7 @@ function mapCadlStdTypeToTypeScript(
|
|
|
696
735
|
if (name === "string") {
|
|
697
736
|
const valueType = getSchemaForType(
|
|
698
737
|
program,
|
|
738
|
+
dpgContext,
|
|
699
739
|
indexer.value!,
|
|
700
740
|
usage,
|
|
701
741
|
true
|
|
@@ -727,7 +767,13 @@ function mapCadlStdTypeToTypeScript(
|
|
|
727
767
|
} else if (name === "integer") {
|
|
728
768
|
schema = {
|
|
729
769
|
type: "array",
|
|
730
|
-
items: getSchemaForType(
|
|
770
|
+
items: getSchemaForType(
|
|
771
|
+
program,
|
|
772
|
+
dpgContext,
|
|
773
|
+
indexer.value!,
|
|
774
|
+
usage,
|
|
775
|
+
true
|
|
776
|
+
),
|
|
731
777
|
description: getDoc(program, cadlType)
|
|
732
778
|
};
|
|
733
779
|
if (
|
|
@@ -779,10 +825,26 @@ function isUnionType(type: Type) {
|
|
|
779
825
|
return type.kind === "Union";
|
|
780
826
|
}
|
|
781
827
|
|
|
782
|
-
function getSchemaForStdScalar(
|
|
828
|
+
function getSchemaForStdScalar(
|
|
829
|
+
program: Program,
|
|
830
|
+
cadlType: Scalar,
|
|
831
|
+
relevantProperty?: ModelProperty
|
|
832
|
+
) {
|
|
783
833
|
if (!program.checker.isStdType(cadlType)) {
|
|
784
834
|
return undefined;
|
|
785
835
|
}
|
|
836
|
+
|
|
837
|
+
/**
|
|
838
|
+
* lookup for @encode decorator
|
|
839
|
+
* if absent use typespec type (or default way of serializing that type)
|
|
840
|
+
* if present respect type provided in @encode
|
|
841
|
+
*/
|
|
842
|
+
if (relevantProperty) {
|
|
843
|
+
const encodeData = getEncode(program, relevantProperty);
|
|
844
|
+
if (encodeData && isEncodeTypeEffective(cadlType, encodeData)) {
|
|
845
|
+
cadlType = encodeData.type;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
786
848
|
const name = cadlType.name;
|
|
787
849
|
const description = getSummary(program, cadlType);
|
|
788
850
|
switch (name) {
|
|
@@ -848,7 +910,9 @@ function getSchemaForStdScalar(program: Program, cadlType: Scalar) {
|
|
|
848
910
|
format: "float"
|
|
849
911
|
});
|
|
850
912
|
case "string":
|
|
851
|
-
return applyIntrinsicDecorators(program, cadlType, {
|
|
913
|
+
return applyIntrinsicDecorators(program, cadlType, {
|
|
914
|
+
type: "string"
|
|
915
|
+
});
|
|
852
916
|
case "boolean":
|
|
853
917
|
return { type: "boolean", description };
|
|
854
918
|
case "plainDate":
|
|
@@ -867,6 +931,14 @@ function getSchemaForStdScalar(program: Program, cadlType: Scalar) {
|
|
|
867
931
|
typeName: "Date | string",
|
|
868
932
|
outputTypeName: "string"
|
|
869
933
|
};
|
|
934
|
+
case "offsetDateTime":
|
|
935
|
+
return {
|
|
936
|
+
type: "string",
|
|
937
|
+
format: "date-time",
|
|
938
|
+
description,
|
|
939
|
+
typeName: "Date | string",
|
|
940
|
+
outputTypeName: "string"
|
|
941
|
+
};
|
|
870
942
|
case "plainTime":
|
|
871
943
|
return {
|
|
872
944
|
type: "string",
|
|
@@ -880,6 +952,28 @@ function getSchemaForStdScalar(program: Program, cadlType: Scalar) {
|
|
|
880
952
|
}
|
|
881
953
|
}
|
|
882
954
|
|
|
955
|
+
function isEncodeTypeEffective(
|
|
956
|
+
type: Scalar,
|
|
957
|
+
encodeData: EncodeData | undefined
|
|
958
|
+
) {
|
|
959
|
+
if (!encodeData) {
|
|
960
|
+
return false;
|
|
961
|
+
}
|
|
962
|
+
const datetimeTypes = [
|
|
963
|
+
"plaindate",
|
|
964
|
+
"utcdatetime",
|
|
965
|
+
"offsetdatetime",
|
|
966
|
+
"plaintime"
|
|
967
|
+
];
|
|
968
|
+
if (
|
|
969
|
+
datetimeTypes.includes(type.name.toLowerCase()) &&
|
|
970
|
+
encodeData.type.name === "string"
|
|
971
|
+
) {
|
|
972
|
+
return false;
|
|
973
|
+
}
|
|
974
|
+
return true;
|
|
975
|
+
}
|
|
976
|
+
|
|
883
977
|
export function getTypeName(schema: Schema, usage?: SchemaContext[]): string {
|
|
884
978
|
// TODO: Handle more cases
|
|
885
979
|
return getPriorityName(schema, usage) ?? schema.type ?? "any";
|
|
@@ -935,6 +1029,7 @@ export function getFormattedPropertyDoc(
|
|
|
935
1029
|
|
|
936
1030
|
export function getBodyType(
|
|
937
1031
|
program: Program,
|
|
1032
|
+
|
|
938
1033
|
route: HttpOperation
|
|
939
1034
|
): Type | undefined {
|
|
940
1035
|
let bodyModel = route.parameters.bodyType;
|
|
@@ -950,6 +1045,7 @@ export function getBodyType(
|
|
|
950
1045
|
if (responseBody) {
|
|
951
1046
|
const bodyTypeInResponse = getEffectiveModelFromType(
|
|
952
1047
|
program,
|
|
1048
|
+
|
|
953
1049
|
responseBody.type
|
|
954
1050
|
);
|
|
955
1051
|
// response body type is reosurce type, and request body type (if templated) contains resource type
|
package/src/operationUtil.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
|
|
4
|
-
import { NameType, normalizeName } from "@azure-tools/rlc-common";
|
|
5
4
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
NameType,
|
|
6
|
+
Paths,
|
|
7
|
+
ResponseMetadata,
|
|
8
|
+
ResponseTypes,
|
|
9
|
+
getLroLogicalResponseName,
|
|
10
|
+
normalizeName
|
|
11
|
+
} from "@azure-tools/rlc-common";
|
|
12
|
+
import { ignoreDiagnostics, Model, Program, Type } from "@typespec/compiler";
|
|
12
13
|
import {
|
|
13
14
|
getHttpOperation,
|
|
14
15
|
HttpOperation,
|
|
@@ -16,6 +17,7 @@ import {
|
|
|
16
17
|
StatusCode
|
|
17
18
|
} from "@typespec/http";
|
|
18
19
|
import {
|
|
20
|
+
getLroMetadata,
|
|
19
21
|
getPagedResult,
|
|
20
22
|
PagedResultMetadata
|
|
21
23
|
} from "@azure-tools/typespec-azure-core";
|
|
@@ -26,6 +28,11 @@ import {
|
|
|
26
28
|
listOperationsInOperationGroup,
|
|
27
29
|
SdkOperationGroup
|
|
28
30
|
} from "@azure-tools/typespec-client-generator-core";
|
|
31
|
+
import {
|
|
32
|
+
OperationLroDetail,
|
|
33
|
+
OPERATION_LRO_LOW_PRIORITY,
|
|
34
|
+
OPERATION_LRO_HIGH_PRIORITY
|
|
35
|
+
} from "@azure-tools/rlc-common";
|
|
29
36
|
|
|
30
37
|
export function getNormalizedOperationName(
|
|
31
38
|
route: HttpOperation,
|
|
@@ -52,7 +59,11 @@ export function getOperationStatuscode(
|
|
|
52
59
|
|
|
53
60
|
// FIXME: this is the placeholder function to extract the operationGroupName
|
|
54
61
|
export function getOperationGroupName(operationGroup?: SdkOperationGroup) {
|
|
55
|
-
return
|
|
62
|
+
return normalizeName(
|
|
63
|
+
operationGroup?.type.name ?? "",
|
|
64
|
+
NameType.Interface,
|
|
65
|
+
true
|
|
66
|
+
);
|
|
56
67
|
}
|
|
57
68
|
|
|
58
69
|
export function isDefaultStatusCode(statusCode: StatusCode) {
|
|
@@ -82,27 +93,105 @@ export function isLongRunningOperation(
|
|
|
82
93
|
program: Program,
|
|
83
94
|
operation: HttpOperation
|
|
84
95
|
) {
|
|
85
|
-
program;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
return Boolean(getLroMetadata(program, operation.operation));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Return if we have a client-level LRO overloading
|
|
101
|
+
* @param pathDictionary
|
|
102
|
+
* @returns
|
|
103
|
+
*/
|
|
104
|
+
export function getClientLroOverload(pathDictionary: Paths) {
|
|
105
|
+
let lroCounts = 0,
|
|
106
|
+
allowCounts = 0;
|
|
107
|
+
for (const details of Object.values(pathDictionary)) {
|
|
108
|
+
for (const methodDetails of Object.values(details.methods)) {
|
|
109
|
+
const lroDetail = methodDetails[0].operationHelperDetail?.lroDetails;
|
|
110
|
+
if (lroDetail?.isLongRunning) {
|
|
111
|
+
lroCounts++;
|
|
112
|
+
if (!lroDetail.operationLroOverload) {
|
|
113
|
+
return false;
|
|
97
114
|
}
|
|
115
|
+
allowCounts++;
|
|
98
116
|
}
|
|
99
117
|
}
|
|
100
118
|
}
|
|
119
|
+
|
|
120
|
+
return Boolean(lroCounts > 0 && lroCounts === allowCounts);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Check if we have an operation-level overloading
|
|
125
|
+
* @param program
|
|
126
|
+
* @param operation The operation detail
|
|
127
|
+
* @param existingResponseTypes auxilary param for current response types
|
|
128
|
+
* @param existingResponses auxilary param for raw response data
|
|
129
|
+
* @returns
|
|
130
|
+
*/
|
|
131
|
+
export function getOperationLroOverload(
|
|
132
|
+
program: Program,
|
|
133
|
+
operation: HttpOperation,
|
|
134
|
+
existingResponseTypes?: ResponseTypes,
|
|
135
|
+
existingResponses?: ResponseMetadata[]
|
|
136
|
+
) {
|
|
137
|
+
const metadata = getLroMetadata(program, operation.operation);
|
|
138
|
+
if (!metadata) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
const hasSuccessReturn = existingResponses?.filter((r) =>
|
|
142
|
+
r.statusCode.startsWith("20")
|
|
143
|
+
);
|
|
144
|
+
if (existingResponseTypes?.success || hasSuccessReturn) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
101
147
|
return false;
|
|
102
148
|
}
|
|
103
149
|
|
|
104
|
-
|
|
105
|
-
|
|
150
|
+
/**
|
|
151
|
+
* Extract the operation LRO details
|
|
152
|
+
* @param program
|
|
153
|
+
* @param operation Operation detail
|
|
154
|
+
* @param responsesTypes Calculated response types
|
|
155
|
+
* @param operationGroupName Operation group name
|
|
156
|
+
* @returns
|
|
157
|
+
*/
|
|
158
|
+
export function extractOperationLroDetail(
|
|
159
|
+
program: Program,
|
|
160
|
+
operation: HttpOperation,
|
|
161
|
+
responsesTypes: ResponseTypes,
|
|
162
|
+
operationGroupName: string
|
|
163
|
+
): OperationLroDetail {
|
|
164
|
+
let logicalResponseTypes: ResponseTypes | undefined;
|
|
165
|
+
|
|
166
|
+
let precedence = OPERATION_LRO_LOW_PRIORITY;
|
|
167
|
+
const operationLroOverload = getOperationLroOverload(
|
|
168
|
+
program,
|
|
169
|
+
operation,
|
|
170
|
+
responsesTypes
|
|
171
|
+
);
|
|
172
|
+
if (operationLroOverload) {
|
|
173
|
+
logicalResponseTypes = {
|
|
174
|
+
error: responsesTypes.error,
|
|
175
|
+
success: [
|
|
176
|
+
getLroLogicalResponseName(operationGroupName, operation.operation.name)
|
|
177
|
+
]
|
|
178
|
+
};
|
|
179
|
+
const metadata = getLroMetadata(program, operation.operation);
|
|
180
|
+
precedence =
|
|
181
|
+
metadata?.finalStep &&
|
|
182
|
+
metadata?.finalStep.target &&
|
|
183
|
+
metadata.finalStep.kind === "pollingSuccessProperty" &&
|
|
184
|
+
metadata?.finalStep?.target?.name === "result"
|
|
185
|
+
? OPERATION_LRO_HIGH_PRIORITY
|
|
186
|
+
: OPERATION_LRO_LOW_PRIORITY;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
isLongRunning: Boolean(getLroMetadata(program, operation.operation)),
|
|
191
|
+
logicalResponseTypes,
|
|
192
|
+
operationLroOverload,
|
|
193
|
+
precedence
|
|
194
|
+
};
|
|
106
195
|
}
|
|
107
196
|
|
|
108
197
|
export function hasPollingOperations(
|