@azure-tools/typespec-ts 0.28.0 → 0.29.0-alpha.20240531.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 (94) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/src/index.d.ts +2 -0
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +24 -18
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/lib.d.ts +14 -4
  7. package/dist/src/lib.d.ts.map +1 -1
  8. package/dist/src/lib.js +9 -2
  9. package/dist/src/lib.js.map +1 -1
  10. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  11. package/dist/src/modular/buildClassicalClient.js +2 -0
  12. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  13. package/dist/src/modular/buildClassicalOperationGroups.d.ts.map +1 -1
  14. package/dist/src/modular/buildClassicalOperationGroups.js +3 -0
  15. package/dist/src/modular/buildClassicalOperationGroups.js.map +1 -1
  16. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  17. package/dist/src/modular/buildCodeModel.js +80 -83
  18. package/dist/src/modular/buildCodeModel.js.map +1 -1
  19. package/dist/src/modular/buildLroFiles.d.ts +24 -0
  20. package/dist/src/modular/buildLroFiles.d.ts.map +1 -0
  21. package/dist/src/modular/buildLroFiles.js +399 -0
  22. package/dist/src/modular/buildLroFiles.js.map +1 -0
  23. package/dist/src/modular/buildOperations.d.ts +6 -0
  24. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  25. package/dist/src/modular/buildOperations.js +64 -5
  26. package/dist/src/modular/buildOperations.js.map +1 -1
  27. package/dist/src/modular/buildPagingFiles.js +3 -3
  28. package/dist/src/modular/buildPagingFiles.js.map +1 -1
  29. package/dist/src/modular/buildProjectFiles.d.ts +0 -3
  30. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
  31. package/dist/src/modular/buildProjectFiles.js +0 -399
  32. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  33. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  34. package/dist/src/modular/buildRootIndex.js +20 -0
  35. package/dist/src/modular/buildRootIndex.js.map +1 -1
  36. package/dist/src/modular/buildSubpathIndex.js +4 -3
  37. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  38. package/dist/src/modular/emitModels.d.ts +2 -0
  39. package/dist/src/modular/emitModels.d.ts.map +1 -1
  40. package/dist/src/modular/emitModels.js +73 -11
  41. package/dist/src/modular/emitModels.js.map +1 -1
  42. package/dist/src/modular/helpers/operationHelpers.d.ts +5 -5
  43. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  44. package/dist/src/modular/helpers/operationHelpers.js +171 -55
  45. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  46. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  47. package/dist/src/modular/helpers/typeHelpers.js +6 -1
  48. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  49. package/dist/src/modular/interfaces.d.ts +5 -0
  50. package/dist/src/modular/interfaces.d.ts.map +1 -1
  51. package/dist/src/modular/modularCodeModel.d.ts +9 -1
  52. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  53. package/dist/src/transform/transformHelperFunctionDetails.js +1 -1
  54. package/dist/src/transform/transformParameters.js +2 -2
  55. package/dist/src/transform/transformParameters.js.map +1 -1
  56. package/dist/src/transform/transformPaths.js +1 -1
  57. package/dist/src/transform/transformPaths.js.map +1 -1
  58. package/dist/src/transform/transformResponses.js +2 -2
  59. package/dist/src/transform/transformResponses.js.map +1 -1
  60. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  61. package/dist/src/transform/transformSchemas.js +23 -31
  62. package/dist/src/transform/transformSchemas.js.map +1 -1
  63. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  64. package/dist/src/transform/transfromRLCOptions.js +8 -1
  65. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  66. package/dist/src/utils/modelUtils.d.ts +12 -2
  67. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  68. package/dist/src/utils/modelUtils.js +88 -49
  69. package/dist/src/utils/modelUtils.js.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +19 -18
  72. package/src/index.ts +36 -22
  73. package/src/lib.ts +10 -2
  74. package/src/modular/buildClassicalClient.ts +2 -0
  75. package/src/modular/buildClassicalOperationGroups.ts +4 -0
  76. package/src/modular/buildCodeModel.ts +100 -155
  77. package/src/modular/buildLroFiles.ts +433 -0
  78. package/src/modular/buildOperations.ts +91 -10
  79. package/src/modular/buildPagingFiles.ts +4 -4
  80. package/src/modular/buildProjectFiles.ts +0 -471
  81. package/src/modular/buildRootIndex.ts +49 -0
  82. package/src/modular/buildSubpathIndex.ts +4 -4
  83. package/src/modular/emitModels.ts +102 -15
  84. package/src/modular/helpers/operationHelpers.ts +207 -72
  85. package/src/modular/helpers/typeHelpers.ts +6 -2
  86. package/src/modular/interfaces.ts +6 -0
  87. package/src/modular/modularCodeModel.ts +10 -1
  88. package/src/transform/transformHelperFunctionDetails.ts +1 -1
  89. package/src/transform/transformParameters.ts +2 -2
  90. package/src/transform/transformPaths.ts +1 -1
  91. package/src/transform/transformResponses.ts +2 -2
  92. package/src/transform/transformSchemas.ts +22 -33
  93. package/src/transform/transfromRLCOptions.ts +10 -1
  94. package/src/utils/modelUtils.ts +107 -46
