@azure-tools/typespec-ts 0.14.0 → 0.15.0-alpha.20230822.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 (141) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/src/index.d.ts +1 -5
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +148 -78
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/lib.d.ts.map +1 -1
  7. package/dist/src/lib.js +4 -2
  8. package/dist/src/lib.js.map +1 -1
  9. package/dist/src/modular/buildClassicalClient.d.ts +1 -1
  10. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  11. package/dist/src/modular/buildClassicalClient.js +27 -15
  12. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  13. package/dist/src/modular/buildClientContext.d.ts +1 -1
  14. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  15. package/dist/src/modular/buildClientContext.js +16 -7
  16. package/dist/src/modular/buildClientContext.js.map +1 -1
  17. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  18. package/dist/src/modular/buildCodeModel.js +59 -12
  19. package/dist/src/modular/buildCodeModel.js.map +1 -1
  20. package/dist/src/modular/buildOperations.d.ts +2 -1
  21. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  22. package/dist/src/modular/buildOperations.js +25 -29
  23. package/dist/src/modular/buildOperations.js.map +1 -1
  24. package/dist/src/modular/buildProjectFiles.d.ts +2 -2
  25. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
  26. package/dist/src/modular/buildProjectFiles.js +284 -145
  27. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  28. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  29. package/dist/src/modular/buildRootIndex.js +5 -5
  30. package/dist/src/modular/buildRootIndex.js.map +1 -1
  31. package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
  32. package/dist/src/modular/buildSubpathIndex.js +9 -2
  33. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  34. package/dist/src/modular/emitModels.d.ts +3 -2
  35. package/dist/src/modular/emitModels.d.ts.map +1 -1
  36. package/dist/src/modular/emitModels.js +40 -7
  37. package/dist/src/modular/emitModels.js.map +1 -1
  38. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
  39. package/dist/src/modular/helpers/clientHelpers.js +5 -3
  40. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  41. package/dist/src/modular/helpers/docsHelpers.d.ts +3 -0
  42. package/dist/src/modular/helpers/docsHelpers.d.ts.map +1 -0
  43. package/dist/src/modular/helpers/docsHelpers.js +10 -0
  44. package/dist/src/modular/helpers/docsHelpers.js.map +1 -0
  45. package/dist/src/modular/helpers/operationHelpers.d.ts +11 -4
  46. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  47. package/dist/src/modular/helpers/operationHelpers.js +197 -56
  48. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  49. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  50. package/dist/src/modular/helpers/typeHelpers.js +6 -0
  51. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  52. package/dist/src/modular/modularCodeModel.d.ts +2 -0
  53. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  54. package/dist/src/transform/transform.d.ts +5 -8
  55. package/dist/src/transform/transform.d.ts.map +1 -1
  56. package/dist/src/transform/transform.js +23 -13
  57. package/dist/src/transform/transform.js.map +1 -1
  58. package/dist/src/transform/transformApiVersionInfo.d.ts +2 -1
  59. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
  60. package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
  61. package/dist/src/transform/transformHelperFunctionDetails.d.ts +2 -1
  62. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
  63. package/dist/src/transform/transformHelperFunctionDetails.js +4 -10
  64. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  65. package/dist/src/transform/transformParameters.d.ts +2 -12
  66. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  67. package/dist/src/transform/transformParameters.js +6 -47
  68. package/dist/src/transform/transformParameters.js.map +1 -1
  69. package/dist/src/transform/transformPaths.d.ts +2 -2
  70. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  71. package/dist/src/transform/transformPaths.js.map +1 -1
  72. package/dist/src/transform/transformResponses.d.ts +2 -2
  73. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  74. package/dist/src/transform/transformResponses.js +5 -1
  75. package/dist/src/transform/transformResponses.js.map +1 -1
  76. package/dist/src/transform/transformSchemas.d.ts +2 -2
  77. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  78. package/dist/src/transform/transformSchemas.js.map +1 -1
  79. package/dist/src/transform/transformTelemetryInfo.d.ts +4 -0
  80. package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -0
  81. package/dist/src/transform/transformTelemetryInfo.js +42 -0
  82. package/dist/src/transform/transformTelemetryInfo.js.map +1 -0
  83. package/dist/src/transform/transfromRLCOptions.d.ts +4 -2
  84. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  85. package/dist/src/transform/transfromRLCOptions.js +72 -19
  86. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  87. package/dist/src/utils/clientUtils.d.ts +2 -1
  88. package/dist/src/utils/clientUtils.d.ts.map +1 -1
  89. package/dist/src/utils/clientUtils.js.map +1 -1
  90. package/dist/src/utils/interfaces.d.ts +13 -0
  91. package/dist/src/utils/interfaces.d.ts.map +1 -0
  92. package/dist/src/utils/interfaces.js +2 -0
  93. package/dist/src/utils/interfaces.js.map +1 -0
  94. package/dist/src/utils/modelUtils.d.ts +1 -1
  95. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  96. package/dist/src/utils/modelUtils.js +25 -20
  97. package/dist/src/utils/modelUtils.js.map +1 -1
  98. package/dist/src/utils/operationUtil.d.ts +15 -4
  99. package/dist/src/utils/operationUtil.d.ts.map +1 -1
  100. package/dist/src/utils/operationUtil.js +65 -1
  101. package/dist/src/utils/operationUtil.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +28 -18
  104. package/src/index.ts +231 -129
  105. package/src/lib.ts +4 -2
  106. package/src/modular/buildClassicalClient.ts +33 -16
  107. package/src/modular/buildClientContext.ts +18 -8
  108. package/src/modular/buildCodeModel.ts +71 -13
  109. package/src/modular/buildOperations.ts +31 -36
  110. package/src/modular/buildProjectFiles.ts +329 -162
  111. package/src/modular/buildRootIndex.ts +5 -7
  112. package/src/modular/buildSubpathIndex.ts +9 -2
  113. package/src/modular/emitModels.ts +55 -9
  114. package/src/modular/helpers/clientHelpers.ts +5 -3
  115. package/src/modular/helpers/docsHelpers.ts +10 -0
  116. package/src/modular/helpers/operationHelpers.ts +328 -75
  117. package/src/modular/helpers/typeHelpers.ts +6 -0
  118. package/src/modular/modularCodeModel.ts +2 -0
  119. package/src/transform/transform.ts +24 -31
  120. package/src/transform/transformApiVersionInfo.ts +1 -1
  121. package/src/transform/transformHelperFunctionDetails.ts +12 -11
  122. package/src/transform/transformParameters.ts +20 -63
  123. package/src/transform/transformPaths.ts +5 -5
  124. package/src/transform/transformResponses.ts +10 -6
  125. package/src/transform/transformSchemas.ts +2 -2
  126. package/src/transform/transformTelemetryInfo.ts +72 -0
  127. package/src/transform/transfromRLCOptions.ts +100 -23
  128. package/src/utils/clientUtils.ts +2 -4
  129. package/src/utils/interfaces.ts +14 -0
  130. package/src/utils/modelUtils.ts +18 -11
  131. package/src/utils/operationUtil.ts +92 -6
  132. package/dist/src/modular/helpers/fixmeHelpers.d.ts +0 -2
  133. package/dist/src/modular/helpers/fixmeHelpers.d.ts.map +0 -1
  134. package/dist/src/modular/helpers/fixmeHelpers.js +0 -4
  135. package/dist/src/modular/helpers/fixmeHelpers.js.map +0 -1
  136. package/dist/src/modular/helpers/parameterHelpers.d.ts +0 -3
  137. package/dist/src/modular/helpers/parameterHelpers.d.ts.map +0 -1
  138. package/dist/src/modular/helpers/parameterHelpers.js +0 -16
  139. package/dist/src/modular/helpers/parameterHelpers.js.map +0 -1
  140. package/src/modular/helpers/fixmeHelpers.ts +0 -3
  141. package/src/modular/helpers/parameterHelpers.ts +0 -17
