@azure-tools/rlc-common 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/.rush/temp/package-deps_build.json +45 -0
  2. package/.rush/temp/shrinkwrap-deps.json +72 -0
  3. package/CHANGELOG.md +3 -0
  4. package/dist/buildClient.js +198 -0
  5. package/dist/buildClient.js.map +1 -0
  6. package/dist/buildClientDefinitions.js +160 -0
  7. package/dist/buildClientDefinitions.js.map +1 -0
  8. package/dist/buildIndexFile.js +150 -0
  9. package/dist/buildIndexFile.js.map +1 -0
  10. package/dist/buildIsUnexpectedHelper.js +219 -0
  11. package/dist/buildIsUnexpectedHelper.js.map +1 -0
  12. package/dist/buildMethodShortcuts.js +50 -0
  13. package/dist/buildMethodShortcuts.js.map +1 -0
  14. package/dist/buildObjectTypes.js +250 -0
  15. package/dist/buildObjectTypes.js.map +1 -0
  16. package/dist/buildPaginateHelper.js +30 -0
  17. package/dist/buildPaginateHelper.js.map +1 -0
  18. package/dist/buildParameterTypes.js +287 -0
  19. package/dist/buildParameterTypes.js.map +1 -0
  20. package/dist/buildPollingHelper.js +21 -0
  21. package/dist/buildPollingHelper.js.map +1 -0
  22. package/dist/buildResponseTypes.js +122 -0
  23. package/dist/buildResponseTypes.js.map +1 -0
  24. package/dist/buildSchemaType.js +44 -0
  25. package/dist/buildSchemaType.js.map +1 -0
  26. package/dist/buildTopLevelIndexFile.js +45 -0
  27. package/dist/buildTopLevelIndexFile.js.map +1 -0
  28. package/dist/helpers/nameConstructors.js +41 -0
  29. package/dist/helpers/nameConstructors.js.map +1 -0
  30. package/dist/helpers/nameUtils.js +196 -0
  31. package/dist/helpers/nameUtils.js.map +1 -0
  32. package/dist/helpers/operationHelpers.js +83 -0
  33. package/dist/helpers/operationHelpers.js.map +1 -0
  34. package/dist/helpers/schemaHelpers.js +27 -0
  35. package/dist/helpers/schemaHelpers.js.map +1 -0
  36. package/dist/helpers/shortcutMethods.js +46 -0
  37. package/dist/helpers/shortcutMethods.js.map +1 -0
  38. package/dist/index.js +44 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/interfaces.js +18 -0
  41. package/dist/interfaces.js.map +1 -0
  42. package/dist/metadata/buildApiExtractorConfig.js +56 -0
  43. package/dist/metadata/buildApiExtractorConfig.js.map +1 -0
  44. package/dist/metadata/buildESLintConfig.js +33 -0
  45. package/dist/metadata/buildESLintConfig.js.map +1 -0
  46. package/dist/metadata/buildLicenseFile.js +41 -0
  47. package/dist/metadata/buildLicenseFile.js.map +1 -0
  48. package/dist/metadata/buildPackageFile.js +232 -0
  49. package/dist/metadata/buildPackageFile.js.map +1 -0
  50. package/dist/metadata/buildReadmeFile.js +170 -0
  51. package/dist/metadata/buildReadmeFile.js.map +1 -0
  52. package/dist/metadata/buildRollupConfig.js +144 -0
  53. package/dist/metadata/buildRollupConfig.js.map +1 -0
  54. package/dist/metadata/buildTsConfig.js +72 -0
  55. package/dist/metadata/buildTsConfig.js.map +1 -0
  56. package/dist/package.json +1 -0
  57. package/dist/static/paginateContent.js +214 -0
  58. package/dist/static/paginateContent.js.map +1 -0
  59. package/dist/static/pollingContent.js +78 -0
  60. package/dist/static/pollingContent.js.map +1 -0
  61. package/dist/test/buildEnvFile.js +31 -0
  62. package/dist/test/buildEnvFile.js.map +1 -0
  63. package/dist/test/buildKarmaConfig.js +19 -0
  64. package/dist/test/buildKarmaConfig.js.map +1 -0
  65. package/dist/test/buildRecordedClient.js +22 -0
  66. package/dist/test/buildRecordedClient.js.map +1 -0
  67. package/dist/test/buildSampleTest.js +19 -0
  68. package/dist/test/buildSampleTest.js.map +1 -0
  69. package/dist/test/template.js +192 -0
  70. package/dist/test/template.js.map +1 -0
  71. package/dist-esm/buildClient.js +191 -0
  72. package/dist-esm/buildClient.js.map +1 -0
  73. package/dist-esm/buildClientDefinitions.js +155 -0
  74. package/dist-esm/buildClientDefinitions.js.map +1 -0
  75. package/dist-esm/buildIndexFile.js +145 -0
  76. package/dist-esm/buildIndexFile.js.map +1 -0
  77. package/dist-esm/buildIsUnexpectedHelper.js +215 -0
  78. package/dist-esm/buildIsUnexpectedHelper.js.map +1 -0
  79. package/dist-esm/buildMethodShortcuts.js +46 -0
  80. package/dist-esm/buildMethodShortcuts.js.map +1 -0
  81. package/dist-esm/buildObjectTypes.js +249 -0
  82. package/dist-esm/buildObjectTypes.js.map +1 -0
  83. package/dist-esm/buildPaginateHelper.js +26 -0
  84. package/dist-esm/buildPaginateHelper.js.map +1 -0
  85. package/dist-esm/buildParameterTypes.js +288 -0
  86. package/dist-esm/buildParameterTypes.js.map +1 -0
  87. package/dist-esm/buildPollingHelper.js +17 -0
  88. package/dist-esm/buildPollingHelper.js.map +1 -0
  89. package/dist-esm/buildResponseTypes.js +127 -0
  90. package/dist-esm/buildResponseTypes.js.map +1 -0
  91. package/dist-esm/buildSchemaType.js +39 -0
  92. package/dist-esm/buildSchemaType.js.map +1 -0
  93. package/dist-esm/buildTopLevelIndexFile.js +41 -0
  94. package/dist-esm/buildTopLevelIndexFile.js.map +1 -0
  95. package/dist-esm/helpers/nameConstructors.js +34 -0
  96. package/dist-esm/helpers/nameConstructors.js.map +1 -0
  97. package/dist-esm/helpers/nameUtils.js +187 -0
  98. package/dist-esm/helpers/nameUtils.js.map +1 -0
  99. package/dist-esm/helpers/operationHelpers.js +72 -0
  100. package/dist-esm/helpers/operationHelpers.js.map +1 -0
  101. package/dist-esm/helpers/schemaHelpers.js +21 -0
  102. package/dist-esm/helpers/schemaHelpers.js.map +1 -0
  103. package/dist-esm/helpers/shortcutMethods.js +42 -0
  104. package/dist-esm/helpers/shortcutMethods.js.map +1 -0
  105. package/dist-esm/index.js +28 -0
  106. package/dist-esm/index.js.map +1 -0
  107. package/dist-esm/interfaces.js +15 -0
  108. package/dist-esm/interfaces.js.map +1 -0
  109. package/dist-esm/metadata/buildApiExtractorConfig.js +51 -0
  110. package/dist-esm/metadata/buildApiExtractorConfig.js.map +1 -0
  111. package/dist-esm/metadata/buildESLintConfig.js +28 -0
  112. package/dist-esm/metadata/buildESLintConfig.js.map +1 -0
  113. package/dist-esm/metadata/buildLicenseFile.js +36 -0
  114. package/dist-esm/metadata/buildLicenseFile.js.map +1 -0
  115. package/dist-esm/metadata/buildPackageFile.js +234 -0
  116. package/dist-esm/metadata/buildPackageFile.js.map +1 -0
  117. package/dist-esm/metadata/buildReadmeFile.js +167 -0
  118. package/dist-esm/metadata/buildReadmeFile.js.map +1 -0
  119. package/dist-esm/metadata/buildRollupConfig.js +139 -0
  120. package/dist-esm/metadata/buildRollupConfig.js.map +1 -0
  121. package/dist-esm/metadata/buildTsConfig.js +67 -0
  122. package/dist-esm/metadata/buildTsConfig.js.map +1 -0
  123. package/dist-esm/package.json +1 -0
  124. package/dist-esm/static/paginateContent.js +211 -0
  125. package/dist-esm/static/paginateContent.js.map +1 -0
  126. package/dist-esm/static/pollingContent.js +75 -0
  127. package/dist-esm/static/pollingContent.js.map +1 -0
  128. package/dist-esm/test/buildEnvFile.js +24 -0
  129. package/dist-esm/test/buildEnvFile.js.map +1 -0
  130. package/dist-esm/test/buildKarmaConfig.js +14 -0
  131. package/dist-esm/test/buildKarmaConfig.js.map +1 -0
  132. package/dist-esm/test/buildRecordedClient.js +17 -0
  133. package/dist-esm/test/buildRecordedClient.js.map +1 -0
  134. package/dist-esm/test/buildSampleTest.js +14 -0
  135. package/dist-esm/test/buildSampleTest.js.map +1 -0
  136. package/dist-esm/test/template.js +189 -0
  137. package/dist-esm/test/template.js.map +1 -0
  138. package/package.json +40 -0
  139. package/publishPackage.js +11 -0
  140. package/rlc-common.build.log +2 -0
  141. package/src/buildClient.ts +251 -0
  142. package/src/buildClientDefinitions.ts +231 -0
  143. package/src/buildIndexFile.ts +172 -0
  144. package/src/buildIsUnexpectedHelper.ts +240 -0
  145. package/src/buildMethodShortcuts.ts +75 -0
  146. package/src/buildObjectTypes.ts +393 -0
  147. package/src/buildPaginateHelper.ts +33 -0
  148. package/src/buildParameterTypes.ts +435 -0
  149. package/src/buildPollingHelper.ts +18 -0
  150. package/src/buildResponseTypes.ts +169 -0
  151. package/src/buildSchemaType.ts +56 -0
  152. package/src/buildTopLevelIndexFile.ts +46 -0
  153. package/src/helpers/nameConstructors.ts +93 -0
  154. package/src/helpers/nameUtils.ts +227 -0
  155. package/src/helpers/operationHelpers.ts +103 -0
  156. package/src/helpers/schemaHelpers.ts +25 -0
  157. package/src/helpers/shortcutMethods.ts +60 -0
  158. package/src/index.ts +28 -0
  159. package/src/interfaces.ts +212 -0
  160. package/src/metadata/buildApiExtractorConfig.ts +59 -0
  161. package/src/metadata/buildESLintConfig.ts +34 -0
  162. package/src/metadata/buildLicenseFile.ts +39 -0
  163. package/src/metadata/buildPackageFile.ts +271 -0
  164. package/src/metadata/buildReadmeFile.ts +231 -0
  165. package/src/metadata/buildRollupConfig.ts +147 -0
  166. package/src/metadata/buildTsConfig.ts +79 -0
  167. package/src/static/paginateContent.ts +210 -0
  168. package/src/static/pollingContent.ts +74 -0
  169. package/src/test/buildEnvFile.ts +26 -0
  170. package/src/test/buildKarmaConfig.ts +15 -0
  171. package/src/test/buildRecordedClient.ts +18 -0
  172. package/src/test/buildSampleTest.ts +15 -0
  173. package/src/test/template.ts +192 -0
  174. package/tsconfig-cjs.json +9 -0
  175. package/tsconfig-common.json +13 -0
  176. package/tsconfig.json +13 -0
  177. package/types/buildClient.d.ts +2 -0
  178. package/types/buildClientDefinitions.d.ts +5 -0
  179. package/types/buildIndexFile.d.ts +5 -0
  180. package/types/buildIsUnexpectedHelper.d.ts +5 -0
  181. package/types/buildMethodShortcuts.d.ts +4 -0
  182. package/types/buildObjectTypes.d.ts +14 -0
  183. package/types/buildPaginateHelper.d.ts +5 -0
  184. package/types/buildParameterTypes.d.ts +5 -0
  185. package/types/buildPollingHelper.d.ts +5 -0
  186. package/types/buildResponseTypes.d.ts +5 -0
  187. package/types/buildSchemaType.d.ts +19 -0
  188. package/types/buildTopLevelIndexFile.d.ts +5 -0
  189. package/types/helpers/nameConstructors.d.ts +28 -0
  190. package/types/helpers/nameUtils.d.ts +25 -0
  191. package/types/helpers/operationHelpers.d.ts +9 -0
  192. package/types/helpers/schemaHelpers.d.ts +4 -0
  193. package/types/helpers/shortcutMethods.d.ts +3 -0
  194. package/types/index.d.ts +25 -0
  195. package/types/interfaces.d.ts +186 -0
  196. package/types/metadata/buildApiExtractorConfig.d.ts +5 -0
  197. package/types/metadata/buildESLintConfig.d.ts +5 -0
  198. package/types/metadata/buildLicenseFile.d.ts +5 -0
  199. package/types/metadata/buildPackageFile.d.ts +5 -0
  200. package/types/metadata/buildReadmeFile.d.ts +5 -0
  201. package/types/metadata/buildRollupConfig.d.ts +5 -0
  202. package/types/metadata/buildTsConfig.d.ts +5 -0
  203. package/types/static/paginateContent.d.ts +1 -0
  204. package/types/static/pollingContent.d.ts +1 -0
  205. package/types/test/buildEnvFile.d.ts +9 -0
  206. package/types/test/buildKarmaConfig.d.ts +5 -0
  207. package/types/test/buildRecordedClient.d.ts +5 -0
  208. package/types/test/buildSampleTest.d.ts +5 -0
  209. package/types/test/template.d.ts +5 -0