@@ -1,31 +1,7 @@
1
- import { Project } from "ts-morph";
2
1
  import { ModularCodeModel } from "./modularCodeModel.js";
3
2
  import { NameType, normalizeName } from "@azure-tools/rlc-common";
4
- import {
5
- hasLROOperation,
6
- hasPagingOperation
7
- } from "./helpers/operationHelpers.js";
8
3
  import { getClassicalLayerPrefix } from "./helpers/namingHelpers.js";
9
4
 
10
- // =========== utils =============
11
- function appendPathWhenFormat(
12
- generateTest?: boolean,
13
- generateSample?: boolean
14
- ) {
15
- let path = "";
16
- if (generateTest) {
17
- path = path + ` "test/**/*.ts"`;
18
- }
19
- if (generateSample) {
20
- path = path + ` "samples-dev/**/*.ts"`;
21
- }
22
- return path;
23
- }
24
-
25
- function appendPathWhenLint(generateTest?: boolean) {
26
- return generateTest ? "test" : "";
27
- }
28
-
29
5
  function buildExportsForMultiClient(
30
6
  codeModel: ModularCodeModel,
31
7
  packageInfo: any
@@ -82,450 +58,3 @@ export function getModuleExports(codeModel: ModularCodeModel) {
82
58
 
83
59
  return buildExportsForMultiClient(codeModel, exports);
84
60
  }
85
-
86
- // Prepare package info without scripts and devDependencies and dependencies ect
87
- function initPackageInfo(codeModel: ModularCodeModel) {
88
- const { packageDetails, generateTest, flavor } = codeModel.options;
89
- const description = packageDetails!.description
90
- ? packageDetails!.description
91
- : `A generated SDK for ${codeModel.clients[0]?.name}.`;
92
- const packageInfo = {
93
- name: `${packageDetails!.name}`,
94
- "sdk-type": "client",
95
- ...(flavor === "azure"
96
- ? {
97
- author: "Microsoft Corporation"
98
- }
99
- : {}),
100
- version: `${packageDetails!.version}`,
101
- description,
102
- keywords: [
103
- "node",
104
- ...(flavor === "azure" ? ["azure", "cloud"] : []),
105
- "typescript",
106
- "browser",
107
- "isomorphic"
108
- ],
109
- license: "MIT",
110
- type: "module",
111
- main: "dist/index.js",
112
- module: "./dist-esm/src/index.js",
113
- types: `./types/${packageDetails!.nameWithoutScope}.d.ts`,
114
- exports: {
115
- ".": {
116
- types: "./types/src/index.d.ts",
117
- require: "./dist/index.cjs",
118
- import: "./dist-esm/src/index.js"
119
- },
120
- "./api": {
121
- types: "./types/src/api/index.d.ts",
122
- import: "./dist-esm/src/api/index.js"
123
- },
124
- "./models": {
125
- types: "./types/src/models/index.d.ts",
126
- import: "./dist-esm/src/models/index.js"
127
- }
128
- },
129
- ...(flavor === "azure"
130
- ? {
131
- repository: "github:Azure/azure-sdk-for-js",
132
- bugs: {
133
- url: "https://github.com/Azure/azure-sdk-for-js/issues"
134
- }
135
- }
136
- : {}),
137
- files: [
138
- "dist/",
139
- generateTest && flavor === "azure" ? "dist-esm/src/" : "dist-esm/",
140
- `types/${packageDetails!.nameWithoutScope}.d.ts`,
141
- "README.md",
142
- "LICENSE",
143
- "review/*"
144
- ],
145
- engines: {
146
- node: ">=18.0.0"
147
- }
148
- } as any;
149
- return packageInfo;
150
- }
151
-
152
- // =========== emit package.json =============
153
- export function emitPackage(
154
- project: Project,
155
- metadataDir: string,
156
- codeModel: ModularCodeModel
157
- ) {
158
- const packageJsonFile = project.createSourceFile(
159
- `${metadataDir}/package.json`,
160
- "",
161
- {
162
- overwrite: true
163
- }
164
- );
165
- const packageInfo =
166
- codeModel.options?.flavor === "azure"
167
- ? emitBrandedPackage(codeModel)
168
- : emitNonBrandedPackage(codeModel);
169
- packageJsonFile.addStatements(JSON.stringify(packageInfo));
170
- return packageJsonFile;
171
- }
172
-
173
- function emitNonBrandedPackage(codeModel: ModularCodeModel) {
174
- const runtimeLibVersion =
175
- codeModel.runtimeImports?.commonFallback?.version ??
176
- "1.0.0-alpha.20240314.2";
177
- const packageInfo = {
178
- ...initPackageInfo(codeModel),
179
- scripts: {
180
- "check-format":
181
- 'prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ',
182
- clean:
183
- "rimraf --glob dist dist-browser dist-esm test-dist temp types *.tgz *.log",
184
- "extract-api":
185
- "rimraf review && mkdirp ./review && api-extractor run --local",
186
- format:
187
- 'prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ',
188
- "lint:fix": "echo skipped",
189
- lint: "echo skipped",
190
- pack: "npm pack 2>&1",
191
- test: 'echo "Error: no test specified" && exit 1',
192
- build:
193
- "npm run clean && tsc && rollup -c 2>&1 && npm run minify && mkdirp ./review && npm run extract-api",
194
- minify:
195
- "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js"
196
- },
197
- sideEffects: false,
198
- autoPublish: false,
199
- dependencies: {
200
- tslib: "^2.2.0",
201
- "@typespec/ts-http-runtime": runtimeLibVersion
202
- },
203
- devDependencies: {
204
- "@microsoft/api-extractor": "^7.31.1",
205
- "@types/node": "^18.0.0",
206
- mkdirp: "^3.0.1",
207
- prettier: "^3.1.0",
208
- rimraf: "^5.0.0",
209
- "source-map-support": "^0.5.9",
210
- typescript: "~5.4.5",
211
- "@rollup/plugin-commonjs": "^24.0.0",
212
- "@rollup/plugin-json": "^6.0.0",
213
- "@rollup/plugin-multi-entry": "^6.0.0",
214
- "@rollup/plugin-node-resolve": "^13.1.3",
215
- rollup: "^2.66.1",
216
- "rollup-plugin-sourcemaps": "^0.6.3",
217
- "uglify-js": "^3.4.9"
218
- }
219
- } as any;
220
- buildExportsForMultiClient(codeModel, packageInfo);
221
- return packageInfo;
222
- }
223
-
224
- function emitBrandedPackage(codeModel: ModularCodeModel) {
225
- const hasLRO = hasLROOperation(codeModel, true),
226
- hasPaging = hasPagingOperation(codeModel, true);
227
- const {
228
- azureOutputDirectory,
229
- azureSdkForJs,
230
- sourceFrom,
231
- isModularLibrary,
232
- generateTest,
233
- generateSample,
234
- packageDetails
235
- } = codeModel.options;
236
- const clientPackageName = packageDetails!.name;
237
- let apiRefUrlQueryParameter: string = "";
238
- if (packageDetails!.version!.includes("beta")) {
239
- apiRefUrlQueryParameter = "?view=azure-node-preview";
240
- }
241
- const packageInfo = {
242
- ...initPackageInfo(codeModel),
243
- scripts: {
244
- "build:browser": "echo skipped.",
245
- "build:node": "echo skipped.",
246
- "build:samples": "echo skipped.",
247
- "build:test": "echo skipped.",
248
- "build:debug": "echo skipped.",
249
- "check-format": `prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ${appendPathWhenFormat(
250
- generateTest,
251
- generateSample
252
- )}`,
253
- clean:
254
- "rimraf --glob dist dist-browser dist-esm test-dist temp types *.tgz *.log",
255
- "execute:samples": "echo skipped",
256
- "extract-api":
257
- "rimraf review && mkdirp ./review && api-extractor run --local",
258
- format: `prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ${appendPathWhenFormat(
259
- generateTest,
260
- generateSample
261
- )}`,
262
- "generate:client":
263
- sourceFrom === "Swagger"
264
- ? "autorest --typescript swagger/README.md && npm run format"
265
- : "echo skipped",
266
- "integration-test:browser": "echo skipped",
267
- "integration-test:node": "echo skipped",
268
- "integration-test": "echo skipped",
269
- "lint:fix": `eslint package.json api-extractor.json src ${appendPathWhenLint(
270
- generateTest
271
- )} --ext .ts --fix --fix-type [problem,suggestion]`,
272
- lint: `eslint package.json api-extractor.json src ${appendPathWhenLint(
273
- generateTest
274
- )} --ext .ts`,
275
- pack: "npm pack 2>&1",
276
- "test:browser": "echo skipped",
277
- "test:node": "echo skipped",
278
- test: 'echo "Error: no test specified" && exit 1',
279
- "unit-test": "echo skipped",
280
- "unit-test:node": "echo skipped",
281
- "unit-test:browser": "echo skipped"
282
- },
283
- sideEffects: false,
284
- autoPublish: false,
285
- dependencies: {
286
- "@azure/core-auth": "^1.6.0",
287
- "@azure-rest/core-client": "^1.4.0",
288
- "@azure/core-rest-pipeline": "^1.14.0",
289
- "@azure/logger": "^1.0.0",
290
- tslib: "^2.2.0",
291
- ...(hasPaging && {
292
- "@azure/core-paging": "^1.5.0"
293
- }),
294
- ...(hasLRO && {
295
- "@azure/core-lro": "^2.5.4",
296
- "@azure/abort-controller": "^1.0.0"
297
- }),
298
- ...(isModularLibrary && {
299
- "@azure/core-util": "^1.4.0"
300
- })
301
- },
302
- devDependencies: {
303
- "@microsoft/api-extractor": "^7.31.1",
304
- autorest: "latest",
305
- "@types/node": "^18.0.0",
306
- dotenv: "^16.0.0",
307
- eslint: "^8.0.0",
308
- mkdirp: "^3.0.1",
309
- prettier: "^3.1.0",
310
- rimraf: "^5.0.0",
311
- "source-map-support": "^0.5.9",
312
- typescript: "~5.4.5"
313
- }
314
- } as any;
315
-
316
- if (azureOutputDirectory) {
317
- packageInfo["homepage"] =
318
- `https://github.com/Azure/azure-sdk-for-js/tree/main/${azureOutputDirectory}/README.md`;
319
- }
320
-
321
- if (azureSdkForJs) {
322
- packageInfo["//metadata"] = {
323
- constantPaths: []
324
- };
325
- // TODO: remember to put the userAgent path into metadata
326
- // Only generate this from Swagger spec
327
- if (sourceFrom === "Swagger") {
328
- packageInfo["//metadata"].constantPaths.push({
329
- path: "swagger/README.md",
330
- prefix: "package-version"
331
- });
332
- }
333
- packageInfo.scripts["build"] =
334
- "npm run clean && tsc -p . && dev-tool run bundle && mkdirp ./review && dev-tool run extract-api";
335
- packageInfo.scripts["build:debug"] =
336
- "tsc -p . && dev-tool run bundle && dev-tool run extract-api";
337
- packageInfo.scripts["build:browser"] = "tsc -p . && dev-tool run bundle";
338
- packageInfo.scripts["build:node"] = "tsc -p . && dev-tool run bundle";
339
- packageInfo.scripts["extract-api"] = "dev-tool run extract-api";
340
- packageInfo.devDependencies["@azure/dev-tool"] = "^1.0.0";
341
- packageInfo.devDependencies["@azure/eslint-plugin-azure-sdk"] = "^3.0.0";
342
- // azsdkjs repo use dev-tool to run vendored prettier
343
- const dtxPrettierCmd = "dev-tool run vendored ";
344
- packageInfo.scripts["check-format"] =
345
- dtxPrettierCmd + packageInfo.scripts["check-format"];
346
- packageInfo.scripts["format"] =
347
- dtxPrettierCmd + packageInfo.scripts["format"];
348
- delete packageInfo.devDependencies.prettier;
349
- } else {
350
- packageInfo.scripts["build"] =
351
- "npm run clean && tsc && rollup -c 2>&1 && npm run minify && mkdirp ./review && npm run extract-api";
352
- packageInfo.scripts["minify"] =
353
- `uglifyjs -c -m --comments --source-map "content='./dist/index.js.map'" -o ./dist/index.min.js ./dist/index.js`;
354
- packageInfo.devDependencies["@rollup/plugin-commonjs"] = "^24.0.0";
355
- packageInfo.devDependencies["@rollup/plugin-json"] = "^6.0.0";
356
- packageInfo.devDependencies["@rollup/plugin-multi-entry"] = "^6.0.0";
357
- packageInfo.devDependencies["@rollup/plugin-node-resolve"] = "^13.1.3";
358
- packageInfo.devDependencies["rollup"] = "^2.66.1";
359
- packageInfo.devDependencies["rollup-plugin-sourcemaps"] = "^0.6.3";
360
- packageInfo.devDependencies["uglify-js"] = "^3.4.9";
361
- }
362
-
363
- if (generateTest) {
364
- packageInfo.module = `./dist-esm/src/index.js`;
365
- packageInfo.devDependencies["@azure-tools/test-credential"] = "^1.0.0";
366
- packageInfo.devDependencies["@azure/identity"] = "^4.0.1";
367
- packageInfo.devDependencies["@azure-tools/test-recorder"] = "^3.0.0";
368
- packageInfo.devDependencies["mocha"] = "^10.0.0";
369
- packageInfo.devDependencies["@types/mocha"] = "^10.0.0";
370
- packageInfo.devDependencies["cross-env"] = "^7.0.2";
371
- packageInfo.devDependencies["@types/chai"] = "^4.2.8";
372
- packageInfo.devDependencies["chai"] = "^4.2.0";
373
- packageInfo.devDependencies["cross-env"] = "^7.0.2";
374
- packageInfo.devDependencies["karma-chrome-launcher"] = "^3.0.0";
375
- packageInfo.devDependencies["karma-coverage"] = "^2.0.0";
376
- packageInfo.devDependencies["karma-env-preprocessor"] = "^0.1.1";
377
- packageInfo.devDependencies["karma-firefox-launcher"] = "^2.1.2";
378
- packageInfo.devDependencies["karma-junit-reporter"] = "^2.0.1";
379
- packageInfo.devDependencies["karma-mocha-reporter"] = "^2.2.5";
380
- packageInfo.devDependencies["karma-mocha"] = "^2.0.1";
381
- packageInfo.devDependencies["karma-source-map-support"] = "~1.4.0";
382
- packageInfo.devDependencies["karma-sourcemap-loader"] = "^0.4.0";
383
- packageInfo.devDependencies["karma"] = "^6.2.0";
384
- packageInfo.devDependencies["nyc"] = "^15.1.0";
385
- packageInfo.devDependencies["source-map-support"] = "^0.5.9";
386
- packageInfo.devDependencies["ts-node"] = "^10.0.0";
387
- packageInfo.scripts["test"] =
388
- "npm run clean && npm run build:test && npm run unit-test";
389
- packageInfo.scripts["test:node"] =
390
- "npm run clean && npm run build:test && npm run unit-test:node";
391
- packageInfo.scripts["test:browser"] =
392
- "npm run clean && npm run build:test && npm run unit-test:browser";
393
- packageInfo.scripts["build:browser"] =
394
- "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1";
395
- packageInfo.scripts["build:node"] =
396
- "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1";
397
- packageInfo.scripts["build:test"] = "tsc -p . && rollup -c 2>&1";
398
- packageInfo.scripts["unit-test"] =
399
- "npm run unit-test:node && npm run unit-test:browser";
400
- packageInfo.scripts["unit-test:node"] =
401
- 'mocha --full-trace "test/{,!(browser)/**/}*.spec.ts"';
402
- packageInfo.scripts["unit-test:browser"] = "karma start --single-run";
403
- packageInfo.scripts["integration-test:browser"] =
404
- "karma start --single-run";
405
- packageInfo.scripts["integration-test:node"] =
406
- 'nyc mocha --require source-map-support/register.js --timeout 5000000 --full-trace "dist-esm/test/{,!(browser)/**/}*.spec.js"';
407
- packageInfo.scripts["integration-test"] =
408
- "npm run integration-test:node && npm run integration-test:browser";
409
- if (azureSdkForJs) {
410
- packageInfo.scripts["build:test"] = "tsc -p . && dev-tool run bundle";
411
- packageInfo.scripts["integration-test:browser"] =
412
- "dev-tool run test:browser";
413
- packageInfo.scripts["unit-test:browser"] = "dev-tool run test:browser";
414
- packageInfo.scripts["unit-test:node"] =
415
- "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'";
416
- packageInfo.scripts["integration-test:node"] =
417
- "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'";
418
- }
419
-
420
- packageInfo["browser"] = {
421
- "./dist-esm/test/public/utils/env.js":
422
- "./dist-esm/test/public/utils/env.browser.js"
423
- };
424
-
425
- packageInfo["mocha"] = {
426
- extension: ["ts"],
427
- timeout: "1200000",
428
- loader: "ts-node/esm"
429
- };
430
- }
431
-
432
- if (generateSample) {
433
- packageInfo["//sampleConfiguration"] = {
434
- productName:
435
- codeModel.options.serviceInfo?.title ?? codeModel.clients[0]?.name,
436
- productSlugs: ["azure"],
437
- disableDocsMs: true,
438
- apiRefLink: `https://docs.microsoft.com/javascript/api/${clientPackageName}${apiRefUrlQueryParameter}`
439
- };
440
- if (azureSdkForJs) {
441
- packageInfo.scripts["execute:samples"] =
442
- "dev-tool samples run samples-dev";
443
- }
444
- }
445
-
446
- buildExportsForMultiClient(codeModel, packageInfo);
447
- return packageInfo;
448
- }
449
-
450
- // =========== emit tsconfig.json =============
451
- const modularTsConfigInSDKRepo: Record<string, any> = {
452
- extends: "../../../tsconfig.package",
453
- compilerOptions: {
454
- outDir: "./dist-esm",
455
- declarationDir: "./types",
456
- module: "NodeNext",
457
- moduleResolution: "NodeNext",
458
- lib: ["esnext", "dom"],
459
- rootDir: "."
460
- },
461
- "ts-node": { esm: true },
462
- include: ["src/**/*.ts"]
463
- };
464
-
465
- const modularTsConfigNotInSDKRepo: Record<string, any> = {
466
- compilerOptions: {
467
- target: "ES2017",
468
- module: "NodeNext",
469
- lib: ["esnext", "dom"],
470
- declaration: true,
471
- declarationMap: true,
472
- inlineSources: true,
473
- sourceMap: true,
474
- importHelpers: true,
475
- strict: true,
476
- alwaysStrict: true,
477
- noUnusedLocals: true,
478
- noUnusedParameters: true,
479
- noImplicitReturns: true,
480
- noFallthroughCasesInSwitch: true,
481
- forceConsistentCasingInFileNames: true,
482
- moduleResolution: "NodeNext",
483
- allowSyntheticDefaultImports: true,
484
- esModuleInterop: true,
485
- outDir: "./dist-esm",
486
- declarationDir: "./types",
487
- rootDir: "."
488
- },
489
- "ts-node": { esm: true },
490
- include: ["./src/**/*.ts"]
491
- };
492
-
493
- export function emitTsConfig(
494
- project: Project,
495
- srcPath: string,
496
- codeModel: ModularCodeModel
497
- ) {
498
- const tsConfigFile = project.createSourceFile(
499
- `${srcPath}/tsconfig.json`,
500
- "",
501
- {
502
- overwrite: true
503
- }
504
- );
505
-
506
- const { packageDetails, azureSdkForJs } = codeModel.options || {};
507
- const { generateTest, generateSample } = codeModel.options || {};
508
- const isAzureFlavor = codeModel.options?.flavor === "azure";
509
- // Take the undefined as true by default
510
- const clientPackageName = packageDetails!.name;
511
- const tsConfig = (
512
- !isAzureFlavor
513
- ? modularTsConfigNotInSDKRepo
514
- : azureSdkForJs
515
- ? modularTsConfigInSDKRepo
516
- : modularTsConfigNotInSDKRepo
517
- ) as any;
518
-
519
- if (generateTest && isAzureFlavor) {
520
- tsConfig.include.push("./test/**/*.ts");
521
- }
522
- if (generateSample && isAzureFlavor) {
523
- tsConfig.include.push("samples-dev/**/*.ts");
524
- tsConfig.compilerOptions["paths"] = {};
525
- tsConfig.compilerOptions["paths"][clientPackageName] = ["./src/index"];
526
- }
527
-
528
- tsConfigFile.addStatements(JSON.stringify(tsConfig));
529
-
530
- return tsConfigFile;
531
- }
@@ -29,6 +29,14 @@ export function buildRootIndex(
29
29
  }
30
30
 
31
31
  exportClassicalClient(client, rootIndexFile, subfolder);
32
+ exportRestoreHelpers(
33
+ rootIndexFile,
34
+ project,
35
+ srcPath,
36
+ clientName,
37
+ subfolder,
38
+ true
39
+ );
32
40
  exportModules(
33
41
  rootIndexFile,
34
42
  project,
@@ -49,6 +57,40 @@ export function buildRootIndex(
49
57
  );
50
58
  }
51
59
 
60
+ function exportRestoreHelpers(
61
+ indexFile: SourceFile,
62
+ project: Project,
63
+ srcPath: string,
64
+ clientName: string,
65
+ subfolder: string = "",
66
+ isTopLevel: boolean = false
67
+ ) {
68
+ const helperFile = project.getSourceFile(
69
+ `${srcPath}/${
70
+ subfolder !== "" ? subfolder + "/" : ""
71
+ }restorePollerHelpers.ts`
72
+ );
73
+ if (!helperFile) {
74
+ return;
75
+ }
76
+ const exported = [...indexFile.getExportedDeclarations().keys()];
77
+ const namedExports = [...helperFile.getExportedDeclarations().keys()].map(
78
+ (helper) => {
79
+ if (exported.indexOf(helper) > -1) {
80
+ return `${helper} as ${clientName}${helper}`;
81
+ }
82
+ return helper;
83
+ }
84
+ );
85
+ const moduleSpecifier = `./${
86
+ isTopLevel && subfolder !== "" ? subfolder + "/" : ""
87
+ }restorePollerHelpers.js`;
88
+ indexFile.addExportDeclaration({
89
+ moduleSpecifier,
90
+ namedExports
91
+ });
92
+ }
93
+
52
94
  function exportClassicalClient(
53
95
  client: Client,
54
96
  indexFile: SourceFile,
@@ -122,6 +164,13 @@ export function buildSubClientIndexFile(
122
164
  }
123
165
 
124
166
  exportClassicalClient(client, subClientIndexFile, subfolder, true);
167
+ exportRestoreHelpers(
168
+ subClientIndexFile,
169
+ codeModel.project,
170
+ srcPath,
171
+ clientName,
172
+ subfolder
173
+ );
125
174
  exportModules(
126
175
  subClientIndexFile,
127
176
  codeModel.project,
@@ -14,7 +14,8 @@ export function buildSubpathIndexFile(
14
14
  ) {
15
15
  const { subfolder } = client;
16
16
  const srcPath = codeModel.modularOptions.sourceRoot;
17
-
17
+ // Skip to export these files because they are used internally.
18
+ const skipFiles = ["pagingHelpers.ts", "pollingHelpers.ts"];
18
19
  const apiFilePattern = join(srcPath, client.subfolder ?? "", subpath);
19
20
  const apiFiles = codeModel.project.getSourceFiles().filter((file) => {
20
21
  return file
@@ -32,9 +33,8 @@ export function buildSubpathIndexFile(
32
33
  if (!options.exportIndex && file.getFilePath().endsWith("index.ts")) {
33
34
  continue;
34
35
  }
35
- // Skip to export pagingHelpers.ts
36
- // pagingHelpers.ts is a file that is used internally and is not exported.
37
- if (file.getFilePath().endsWith("pagingHelpers.ts")) {
36
+ // Skip to export these files because they are used internally.
37
+ if (skipFiles.some((skipFile) => file.getFilePath().endsWith(skipFile))) {
38
38
  continue;
39
39
  }
40
40
  if (file.getFilePath() === indexFile.getFilePath()) {