@@ -1,32 +1,62 @@
1
1
  import { Project } from "ts-morph";
2
2
  import { ModularCodeModel } from "./modularCodeModel.js";
3
3
  import { NameType, normalizeName } from "@azure-tools/rlc-common";
4
+ import {
5
+ hasLROOperation,
6
+ hasPagingOperation
7
+ } from "./helpers/operationHelpers.js";
4
8
 
5
9
  export function emitPackage(
6
10
  project: Project,
7
- srcPath: string,
8
- codeModel: ModularCodeModel
11
+ metadataDir: string,
12
+ codeModel: ModularCodeModel,
13
+ hasSamplesGenerated = false
9
14
  ) {
10
15
  const packageJson = project.createSourceFile(
11
- `${srcPath}/package-files/package.json`,
16
+ `${metadataDir}/package.json`,
12
17
  "",
13
18
  {
14
19
  overwrite: true
15
20
  }
16
21
  );
17
- const content = {
18
- name: `${
19
- codeModel.options?.packageDetails?.name ?? "@msinternal/unamedpackage"
20
- }`,
21
- version: "1.0.0-beta.1",
22
- description: `${codeModel.options?.packageDetails?.description}`,
22
+ const hasLRO = hasLROOperation(codeModel),
23
+ hasPaging = hasPagingOperation(codeModel);
24
+ const { azureOutputDirectory, azureSdkForJs, sourceFrom, isModularLibrary } =
25
+ codeModel.options;
26
+ let { packageDetails, generateTest, generateSample } = codeModel.options;
27
+ if (packageDetails === undefined) {
28
+ packageDetails = {
29
+ name: "@msinternal/unamedpackage",
30
+ nameWithoutScope: "unamedpackage",
31
+ version: "1.0.0-beta.1"
32
+ };
33
+ }
34
+ // Take the undefined as true by default
35
+ generateTest = generateTest === true || generateTest === undefined;
36
+ generateSample =
37
+ (generateSample === true || generateSample === undefined) &&
38
+ hasSamplesGenerated;
39
+ const clientPackageName = packageDetails.name;
40
+ let apiRefUrlQueryParameter: string = "";
41
+ packageDetails.version = packageDetails.version ?? "1.0.0-beta.1";
42
+ if (packageDetails.version.includes("beta")) {
43
+ apiRefUrlQueryParameter = "?view=azure-node-preview";
44
+ }
45
+
46
+ const packageInfo = {
47
+ name: `${packageDetails.name}`,
23
48
  "sdk-type": "client",
24
- main: "dist/index.js",
25
- module: "dist-esm/src/index.js",
26
- "react-native": {
27
- "./dist/index.js": "./dist-esm/src/index.js"
28
- },
49
+ author: "Microsoft Corporation",
50
+ version: `${packageDetails.version}`,
51
+ description:
52
+ `${packageDetails.description}` ||
53
+ `A generated SDK for ${codeModel.clients[0]?.name}.`,
54
+ keywords: ["node", "azure", "cloud", "typescript", "browser", "isomorphic"],
55
+ license: "MIT",
29
56
  type: "module",
57
+ main: "dist/index.js",
58
+ module: "./dist-esm/src/index.js",
59
+ types: `./types/${packageDetails.nameWithoutScope}.d.ts`,
30
60
  exports: {
31
61
  ".": {
32
62
  types: "./types/src/index.d.ts",
@@ -42,202 +72,339 @@ export function emitPackage(
42
72
  import: "./dist-esm/src/models/index.js"
43
73
  }
44
74
  },
45
- "//metadata": {
46
- constantPaths: [
47
- {
48
- path: "src/utils/constants.ts",
49
- prefix: "SDK_VERSION"
50
- }
51
- ]
52
- },
53
- types: `types/latest/${codeModel.options?.packageDetails?.nameWithoutScope}.d.ts`,
54
- typesVersions: {
55
- "<3.6": {
56
- "*": [
57
- `types/3.1/${codeModel.options?.packageDetails?.nameWithoutScope}.d.ts`
58
- ]
59
- }
60
- },
61
- scripts: {
62
- audit:
63
- "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit",
64
- "build:samples": "echo Obsolete",
65
- "build:test:browser": "tsc -p . && rollup -c rollup.test.config.js 2>&1",
66
- "build:test:node": "tsc -p . && dev-tool run bundle",
67
- "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1",
68
- "build:types": "downlevel-dts types/latest/ types/3.1/",
69
- "build:output": "node scripts/renameOutput.mjs",
70
- build:
71
- "npm run build:test && api-extractor run --local && npm run build:types && npm run build:output",
72
- "check-format":
73
- 'prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "test/**/*.ts" "*.{js,json}"',
74
- clean: "rimraf dist dist-* temp types *.tgz *.log",
75
- "execute:samples": "dev-tool samples run samples-dev",
76
- "extract-api": "tsc -p . && api-extractor run --local",
77
- format:
78
- 'prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "test/**/*.ts" "samples-dev/**/*.ts" "*.{js,json}"',
79
- "integration-test:browser": "echo skipped",
80
- "integration-test:node":
81
- 'nyc mocha --timeout 600000 "test/internal/**/*.spec.ts" "test/public/**/*.spec.ts"',
82
- "integration-test":
83
- "npm run integration-test:node && npm run integration-test:browser",
84
- "lint:fix":
85
- "eslint README.md package.json api-extractor.json src test --ext .ts,.javascript,.js --fix --fix-type [problem,suggestion]",
86
- lint: "eslint README.md package.json api-extractor.json src test --ext .ts,.javascript,.js",
87
- pack: "npm pack 2>&1",
88
- "test:browser":
89
- "npm run clean && npm run build:test && npm run integration-test:browser",
90
- "test:node": "npm run clean && tsc -p . && npm run integration-test:node",
91
- test: "npm run clean && tsc -p . && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test",
92
- "unit-test:browser": "karma start karma.conf.cjs --single-run",
93
- "unit-test:node":
94
- 'mocha --exclude "test/**/browser/*.spec.ts" "test/internal/unit/{,!(browser)/**/}*.spec.ts" "test/public/unit/{,!(browser)/**/}*.spec.ts"',
95
- "unit-test": "npm run unit-test:node && npm run unit-test:browser"
75
+ repository: "github:Azure/azure-sdk-for-js",
76
+ bugs: {
77
+ url: "https://github.com/Azure/azure-sdk-for-js/issues"
96
78
  },
97
79
  files: [
98
80
  "dist/",
99
- "dist-esm/src/",
100
- "types",
101
- "types/src",
102
- "types/latest/",
103
- "types/3.1/",
81
+ generateTest ? "dist-esm/src/" : "dist-esm/",
82
+ `types/${packageDetails.nameWithoutScope}.d.ts`,
104
83
  "README.md",
105
- "LICENSE"
84
+ "LICENSE",
85
+ "review/*"
106
86
  ],
107
- repository: "github:Azure/azure-sdk-for-js",
108
87
  engines: {
109
88
  node: ">=14.0.0"
110
89
  },
111
- keywords: ["azure", "cloud", "typescript"],
112
- author: "Microsoft Corporation",
113
- license: "MIT",
114
- bugs: {
115
- url: "https://github.com/Azure/azure-sdk-for-js/issues"
90
+ scripts: {
91
+ audit:
92
+ "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit",
93
+ "build:browser": "echo skipped.",
94
+ "build:node": "echo skipped.",
95
+ "build:samples": "echo skipped.",
96
+ "build:test": "echo skipped.",
97
+ "build:debug": "echo skipped.",
98
+ "check-format": `prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ${appendPathWhenFormat(
99
+ generateTest,
100
+ generateSample
101
+ )}`,
102
+ clean:
103
+ "rimraf dist dist-browser dist-esm test-dist temp types *.tgz *.log",
104
+ "execute:samples": "echo skipped",
105
+ "extract-api":
106
+ "rimraf review && mkdirp ./review && api-extractor run --local",
107
+ format: `prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore "src/**/*.ts" "*.{js,json}" ${appendPathWhenFormat(
108
+ generateTest,
109
+ generateSample
110
+ )}`,
111
+ "generate:client":
112
+ sourceFrom === "Swagger"
113
+ ? "autorest --typescript swagger/README.md && npm run format"
114
+ : "echo skipped",
115
+ "integration-test:browser": "echo skipped",
116
+ "integration-test:node": "echo skipped",
117
+ "integration-test": "echo skipped",
118
+ "lint:fix": `eslint package.json api-extractor.json src ${appednPathWhenLint(
119
+ generateTest
120
+ )} --ext .ts --fix --fix-type [problem,suggestion]`,
121
+ lint: `eslint package.json api-extractor.json src ${appednPathWhenLint(
122
+ generateTest
123
+ )} --ext .ts`,
124
+ pack: "npm pack 2>&1",
125
+ "test:browser": "echo skipped",
126
+ "test:node": "echo skipped",
127
+ test: 'echo "Error: no test specified" && exit 1',
128
+ "unit-test": "echo skipped",
129
+ "unit-test:node": "echo skipped",
130
+ "unit-test:browser": "echo skipped"
116
131
  },
117
- homepage: `https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/${(
118
- codeModel.options?.packageDetails?.nameWithoutScope ?? ""
119
- ).replace(/-/g, "")}/${
120
- codeModel.options?.packageDetails?.nameWithoutScope
121
- }/README.md`,
122
132
  sideEffects: false,
123
- prettier: "@azure/eslint-plugin-azure-sdk/prettier.json",
133
+ autoPublish: false,
134
+ dependencies: {
135
+ "@azure/core-auth": "^1.3.0",
136
+ "@azure-rest/core-client": "^1.1.4",
137
+ "@azure/core-rest-pipeline": "^1.12.0",
138
+ "@azure/logger": "^1.0.0",
139
+ tslib: "^2.2.0",
140
+ ...(hasPaging && {
141
+ "@azure/core-paging": "^1.5.0"
142
+ }),
143
+ ...(hasLRO && {
144
+ "@azure/core-lro": "^2.5.4",
145
+ "@azure/abort-controller": "^1.0.0"
146
+ }),
147
+ ...(isModularLibrary && {
148
+ "@azure/core-util": "^1.4.0"
149
+ })
150
+ },
124
151
  devDependencies: {
125
- "@azure/dev-tool": "^1.0.0",
126
- "@azure/eslint-plugin-azure-sdk": "^3.0.0",
127
- "@azure-tools/test-recorder": "^3.0.0",
128
- "@azure/test-utils": "^1.0.0",
129
152
  "@microsoft/api-extractor": "^7.31.1",
130
- "@rollup/plugin-commonjs": "^24.0.0",
131
- "@rollup/plugin-inject": "^5.0.0",
132
- "@rollup/plugin-json": "^6.0.0",
133
- "@rollup/plugin-multi-entry": "^6.0.0",
134
- "@rollup/plugin-node-resolve": "^13.1.3",
135
- "@rollup/plugin-replace": "^5.0.0",
136
- "@rollup/plugin-typescript": "^11.0.0",
137
- "@types/chai": "^4.3.1",
138
- "@types/mocha": "^7.0.2",
153
+ autorest: "latest",
139
154
  "@types/node": "^14.0.0",
140
- chai: "^4.3.6",
141
- "cross-env": "^7.0.3",
142
155
  dotenv: "^16.0.0",
143
- "downlevel-dts": "^0.10.0",
144
- eslint: "^8.16.0",
145
- esm: "^3.2.25",
146
- karma: "^6.4.0",
147
- "karma-chrome-launcher": "^3.1.1",
148
- "karma-coverage": "^2.2.0",
149
- "karma-edge-launcher": "^0.4.2",
150
- "karma-env-preprocessor": "^0.1.1",
151
- "karma-firefox-launcher": "^2.1.2",
152
- "karma-json-preprocessor": "^0.3.3",
153
- "karma-json-to-file-reporter": "^1.0.1",
154
- "karma-junit-reporter": "^2.0.1",
155
- "karma-mocha": "^2.0.1",
156
- "karma-mocha-reporter": "^2.2.5",
157
- "karma-sourcemap-loader": "^0.3.8",
158
- mocha: "^7.1.1",
159
- "mocha-junit-reporter": "^2.0.2",
160
- nyc: "^15.1.0",
156
+ eslint: "^8.0.0",
157
+ mkdirp: "^2.1.2",
161
158
  prettier: "^2.5.1",
162
- puppeteer: "^19.2.2",
163
- rimraf: "^3.0.2",
164
- rollup: "^2.0.0",
165
- "rollup-plugin-shim": "^1.0.0",
166
- "rollup-plugin-sourcemaps": "^0.6.3",
167
- "ts-node": "^10.8.1",
168
- typescript: "~5.0.0",
169
- util: "^0.12.4"
170
- },
171
- dependencies: {
172
- "@azure-rest/core-client": "^1.1.2",
173
- "@azure/core-auth": "^1.4.1",
174
- "@azure/core-rest-pipeline": "^1.8.1",
175
- "@azure/core-util": "^1.1.0",
176
- "@azure/logger": "^1.0.3",
177
- tslib: "^2.4.0"
159
+ rimraf: "^3.0.0",
160
+ "source-map-support": "^0.5.9",
161
+ typescript: "~5.0.0"
178
162
  }
179
163
  } as any;
180
164
 
165
+ if (azureOutputDirectory) {
166
+ packageInfo[
167
+ "homepage"
168
+ ] = `https://github.com/Azure/azure-sdk-for-js/tree/main/${azureOutputDirectory}/README.md`;
169
+ }
170
+
171
+ if (azureSdkForJs) {
172
+ packageInfo["//metadata"] = {
173
+ constantPaths: []
174
+ };
175
+ // TODO: remember to put the userAgent path into metadata
176
+ // Only generate this from Swagger spec
177
+ if (sourceFrom === "Swagger") {
178
+ packageInfo["//metadata"].constantPaths.push({
179
+ path: "swagger/README.md",
180
+ prefix: "package-version"
181
+ });
182
+ }
183
+ packageInfo.scripts["build"] =
184
+ "npm run clean && tsc -p . && dev-tool run bundle && mkdirp ./review && api-extractor run --local";
185
+ packageInfo.scripts["build:debug"] =
186
+ "tsc -p . && dev-tool run bundle && api-extractor run --local";
187
+ packageInfo.scripts["build:browser"] = "tsc -p . && dev-tool run bundle";
188
+ packageInfo.scripts["build:node"] = "tsc -p . && dev-tool run bundle";
189
+ packageInfo.devDependencies["@azure/dev-tool"] = "^1.0.0";
190
+ packageInfo.devDependencies["@azure/eslint-plugin-azure-sdk"] = "^3.0.0";
191
+ } else {
192
+ packageInfo.scripts["build"] =
193
+ "npm run clean && tsc && rollup -c 2>&1 && npm run minify && mkdirp ./review && npm run extract-api";
194
+ packageInfo.scripts[
195
+ "minify"
196
+ ] = `uglifyjs -c -m --comments --source-map "content='./dist/index.js.map'" -o ./dist/index.min.js ./dist/index.js`;
197
+ packageInfo.devDependencies["@rollup/plugin-commonjs"] = "^24.0.0";
198
+ packageInfo.devDependencies["@rollup/plugin-json"] = "^6.0.0";
199
+ packageInfo.devDependencies["@rollup/plugin-multi-entry"] = "^6.0.0";
200
+ packageInfo.devDependencies["@rollup/plugin-node-resolve"] = "^13.1.3";
201
+ packageInfo.devDependencies["rollup"] = "^2.66.1";
202
+ packageInfo.devDependencies["rollup-plugin-sourcemaps"] = "^0.6.3";
203
+ packageInfo.devDependencies["uglify-js"] = "^3.4.9";
204
+ }
205
+
206
+ if (generateTest) {
207
+ packageInfo.module = `./dist-esm/src/index.js`;
208
+ packageInfo.devDependencies["@azure-tools/test-credential"] = "^1.0.0";
209
+ packageInfo.devDependencies["@azure/identity"] = "^2.0.1";
210
+ packageInfo.devDependencies["@azure-tools/test-recorder"] = "^3.0.0";
211
+ packageInfo.devDependencies["mocha"] = "^7.1.1";
212
+ packageInfo.devDependencies["@types/mocha"] = "^7.0.2";
213
+ packageInfo.devDependencies["mocha-junit-reporter"] = "^1.18.0";
214
+ packageInfo.devDependencies["cross-env"] = "^7.0.2";
215
+ packageInfo.devDependencies["@types/chai"] = "^4.2.8";
216
+ packageInfo.devDependencies["chai"] = "^4.2.0";
217
+ packageInfo.devDependencies["cross-env"] = "^7.0.2";
218
+ packageInfo.devDependencies["karma-chrome-launcher"] = "^3.0.0";
219
+ packageInfo.devDependencies["karma-coverage"] = "^2.0.0";
220
+ packageInfo.devDependencies["karma-env-preprocessor"] = "^0.1.1";
221
+ packageInfo.devDependencies["karma-firefox-launcher"] = "^2.1.2";
222
+ packageInfo.devDependencies["karma-junit-reporter"] = "^2.0.1";
223
+ packageInfo.devDependencies["karma-mocha-reporter"] = "^2.2.5";
224
+ packageInfo.devDependencies["karma-mocha"] = "^2.0.1";
225
+ packageInfo.devDependencies["karma-source-map-support"] = "~1.4.0";
226
+ packageInfo.devDependencies["karma-sourcemap-loader"] = "^0.4.0";
227
+ packageInfo.devDependencies["karma"] = "^6.2.0";
228
+ packageInfo.devDependencies["nyc"] = "^15.0.0";
229
+ packageInfo.devDependencies["source-map-support"] = "^0.5.9";
230
+ packageInfo.devDependencies["ts-node"] = "^10.0.0";
231
+ packageInfo.scripts["test"] =
232
+ "npm run clean && npm run build:test && npm run unit-test";
233
+ packageInfo.scripts["test:node"] =
234
+ "npm run clean && npm run build:test && npm run unit-test:node";
235
+ packageInfo.scripts["test:browser"] =
236
+ "npm run clean && npm run build:test && npm run unit-test:browser";
237
+ packageInfo.scripts["build:browser"] =
238
+ "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1";
239
+ packageInfo.scripts["build:node"] =
240
+ "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1";
241
+ packageInfo.scripts["build:test"] = "tsc -p . && rollup -c 2>&1";
242
+ packageInfo.scripts["unit-test"] =
243
+ "npm run unit-test:node && npm run unit-test:browser";
244
+ packageInfo.scripts["unit-test:node"] =
245
+ 'mocha -r esm --require ts-node/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 1200000 --full-trace "test/{,!(browser)/**/}*.spec.ts"';
246
+ packageInfo.scripts["unit-test:browser"] = "karma start --single-run";
247
+ packageInfo.scripts["integration-test:browser"] =
248
+ "karma start --single-run";
249
+ packageInfo.scripts["integration-test:node"] =
250
+ 'nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 5000000 --full-trace "dist-esm/test/{,!(browser)/**/}*.spec.js"';
251
+ packageInfo.scripts["integration-test"] =
252
+ "npm run integration-test:node && npm run integration-test:browser";
253
+ if (azureSdkForJs) {
254
+ packageInfo.scripts["build:test"] = "tsc -p . && dev-tool run bundle";
255
+ packageInfo.scripts["integration-test:browser"] =
256
+ "dev-tool run test:browser";
257
+ packageInfo.scripts["unit-test:browser"] = "dev-tool run test:browser";
258
+ packageInfo.scripts["unit-test:node"] =
259
+ "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'";
260
+ packageInfo.scripts["integration-test:node"] =
261
+ "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'";
262
+ }
263
+
264
+ packageInfo["browser"] = {
265
+ "./dist-esm/test/public/utils/env.js":
266
+ "./dist-esm/test/public/utils/env.browser.js"
267
+ };
268
+ }
269
+
270
+ if (generateSample) {
271
+ packageInfo["//sampleConfiguration"] = {
272
+ productName:
273
+ codeModel.options.serviceInfo?.title ?? codeModel.clients[0]?.name,
274
+ productSlugs: ["azure"],
275
+ disableDocsMs: true,
276
+ apiRefLink: `https://docs.microsoft.com/javascript/api/${clientPackageName}${apiRefUrlQueryParameter}`
277
+ };
278
+ if (azureSdkForJs) {
279
+ packageInfo.scripts["execute:samples"] =
280
+ "dev-tool samples run samples-dev";
281
+ }
282
+ }
283
+
181
284
  if (codeModel.clients.length > 1) {
182
- delete content.exports["./api"];
183
- delete content.exports["./models"];
285
+ delete packageInfo.exports["./api"];
286
+ delete packageInfo.exports["./models"];
184
287
  for (const client of codeModel.clients) {
185
288
  const subfolder = normalizeName(
186
289
  client.name.replace("Client", ""),
187
290
  NameType.File
188
291
  );
189
- content.exports[`./${subfolder}`] = {
292
+ packageInfo.exports[`./${subfolder}`] = {
190
293
  types: `./types/src/${subfolder}/index.d.ts`,
191
294
  import: `./dist-esm/src/${subfolder}/index.js`
192
295
  };
193
- content.exports[`./${subfolder}/api`] = {
296
+ packageInfo.exports[`./${subfolder}/api`] = {
194
297
  types: `./types/src/${subfolder}/api/index.d.ts`,
195
298
  import: `./dist-esm/src/${subfolder}/api/index.js`
196
299
  };
197
- content.exports[`./${subfolder}/models`] = {
300
+ packageInfo.exports[`./${subfolder}/models`] = {
198
301
  types: `./types/src/${subfolder}/models/index.d.ts`,
199
302
  import: `./dist-esm/src/${subfolder}/models/index.js`
200
303
  };
201
304
  }
202
305
  }
203
306
 
204
- packageJson.addStatements(JSON.stringify(content));
307
+ packageJson.addStatements(JSON.stringify(packageInfo));
205
308
 
206
309
  return packageJson;
207
310
  }
208
311
 
312
+ const modularTsConfigInSDKRepo: Record<string, any> = {
313
+ extends: "../../../tsconfig.package",
314
+ compilerOptions: {
315
+ outDir: "./dist-esm",
316
+ declarationDir: "./types",
317
+ module: "NodeNext",
318
+ moduleResolution: "NodeNext",
319
+ lib: ["esnext", "dom"],
320
+ rootDir: "."
321
+ },
322
+ "ts-node": { esm: true },
323
+ include: ["src/**/*.ts"]
324
+ };
325
+
326
+ const modularTsConfigNotInSDKRepo: Record<string, any> = {
327
+ compilerOptions: {
328
+ target: "ES2017",
329
+ module: "NodeNext",
330
+ lib: ["esnext", "dom"],
331
+ declaration: true,
332
+ declarationMap: true,
333
+ inlineSources: true,
334
+ sourceMap: true,
335
+ importHelpers: true,
336
+ strict: true,
337
+ alwaysStrict: true,
338
+ noUnusedLocals: true,
339
+ noUnusedParameters: true,
340
+ noImplicitReturns: true,
341
+ noFallthroughCasesInSwitch: true,
342
+ forceConsistentCasingInFileNames: true,
343
+ moduleResolution: "NodeNext",
344
+ allowSyntheticDefaultImports: true,
345
+ esModuleInterop: true,
346
+ outDir: "./dist-esm",
347
+ declarationDir: "./types",
348
+ rootDir: "."
349
+ },
350
+ "ts-node": { esm: true },
351
+ include: ["./src/**/*.ts"]
352
+ };
353
+
209
354
  export function emitTsConfig(
210
355
  project: Project,
211
356
  srcPath: string,
212
- codeModel: ModularCodeModel
357
+ codeModel: ModularCodeModel,
358
+ hasSamplesGenerated = false
213
359
  ) {
214
- const tsConfig = project.createSourceFile(
215
- `${srcPath}/package-files/tsconfig.json`,
360
+ const tsConfigFile = project.createSourceFile(
361
+ `${srcPath}/tsconfig.json`,
216
362
  "",
217
363
  {
218
364
  overwrite: true
219
365
  }
220
366
  );
221
- const content = {
222
- extends: "../../../tsconfig.package",
223
- compilerOptions: {
224
- outDir: "./dist-esm",
225
- declarationDir: "./types",
226
- paths: {
227
- [`${
228
- codeModel.options?.packageDetails?.name ?? "@msinternal/unamedpackage"
229
- }`]: ["./src/index.js"]
230
- },
231
- module: "NodeNext",
232
- moduleResolution: "NodeNext",
233
- rootDir: "."
234
- },
235
- "ts-node": {
236
- esm: true
237
- },
238
- include: ["src/**/*.ts", "test/**/*.ts", "samples-dev/**/*.ts"]
239
- };
240
- tsConfig.addStatements(JSON.stringify(content));
241
367
 
242
- return tsConfig;
368
+ const { packageDetails, azureSdkForJs } = codeModel.options || {};
369
+ let { generateTest, generateSample } = codeModel.options || {};
370
+ // Take the undefined as true by default
371
+ generateTest = generateTest === true || generateTest === undefined;
372
+ generateSample =
373
+ (generateSample === true || generateSample === undefined) &&
374
+ hasSamplesGenerated;
375
+ const clientPackageName = packageDetails?.name ?? "@msinternal/unamedpackage";
376
+ const tsConfig = (
377
+ azureSdkForJs ? modularTsConfigInSDKRepo : modularTsConfigNotInSDKRepo
378
+ ) as any;
379
+
380
+ if (generateTest) {
381
+ tsConfig.include.push("./test/**/*.ts");
382
+ }
383
+ if (generateSample) {
384
+ tsConfig.include.push("samples-dev/**/*.ts");
385
+ tsConfig.compilerOptions["paths"] = {};
386
+ tsConfig.compilerOptions["paths"][clientPackageName] = ["./src/index"];
387
+ }
388
+
389
+ tsConfigFile.addStatements(JSON.stringify(tsConfig));
390
+
391
+ return tsConfigFile;
392
+ }
393
+
394
+ function appendPathWhenFormat(
395
+ generateTest?: boolean,
396
+ generateSample?: boolean
397
+ ) {
398
+ let path = "";
399
+ if (generateTest) {
400
+ path = path + ` "test/**/*.ts"`;
401
+ }
402
+ if (generateSample) {
403
+ path = path + ` "samples-dev/**/*.ts"`;
404
+ }
405
+ return path;
406
+ }
407
+
408
+ function appednPathWhenLint(generateTest?: boolean) {
409
+ return generateTest ? "test" : "";
243
410
  }
@@ -11,13 +11,11 @@ export function buildRootIndex(
11
11
  ) {
12
12
  const clientName = `${getClientName(client)}Client`;
13
13
  const clientFile = project.getSourceFile(
14
- `${srcPath}/src/${subfolder !== "" ? subfolder + "/" : ""}${clientName}.ts`
14
+ `${srcPath}/${subfolder !== "" ? subfolder + "/" : ""}${clientName}.ts`
15
15
  );
16
16
 
17
17
  if (!clientFile) {
18
- throw new Error(
19
- `Couldn't find client file: ${srcPath}/src/${clientName}.ts`
20
- );
18
+ throw new Error(`Couldn't find client file: ${srcPath}/${clientName}.ts`);
21
19
  }
22
20
 
23
21
  exportClassicalClient(client, rootIndexFile, subfolder);
@@ -48,7 +46,7 @@ function exportModels(
48
46
  isTopLevel: boolean = false
49
47
  ) {
50
48
  const modelsFile = project.getSourceFile(
51
- `${srcPath}/src/${subfolder !== "" ? subfolder + "/" : ""}models/index.ts`
49
+ `${srcPath}/${subfolder !== "" ? subfolder + "/" : ""}models/index.ts`
52
50
  );
53
51
  if (!modelsFile) {
54
52
  return;
@@ -79,12 +77,12 @@ export function buildSubClientIndexFile(
79
77
  subfolder: string
80
78
  ) {
81
79
  const subClientIndexFile = project.createSourceFile(
82
- `${srcPath}/src/${subfolder !== "" ? subfolder + "/" : ""}index.ts`,
80
+ `${srcPath}/${subfolder !== "" ? subfolder + "/" : ""}index.ts`,
83
81
  undefined,
84
82
  { overwrite: true }
85
83
  );
86
84
  const clientName = `${getClientName(client)}Client`;
87
- const clientFilePath = `${srcPath}/src/${
85
+ const clientFilePath = `${srcPath}/${
88
86
  subfolder !== "" ? subfolder + "/" : ""
89
87
  }${clientName}.ts`;
90
88
  const clientFile = project.getSourceFile(clientFilePath);
@@ -1,3 +1,4 @@
1
+ import { join } from "path";
1
2
  import { Project } from "ts-morph";
2
3
 
3
4
  export function buildSubpathIndexFile(
@@ -6,9 +7,15 @@ export function buildSubpathIndexFile(
6
7
  subpath: string,
7
8
  subfolder: string
8
9
  ) {
9
- const apiFiles = project.getSourceFiles(`**/src/${subfolder}/${subpath}/**`);
10
+ const apiFilePattern = join(srcPath, subfolder, subpath);
11
+ const apiFiles = project.getSourceFiles().filter((file) => {
12
+ return file
13
+ .getFilePath()
14
+ .replace(/\\/g, "/")
15
+ .startsWith(apiFilePattern.replace(/\\/g, "/"));
16
+ });
10
17
  const indexFile = project.createSourceFile(
11
- `${srcPath}/src/${subfolder}/${subpath}/index.ts`
18
+ `${srcPath}/${subfolder}/${subpath}/index.ts`
12
19
  );
13
20
  for (const file of apiFiles) {
14
21
  const exports = [...file.getExportedDeclarations().keys()].filter(