@@ -0,0 +1,155 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { Project, StructureKind, Writers } from "ts-morph";
4
+ import * as path from "path";
5
+ import { buildMethodDefinitions, getPathParamDefinitions } from "./helpers/operationHelpers.js";
6
+ import { generateMethodShortcuts } from "./helpers/shortcutMethods.js";
7
+ import { REST_CLIENT_RESERVED } from './buildMethodShortcuts.js';
8
+ import { CasingConvention, NameType, normalizeName } from "./helpers/nameUtils.js";
9
+ import { pascalCase } from "./helpers/nameUtils.js";
10
+ export function buildClientDefinitions(model) {
11
+ const options = {
12
+ importedParameters: new Set(),
13
+ importedResponses: new Set(),
14
+ clientImports: new Set()
15
+ };
16
+ const project = new Project();
17
+ const srcPath = model.srcPath;
18
+ const filePath = path.join(srcPath, `clientDefinitions.ts`);
19
+ const clientDefinitionsFile = project.createSourceFile(filePath, undefined, {
20
+ overwrite: true
21
+ });
22
+ // Get all paths
23
+ const pathDictionary = model.paths;
24
+ let shortcuts = [];
25
+ // There may be operations without an operation group, those shortcut
26
+ // methods need to be handled differently.
27
+ let shortcutsInOperationGroup = [];
28
+ if (model.options?.includeShortcuts) {
29
+ shortcuts = generateMethodShortcuts(model.paths);
30
+ clientDefinitionsFile.addInterfaces(shortcuts);
31
+ shortcutsInOperationGroup = shortcuts
32
+ .filter((s) => s.name !== "ClientOperations")
33
+ .map((s) => getShortcutName(s.name));
34
+ }
35
+ clientDefinitionsFile.addInterface({
36
+ name: "Routes",
37
+ isExported: true,
38
+ callSignatures: getPathFirstRoutesInterfaceDefinition(pathDictionary, clientDefinitionsFile, options)
39
+ });
40
+ const clientName = model.libraryName;
41
+ const clientInterfaceName = clientName.endsWith("Client")
42
+ ? `${clientName}`
43
+ : `${clientName}Client`;
44
+ clientDefinitionsFile.addTypeAlias({
45
+ isExported: true,
46
+ name: clientInterfaceName,
47
+ type: Writers.intersectionType("Client", Writers.objectType({
48
+ properties: [
49
+ { name: "path", type: "Routes" },
50
+ ...shortcutsInOperationGroup
51
+ ]
52
+ }),
53
+ // If the length of shortcuts in operation group and all shortcutsInOperationGroup
54
+ // is the same, then we don't have any operations at the client level
55
+ // Otherwise we need to make the client interface name an union with the
56
+ // definition of all client level shortcut methods
57
+ ...(shortcutsInOperationGroup.length !== shortcuts.length
58
+ ? [`ClientOperations`]
59
+ : []))
60
+ });
61
+ if (options.importedParameters.size) {
62
+ clientDefinitionsFile.addImportDeclaration({
63
+ namedImports: [...options.importedParameters],
64
+ moduleSpecifier: "./parameters"
65
+ });
66
+ }
67
+ if (options.importedResponses.size) {
68
+ clientDefinitionsFile.addImportDeclaration({
69
+ namedImports: [...options.importedResponses],
70
+ moduleSpecifier: "./responses"
71
+ });
72
+ }
73
+ options.clientImports.add("Client");
74
+ options.clientImports.add("StreamableMethod");
75
+ clientDefinitionsFile.addImportDeclarations([
76
+ {
77
+ namedImports: [...options.clientImports],
78
+ moduleSpecifier: "@azure-rest/core-client"
79
+ }
80
+ ]);
81
+ return { path: filePath, content: clientDefinitionsFile.getFullText() };
82
+ }
83
+ function getPathFirstRoutesInterfaceDefinition(paths, sourcefile, options) {
84
+ const operationGroupCount = getOperationGroupCount(paths);
85
+ const signatures = [];
86
+ for (const key of Object.keys(paths)) {
87
+ for (const verb of Object.keys(paths[key].methods)) {
88
+ for (const method of paths[key].methods[verb]) {
89
+ options.importedParameters.add(method.optionsName);
90
+ method.returnType
91
+ .split(" | ")
92
+ .forEach((item) => options.importedResponses.add(item));
93
+ }
94
+ }
95
+ generatePathFirstRouteMethodsDefinition(paths[key], operationGroupCount, sourcefile);
96
+ const pathParams = paths[key].pathParameters;
97
+ signatures.push({
98
+ docs: [
99
+ `Resource for '${key
100
+ .replace(/}/g, "\\}")
101
+ .replace(/{/g, "\\{")}' has methods for the following verbs: ${Object.keys(paths[key].methods).join(", ")}`
102
+ ],
103
+ parameters: [
104
+ { name: "path", type: `"${key}"` },
105
+ ...getPathParamDefinitions(pathParams)
106
+ ],
107
+ returnType: getOperationReturnTypeName(paths[key], getOperationGroupCount(paths)),
108
+ kind: StructureKind.CallSignature
109
+ });
110
+ }
111
+ return signatures;
112
+ }
113
+ function getOperationGroupCount(paths) {
114
+ const operationGroups = Object.keys(paths)
115
+ .map((p) => paths[p].operationGroupName)
116
+ .filter((p) => p && p !== "Client");
117
+ const uniqueNames = new Set(operationGroups);
118
+ return uniqueNames.size;
119
+ }
120
+ function getOperationReturnTypeName({ operationGroupName, name }, operationGroupCount) {
121
+ if (operationGroupCount > 1 &&
122
+ operationGroupName &&
123
+ operationGroupName !== "Client") {
124
+ return `${pascalCase(operationGroupName)}${pascalCase(name)}`;
125
+ }
126
+ return pascalCase(name);
127
+ }
128
+ function generatePathFirstRouteMethodsDefinition(path, operationGroupCount, file) {
129
+ const methodDefinitions = buildMethodDefinitions(path.methods);
130
+ const interfaceDef = {
131
+ methods: methodDefinitions,
132
+ name: getOperationReturnTypeName(path, operationGroupCount),
133
+ isExported: true
134
+ };
135
+ file.addInterface(interfaceDef);
136
+ }
137
+ function getShortcutName(interfaceName) {
138
+ const endIndex = shouldKeepSuffix(interfaceName)
139
+ ? undefined
140
+ : interfaceName.length - "Operations".length;
141
+ const clientProperty = normalizeName(interfaceName.substring(0, endIndex), NameType.OperationGroup, true, REST_CLIENT_RESERVED, CasingConvention.Camel);
142
+ return {
143
+ name: clientProperty,
144
+ type: interfaceName
145
+ };
146
+ }
147
+ function shouldKeepSuffix(name) {
148
+ const reservedNames = [
149
+ "pipelineOperations",
150
+ "pathOperations",
151
+ "pathUncheckedOperations"
152
+ ];
153
+ return reservedNames.some((r) => r.toLowerCase() === name.toLowerCase());
154
+ }
155
+ //# sourceMappingURL=buildClientDefinitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildClientDefinitions.js","sourceRoot":"","sources":["../src/buildClientDefinitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { Project } from "ts-morph";
4
+ import { NameType, normalizeName } from "./helpers/nameUtils.js";
5
+ import { hasInputModels, hasOutputModels, hasPagingOperations, hasPollingOperations, hasUnexpectedHelper } from "./helpers/operationHelpers.js";
6
+ import * as path from "path";
7
+ export function buildIndexFile(model) {
8
+ const multiClient = Boolean(model.options?.multiClient), batch = model.options?.batch;
9
+ const project = new Project();
10
+ const { srcPath } = model;
11
+ const filePath = path.join(srcPath, `index.ts`);
12
+ const indexFile = project.createSourceFile(filePath, undefined, {
13
+ overwrite: true
14
+ });
15
+ if (!multiClient || !batch || batch?.length === 1) {
16
+ // if we are generate single client package for RLC
17
+ generateRLCIndex(indexFile, model);
18
+ }
19
+ else {
20
+ generateRLCIndexForMultiClient(indexFile, model);
21
+ }
22
+ return {
23
+ path: filePath,
24
+ content: indexFile.getFullText()
25
+ };
26
+ }
27
+ // to generate a index.ts for each single module inside the multi client RLC package
28
+ function generateRLCIndexForMultiClient(file, model) {
29
+ const clientName = model.libraryName;
30
+ const createClientFuncName = `createClient`;
31
+ const moduleName = normalizeName(clientName, NameType.File);
32
+ file.addImportDeclaration({
33
+ namespaceImport: "Parameters",
34
+ moduleSpecifier: "./parameters"
35
+ });
36
+ file.addImportDeclaration({
37
+ namespaceImport: "Responses",
38
+ moduleSpecifier: "./responses"
39
+ });
40
+ file.addImportDeclaration({
41
+ namespaceImport: "Client",
42
+ moduleSpecifier: "./clientDefinitions"
43
+ });
44
+ const exports = ["Parameters", "Responses", "Client"];
45
+ if (hasInputModels(model)) {
46
+ file.addImportDeclaration({
47
+ namespaceImport: "Models",
48
+ moduleSpecifier: "./models"
49
+ });
50
+ exports.push("Models");
51
+ }
52
+ if (hasOutputModels(model)) {
53
+ file.addImportDeclaration({
54
+ namespaceImport: "OutputModels",
55
+ moduleSpecifier: "./outputModels"
56
+ });
57
+ exports.push("OutputModels");
58
+ }
59
+ if (hasPagingOperations(model)) {
60
+ file.addImportDeclaration({
61
+ namespaceImport: "PaginateHelper",
62
+ moduleSpecifier: "./paginateHelper"
63
+ });
64
+ exports.push("PaginateHelper");
65
+ }
66
+ if (hasPollingOperations(model)) {
67
+ file.addImportDeclaration({
68
+ namespaceImport: "PollingHelper",
69
+ moduleSpecifier: "./pollingHelper"
70
+ });
71
+ exports.push("PollingHelper");
72
+ }
73
+ file.addExportDeclarations([
74
+ {
75
+ moduleSpecifier: `./${moduleName}`,
76
+ namedExports: [`${createClientFuncName}`]
77
+ },
78
+ {
79
+ namedExports: [...exports]
80
+ }
81
+ ]);
82
+ }
83
+ function generateRLCIndex(file, model) {
84
+ const clientName = model.libraryName;
85
+ const createClientFuncName = `${clientName}`;
86
+ const moduleName = normalizeName(clientName, NameType.File);
87
+ file.addImportDeclaration({
88
+ moduleSpecifier: `./${moduleName}`,
89
+ defaultImport: createClientFuncName
90
+ });
91
+ file.addExportDeclarations([
92
+ {
93
+ moduleSpecifier: `./${moduleName}`
94
+ },
95
+ {
96
+ moduleSpecifier: "./parameters"
97
+ },
98
+ {
99
+ moduleSpecifier: "./responses"
100
+ },
101
+ {
102
+ moduleSpecifier: "./clientDefinitions"
103
+ }
104
+ ]);
105
+ if (hasUnexpectedHelper(model)) {
106
+ file.addExportDeclarations([
107
+ {
108
+ moduleSpecifier: "./isUnexpected"
109
+ }
110
+ ]);
111
+ }
112
+ if (hasInputModels(model)) {
113
+ file.addExportDeclarations([
114
+ {
115
+ moduleSpecifier: "./models"
116
+ }
117
+ ]);
118
+ }
119
+ if (hasOutputModels(model)) {
120
+ file.addExportDeclarations([
121
+ {
122
+ moduleSpecifier: "./outputModels"
123
+ }
124
+ ]);
125
+ }
126
+ if (hasPagingOperations(model)) {
127
+ file.addExportDeclarations([
128
+ {
129
+ moduleSpecifier: "./paginateHelper"
130
+ }
131
+ ]);
132
+ }
133
+ if (hasPollingOperations(model)) {
134
+ file.addExportDeclarations([
135
+ {
136
+ moduleSpecifier: "./pollingHelper"
137
+ }
138
+ ]);
139
+ }
140
+ file.addExportAssignment({
141
+ expression: createClientFuncName,
142
+ isExportEquals: false
143
+ });
144
+ }
145
+ //# sourceMappingURL=buildIndexFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildIndexFile.js","sourceRoot":"","sources":["../src/buildIndexFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import * as path from "path";
4
+ import { Project, VariableDeclarationKind } from "ts-morph";
5
+ import { hasUnexpectedHelper } from "./helpers/operationHelpers.js";
6
+ export function buildIsUnexpectedHelper(model) {
7
+ if (!hasUnexpectedHelper(model)) {
8
+ return;
9
+ }
10
+ const project = new Project();
11
+ const srcPath = model.srcPath;
12
+ const filePath = path.join(srcPath, `isUnexpected.ts`);
13
+ const isErrorHelper = project.createSourceFile(filePath, undefined, {
14
+ overwrite: true
15
+ });
16
+ let map = {};
17
+ let allResponseTypes = new Set();
18
+ let allErrorTypes = new Set();
19
+ let overloads = [];
20
+ const pathDictionary = model.paths;
21
+ for (const [path, details] of Object.entries(pathDictionary)) {
22
+ for (const [methodName, methodDetails] of Object.entries(details.methods)) {
23
+ const originalMethod = methodName.toUpperCase();
24
+ const operation = `${originalMethod} ${path}`;
25
+ const success = methodDetails[0].successStatus;
26
+ map = { ...map, ...{ [operation]: success } };
27
+ // LROs may call the same path but with GET
28
+ // to get the operation status.
29
+ if (methodDetails[0].annotations?.isLongRunning &&
30
+ originalMethod !== "GET") {
31
+ const operation = `GET ${path}`;
32
+ const success = (pathDictionary[path].methods["get"] &&
33
+ pathDictionary[path].methods["get"][0]?.successStatus) ??
34
+ methodDetails[0].successStatus;
35
+ map = { ...map, ...{ [operation]: success } };
36
+ }
37
+ const successTypes = methodDetails[0].responseTypes.success;
38
+ const errorTypes = methodDetails[0].responseTypes.error;
39
+ if (!successTypes.length || !errorTypes.length || !errorTypes[0]) {
40
+ continue;
41
+ }
42
+ successTypes.forEach((t) => allResponseTypes.add(t));
43
+ errorTypes.forEach((t) => {
44
+ allResponseTypes.add(t);
45
+ allErrorTypes.add(t);
46
+ });
47
+ overloads.push({
48
+ isExported: true,
49
+ parameters: [
50
+ {
51
+ name: "response",
52
+ type: [...successTypes, ...errorTypes].join(" | ")
53
+ }
54
+ ],
55
+ returnType: `response is ${errorTypes[0]}`
56
+ });
57
+ }
58
+ }
59
+ isErrorHelper.addImportDeclaration({
60
+ namedImports: [...allResponseTypes],
61
+ moduleSpecifier: "./responses"
62
+ });
63
+ isErrorHelper.addVariableStatement({
64
+ declarations: [
65
+ {
66
+ name: "responseMap",
67
+ initializer: JSON.stringify(map),
68
+ type: "Record<string, string[]>"
69
+ }
70
+ ],
71
+ declarationKind: VariableDeclarationKind.Const
72
+ });
73
+ if (allErrorTypes.size) {
74
+ const hasTemplate = hasParametrizedPath(pathDictionary);
75
+ isErrorHelper.addFunction({
76
+ overloads,
77
+ isExported: true,
78
+ name: "isUnexpected",
79
+ parameters: [
80
+ {
81
+ name: "response",
82
+ type: [...allResponseTypes].join(" | ")
83
+ }
84
+ ],
85
+ returnType: `response is ${[...allErrorTypes].join(" | ")}`,
86
+ statements: [
87
+ `
88
+ const lroOriginal = response.headers["x-ms-original-url"];
89
+ const url = new URL(lroOriginal ?? response.request.url);
90
+ const method = response.request.method;
91
+ ${hasTemplate ? "let" : "const"} pathDetails = responseMap[\`\${method} \${url.pathname}\`];
92
+ if (!pathDetails) {`,
93
+ hasTemplate
94
+ ? "pathDetails = geParametrizedPathSuccess(method, url.pathname);"
95
+ : `return true;`,
96
+ ` }
97
+ return !pathDetails.includes(response.status);
98
+ `
99
+ ]
100
+ });
101
+ if (hasTemplate) {
102
+ isErrorHelper.addFunction({
103
+ isExported: false,
104
+ name: "geParametrizedPathSuccess",
105
+ parameters: [
106
+ {
107
+ name: "method",
108
+ type: "string"
109
+ },
110
+ {
111
+ name: "path",
112
+ type: "string"
113
+ }
114
+ ],
115
+ returnType: `string[]`,
116
+ statements: [
117
+ `
118
+ const pathParts = path.split("/");
119
+
120
+ // Iterate the responseMap to find a match
121
+ for (const [key, value] of Object.entries(responseMap)) {
122
+ // Extracting the path from the map key which is in format
123
+ // GET /path/foo
124
+ if (!key.startsWith(method)) {
125
+ continue;
126
+ }
127
+ const candidatePath = getPathFromMapKey(key);
128
+ // Get each part of the url path
129
+ const candidateParts = candidatePath.split("/");
130
+
131
+ // If the candidate and actual paths don't match in size
132
+ // we move on to the next candidate path
133
+ if (
134
+ candidateParts.length === pathParts.length &&
135
+ hasParametrizedPath(key)
136
+ ) {
137
+ // track if we have found a match to return the values found.
138
+ let found = true;
139
+ for (let i = 0; i < candidateParts.length; i++) {
140
+ if (
141
+ candidateParts[i]?.startsWith("{") &&
142
+ candidateParts[i]?.endsWith("}")
143
+ ) {
144
+ // If the current part of the candidate is a "template" part
145
+ // it is a match with the actual path part on hand
146
+ // skip as the parameterized part can match anything
147
+ continue;
148
+ }
149
+
150
+ // If the candidate part is not a template and
151
+ // the parts don't match mark the candidate as not found
152
+ // to move on with the next candidate path.
153
+ if (candidateParts[i] !== pathParts[i]) {
154
+ found = false;
155
+ break;
156
+ }
157
+ }
158
+
159
+ // We finished evaluating the current candidate parts
160
+ // if all parts matched we return the success values form
161
+ // the path mapping.
162
+ if (found) {
163
+ return value;
164
+ }
165
+ }
166
+ }
167
+
168
+ // No match was found, return an empty array.
169
+ return [];
170
+ `
171
+ ]
172
+ });
173
+ isErrorHelper.addFunction({
174
+ isExported: false,
175
+ name: "hasParametrizedPath",
176
+ parameters: [
177
+ {
178
+ name: "path",
179
+ type: "string"
180
+ }
181
+ ],
182
+ returnType: `boolean`,
183
+ statements: [`return path.includes("/{");`]
184
+ });
185
+ isErrorHelper.addFunction({
186
+ isExported: false,
187
+ name: "getPathFromMapKey",
188
+ parameters: [
189
+ {
190
+ name: "mapKey",
191
+ type: "string"
192
+ }
193
+ ],
194
+ returnType: `string`,
195
+ statements: [
196
+ `const pathStart = mapKey.indexOf("/");
197
+ return mapKey.slice(pathStart);`
198
+ ]
199
+ });
200
+ }
201
+ }
202
+ return {
203
+ path: filePath,
204
+ content: isErrorHelper.getFullText()
205
+ };
206
+ }
207
+ function hasParametrizedPath(pathDictionary) {
208
+ for (const [path] of Object.entries(pathDictionary)) {
209
+ if (path.includes("/{") && path.includes("}")) {
210
+ return true;
211
+ }
212
+ }
213
+ return false;
214
+ }
215
+ //# sourceMappingURL=buildIsUnexpectedHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildIsUnexpectedHelper.js","sourceRoot":"","sources":["../src/buildIsUnexpectedHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { CasingConvention, NameType, normalizeName } from "./helpers/nameUtils.js";
4
+ export const REST_CLIENT_RESERVED = [
5
+ { name: "path", reservedFor: [NameType.Property, NameType.OperationGroup] },
6
+ {
7
+ name: "pathUnchecked",
8
+ reservedFor: [NameType.Property, NameType.OperationGroup]
9
+ },
10
+ {
11
+ name: "pipeline",
12
+ reservedFor: [NameType.Property, NameType.OperationGroup]
13
+ }
14
+ ];
15
+ export function buildMethodShortcutImplementation(paths) {
16
+ let keys = {};
17
+ for (const path of Object.keys(paths)) {
18
+ const groupName = normalizeName(paths[path].operationGroupName, NameType.OperationGroup, true, REST_CLIENT_RESERVED, CasingConvention.Camel);
19
+ if (keys[groupName]) {
20
+ keys[groupName].push(...buildOperationDeclarations(path, paths[path]));
21
+ }
22
+ else {
23
+ keys[groupName] = buildOperationDeclarations(path, paths[path]);
24
+ }
25
+ }
26
+ return keys;
27
+ }
28
+ function buildOperationDeclarations(path, pathMetadata) {
29
+ let ops = [];
30
+ for (const method of Object.keys(pathMetadata.methods)) {
31
+ for (const op of pathMetadata.methods[method]) {
32
+ const pathParams = pathMetadata?.pathParameters;
33
+ const name = normalizeName(op.operationName, NameType.Property);
34
+ const methodDefinitions = generateOperationDeclaration(path, name, method, pathParams);
35
+ ops = [...ops, methodDefinitions];
36
+ }
37
+ }
38
+ return ops;
39
+ }
40
+ function generateOperationDeclaration(path, operationName, method, pathParams = []) {
41
+ const pathParamNames = `${pathParams.length > 0 ? `${pathParams.map((p) => p.name)},` : ""}`;
42
+ return `"${operationName}": (${pathParamNames} options) => {
43
+ return client.path("${path}", ${pathParamNames}).${method}(options);
44
+ }`;
45
+ }
46
+ //# sourceMappingURL=buildMethodShortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildMethodShortcuts.js","sourceRoot":"","sources":["../src/buildMethodShortcuts.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;IAC3E;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC;KAC1D;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC;KAC1D;CACF,CAAC;AAEF,MAAM,UAAU,iCAAiC,CAAC,KAAY;IAC5D,IAAI,IAAI,GAA6B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACrC,MAAM,SAAS,GAAG,aAAa,CAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAC9B,QAAQ,CAAC,cAAc,EACvB,IAAI,EACJ,oBAAoB,EACpB,gBAAgB,CAAC,KAAK,CACvB,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxE;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,GAAG,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY,EAAE,YAA0B;IAC1E,IAAI,GAAG,GAAa,EAAE,CAAC;IACvB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;QACtD,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7C,MAAM,UAAU,GAAG,YAAY,EAAE,cAAc,CAAC;YAChD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,iBAAiB,GAAG,4BAA4B,CACpD,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAU,CACX,CAAC;YACF,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,iBAAiB,CAAC,CAAC;SACnC;KACF;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,4BAA4B,CACnC,IAAY,EACZ,aAAqB,EACrB,MAAc,EACd,aAA8B,EAAE;IAEhC,MAAM,cAAc,GAAG,GACrB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAChE,EAAE,CAAC;IACH,OAAO,IAAI,aAAa,OAAO,cAAc;4BACnB,IAAI,MAAM,cAAc,KAAK,MAAM;MACzD,CAAC;AACP,CAAC"}