@microsoft/teamsfx-core 2.0.0-alpha.df941b6ed.0 → 2.0.0-alpha.e49547890.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/build/common/armInterface.d.ts +0 -5
  2. package/build/common/armInterface.d.ts.map +1 -1
  3. package/build/common/deps-checker/constant/helpLink.d.ts +6 -6
  4. package/build/common/deps-checker/constant/helpLink.d.ts.map +1 -1
  5. package/build/common/deps-checker/constant/helpLink.js +14 -7
  6. package/build/common/deps-checker/constant/helpLink.js.map +1 -1
  7. package/build/common/deps-checker/constant/message.d.ts +6 -5
  8. package/build/common/deps-checker/constant/message.d.ts.map +1 -1
  9. package/build/common/deps-checker/constant/message.js +13 -9
  10. package/build/common/deps-checker/constant/message.js.map +1 -1
  11. package/build/common/deps-checker/constant/telemetry.d.ts +12 -1
  12. package/build/common/deps-checker/constant/telemetry.d.ts.map +1 -1
  13. package/build/common/deps-checker/constant/telemetry.js +11 -0
  14. package/build/common/deps-checker/constant/telemetry.js.map +1 -1
  15. package/build/common/deps-checker/depsChecker.d.ts +6 -1
  16. package/build/common/deps-checker/depsChecker.d.ts.map +1 -1
  17. package/build/common/deps-checker/depsChecker.js.map +1 -1
  18. package/build/common/deps-checker/internal/funcToolChecker.d.ts +20 -40
  19. package/build/common/deps-checker/internal/funcToolChecker.d.ts.map +1 -1
  20. package/build/common/deps-checker/internal/funcToolChecker.js +208 -295
  21. package/build/common/deps-checker/internal/funcToolChecker.js.map +1 -1
  22. package/build/common/deps-checker/internal/nodeChecker.d.ts +3 -3
  23. package/build/common/deps-checker/internal/nodeChecker.d.ts.map +1 -1
  24. package/build/common/deps-checker/internal/nodeChecker.js +4 -6
  25. package/build/common/deps-checker/internal/nodeChecker.js.map +1 -1
  26. package/build/common/deps-checker/internal/vxTestAppChecker.d.ts +0 -1
  27. package/build/common/deps-checker/internal/vxTestAppChecker.d.ts.map +1 -1
  28. package/build/common/deps-checker/internal/vxTestAppChecker.js +3 -21
  29. package/build/common/deps-checker/internal/vxTestAppChecker.js.map +1 -1
  30. package/build/common/deps-checker/util/fileHelper.d.ts +4 -0
  31. package/build/common/deps-checker/util/fileHelper.d.ts.map +1 -0
  32. package/build/common/deps-checker/util/fileHelper.js +45 -0
  33. package/build/common/deps-checker/util/fileHelper.js.map +1 -0
  34. package/build/common/local/constants.d.ts +7 -0
  35. package/build/common/local/constants.d.ts.map +1 -1
  36. package/build/common/local/constants.js +7 -0
  37. package/build/common/local/constants.js.map +1 -1
  38. package/build/common/local/localEnvManager.d.ts.map +1 -1
  39. package/build/common/local/localEnvManager.js +2 -3
  40. package/build/common/local/localEnvManager.js.map +1 -1
  41. package/build/common/m365/errors.d.ts +1 -1
  42. package/build/common/m365/errors.d.ts.map +1 -1
  43. package/build/common/m365/errors.js +7 -7
  44. package/build/common/m365/errors.js.map +1 -1
  45. package/build/common/m365/launchHelper.js +2 -2
  46. package/build/common/m365/launchHelper.js.map +1 -1
  47. package/build/common/samples-config-v3.json +23 -0
  48. package/build/common/samples.js +1 -1
  49. package/build/common/samples.js.map +1 -1
  50. package/build/common/telemetry.d.ts +1 -0
  51. package/build/common/telemetry.d.ts.map +1 -1
  52. package/build/common/telemetry.js +1 -0
  53. package/build/common/telemetry.js.map +1 -1
  54. package/build/common/tools.d.ts +1 -0
  55. package/build/common/tools.d.ts.map +1 -1
  56. package/build/common/tools.js +6 -2
  57. package/build/common/tools.js.map +1 -1
  58. package/build/common/versionMetadata.d.ts +5 -0
  59. package/build/common/versionMetadata.d.ts.map +1 -1
  60. package/build/common/versionMetadata.js +11 -0
  61. package/build/common/versionMetadata.js.map +1 -1
  62. package/build/component/code/utils.d.ts +3 -0
  63. package/build/component/code/utils.d.ts.map +1 -1
  64. package/build/component/code/utils.js +19 -8
  65. package/build/component/code/utils.js.map +1 -1
  66. package/build/component/configManager/diagnostic.d.ts +9 -0
  67. package/build/component/configManager/diagnostic.d.ts.map +1 -0
  68. package/build/component/configManager/diagnostic.js +47 -0
  69. package/build/component/configManager/diagnostic.js.map +1 -0
  70. package/build/component/configManager/parser.d.ts.map +1 -1
  71. package/build/component/configManager/parser.js +11 -5
  72. package/build/component/configManager/parser.js.map +1 -1
  73. package/build/component/constants.d.ts +7 -0
  74. package/build/component/constants.d.ts.map +1 -1
  75. package/build/component/constants.js +60 -26
  76. package/build/component/constants.js.map +1 -1
  77. package/build/component/coordinator/index.d.ts +2 -2
  78. package/build/component/coordinator/index.d.ts.map +1 -1
  79. package/build/component/coordinator/index.js +57 -72
  80. package/build/component/coordinator/index.js.map +1 -1
  81. package/build/component/debugHandler/appManifest.js +2 -1
  82. package/build/component/debugHandler/appManifest.js.map +1 -1
  83. package/build/component/debugHandler/error.d.ts +0 -1
  84. package/build/component/debugHandler/error.d.ts.map +1 -1
  85. package/build/component/debugHandler/error.js +1 -5
  86. package/build/component/debugHandler/error.js.map +1 -1
  87. package/build/component/developerPortalScaffoldUtils.d.ts +4 -1
  88. package/build/component/developerPortalScaffoldUtils.d.ts.map +1 -1
  89. package/build/component/developerPortalScaffoldUtils.js +5 -5
  90. package/build/component/developerPortalScaffoldUtils.js.map +1 -1
  91. package/build/component/driver/aad/create.d.ts.map +1 -1
  92. package/build/component/driver/aad/create.js +5 -14
  93. package/build/component/driver/aad/create.js.map +1 -1
  94. package/build/component/driver/aad/update.d.ts.map +1 -1
  95. package/build/component/driver/aad/update.js +3 -4
  96. package/build/component/driver/aad/update.js.map +1 -1
  97. package/build/component/driver/aad/utility/buildAadManifest.js +1 -1
  98. package/build/component/driver/aad/utility/buildAadManifest.js.map +1 -1
  99. package/build/component/driver/add/utility/constants.d.ts +1 -1
  100. package/build/component/driver/add/utility/constants.d.ts.map +1 -1
  101. package/build/component/driver/add/utility/constants.js +1 -1
  102. package/build/component/driver/add/utility/constants.js.map +1 -1
  103. package/build/component/driver/arm/deployImpl.d.ts.map +1 -1
  104. package/build/component/driver/arm/deployImpl.js +4 -1
  105. package/build/component/driver/arm/deployImpl.js.map +1 -1
  106. package/build/component/driver/arm/validator.d.ts.map +1 -1
  107. package/build/component/driver/arm/validator.js +0 -15
  108. package/build/component/driver/arm/validator.js.map +1 -1
  109. package/build/component/driver/botAadApp/create.d.ts.map +1 -1
  110. package/build/component/driver/botAadApp/create.js +5 -6
  111. package/build/component/driver/botAadApp/create.js.map +1 -1
  112. package/build/component/driver/botFramework/createOrUpdateBot.d.ts.map +1 -1
  113. package/build/component/driver/botFramework/createOrUpdateBot.js +1 -2
  114. package/build/component/driver/botFramework/createOrUpdateBot.js.map +1 -1
  115. package/build/component/driver/deploy/azure/azureStorageDeployDriver.d.ts.map +1 -1
  116. package/build/component/driver/deploy/azure/azureStorageDeployDriver.js +10 -17
  117. package/build/component/driver/deploy/azure/azureStorageDeployDriver.js.map +1 -1
  118. package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.d.ts.map +1 -1
  119. package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js +3 -3
  120. package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js.map +1 -1
  121. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.d.ts +1 -1
  122. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.d.ts.map +1 -1
  123. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js +13 -13
  124. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js.map +1 -1
  125. package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts +2 -3
  126. package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts.map +1 -1
  127. package/build/component/driver/deploy/azure/impl/azureDeployImpl.js +45 -13
  128. package/build/component/driver/deploy/azure/impl/azureDeployImpl.js.map +1 -1
  129. package/build/component/driver/deploy/azure/impl/baseDeployImpl.d.ts +1 -1
  130. package/build/component/driver/deploy/azure/impl/baseDeployImpl.d.ts.map +1 -1
  131. package/build/component/driver/deploy/azure/impl/baseDeployImpl.js +6 -0
  132. package/build/component/driver/deploy/azure/impl/baseDeployImpl.js.map +1 -1
  133. package/build/component/driver/devTool/constant.d.ts.map +1 -0
  134. package/build/component/driver/devTool/constant.js.map +1 -0
  135. package/build/component/driver/devTool/error/dotnetInstallationUserError.d.ts +5 -0
  136. package/build/component/driver/devTool/error/dotnetInstallationUserError.d.ts.map +1 -0
  137. package/build/component/driver/{prerequisite → devTool}/error/dotnetInstallationUserError.js +2 -1
  138. package/build/component/driver/devTool/error/dotnetInstallationUserError.js.map +1 -0
  139. package/build/component/driver/devTool/error/funcInstallationUserError.d.ts +5 -0
  140. package/build/component/driver/devTool/error/funcInstallationUserError.d.ts.map +1 -0
  141. package/build/component/driver/{prerequisite → devTool}/error/funcInstallationUserError.js +2 -1
  142. package/build/component/driver/devTool/error/funcInstallationUserError.js.map +1 -0
  143. package/build/component/driver/{prerequisite → devTool}/installDriver.d.ts +1 -1
  144. package/build/component/driver/devTool/installDriver.d.ts.map +1 -0
  145. package/build/component/driver/{prerequisite → devTool}/installDriver.js +46 -17
  146. package/build/component/driver/devTool/installDriver.js.map +1 -0
  147. package/build/component/driver/{prerequisite → devTool}/interfaces/InstallToolArgs.d.ts +5 -1
  148. package/build/component/driver/devTool/interfaces/InstallToolArgs.d.ts.map +1 -0
  149. package/build/component/driver/devTool/interfaces/InstallToolArgs.js.map +1 -0
  150. package/build/component/driver/error/outputEnvironmentVariableUndefinedError.d.ts +5 -0
  151. package/build/component/driver/error/outputEnvironmentVariableUndefinedError.d.ts.map +1 -0
  152. package/build/component/driver/error/outputEnvironmentVariableUndefinedError.js +22 -0
  153. package/build/component/driver/error/outputEnvironmentVariableUndefinedError.js.map +1 -0
  154. package/build/component/driver/file/createOrUpdateEnvironmentFile.d.ts.map +1 -1
  155. package/build/component/driver/file/createOrUpdateEnvironmentFile.js +1 -2
  156. package/build/component/driver/file/createOrUpdateEnvironmentFile.js.map +1 -1
  157. package/build/component/driver/file/createOrUpdateJsonFile.d.ts.map +1 -1
  158. package/build/component/driver/file/createOrUpdateJsonFile.js +1 -2
  159. package/build/component/driver/file/createOrUpdateJsonFile.js.map +1 -1
  160. package/build/component/driver/index.d.ts +1 -1
  161. package/build/component/driver/index.d.ts.map +1 -1
  162. package/build/component/driver/index.js +1 -1
  163. package/build/component/driver/index.js.map +1 -1
  164. package/build/component/driver/m365/acquire.d.ts.map +1 -1
  165. package/build/component/driver/m365/acquire.js +5 -6
  166. package/build/component/driver/m365/acquire.js.map +1 -1
  167. package/build/component/driver/middleware/addStartAndEndTelemetry.d.ts.map +1 -1
  168. package/build/component/driver/middleware/addStartAndEndTelemetry.js +14 -6
  169. package/build/component/driver/middleware/addStartAndEndTelemetry.js.map +1 -1
  170. package/build/component/driver/script/scriptDriver.js +4 -2
  171. package/build/component/driver/script/scriptDriver.js.map +1 -1
  172. package/build/component/driver/teamsApp/createAppPackage.d.ts +0 -1
  173. package/build/component/driver/teamsApp/createAppPackage.d.ts.map +1 -1
  174. package/build/component/driver/teamsApp/createAppPackage.js +1 -11
  175. package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
  176. package/build/component/driver/teamsApp/interfaces/ValidateManifestArgs.d.ts +5 -0
  177. package/build/component/driver/teamsApp/interfaces/ValidateManifestArgs.d.ts.map +1 -1
  178. package/build/component/driver/teamsApp/validate.d.ts +0 -1
  179. package/build/component/driver/teamsApp/validate.d.ts.map +1 -1
  180. package/build/component/driver/teamsApp/validate.js +54 -20
  181. package/build/component/driver/teamsApp/validate.js.map +1 -1
  182. package/build/component/driver/teamsApp/validateAppPackage.d.ts.map +1 -1
  183. package/build/component/driver/teamsApp/validateAppPackage.js +80 -13
  184. package/build/component/driver/teamsApp/validateAppPackage.js.map +1 -1
  185. package/build/component/driver/util/wrapUtil.js +1 -1
  186. package/build/component/driver/util/wrapUtil.js.map +1 -1
  187. package/build/component/error/deployError.d.ts +0 -17
  188. package/build/component/error/deployError.d.ts.map +1 -1
  189. package/build/component/error/deployError.js +0 -80
  190. package/build/component/error/deployError.js.map +1 -1
  191. package/build/component/feature/apiconnector/errors.d.ts +0 -4
  192. package/build/component/feature/apiconnector/errors.d.ts.map +1 -1
  193. package/build/component/feature/apiconnector/errors.js +12 -16
  194. package/build/component/feature/apiconnector/errors.js.map +1 -1
  195. package/build/component/feature/bot/bot.js +8 -8
  196. package/build/component/feature/bot/bot.js.map +1 -1
  197. package/build/component/feature/bot/question.d.ts +6 -6
  198. package/build/component/feature/bot/question.d.ts.map +1 -1
  199. package/build/component/feature/bot/question.js +69 -38
  200. package/build/component/feature/bot/question.js.map +1 -1
  201. package/build/component/generator/constant.d.ts +2 -0
  202. package/build/component/generator/constant.d.ts.map +1 -1
  203. package/build/component/generator/constant.js +3 -1
  204. package/build/component/generator/constant.js.map +1 -1
  205. package/build/component/generator/error.d.ts +9 -0
  206. package/build/component/generator/error.d.ts.map +1 -1
  207. package/build/component/generator/error.js +19 -1
  208. package/build/component/generator/error.js.map +1 -1
  209. package/build/component/generator/generator.d.ts +1 -1
  210. package/build/component/generator/generator.d.ts.map +1 -1
  211. package/build/component/generator/generator.js +25 -8
  212. package/build/component/generator/generator.js.map +1 -1
  213. package/build/component/generator/generatorAction.d.ts +5 -2
  214. package/build/component/generator/generatorAction.d.ts.map +1 -1
  215. package/build/component/generator/generatorAction.js +20 -10
  216. package/build/component/generator/generatorAction.js.map +1 -1
  217. package/build/component/generator/officeAddin/question.d.ts.map +1 -1
  218. package/build/component/generator/officeAddin/question.js +3 -3
  219. package/build/component/generator/officeAddin/question.js.map +1 -1
  220. package/build/component/generator/utils.d.ts +2 -0
  221. package/build/component/generator/utils.d.ts.map +1 -1
  222. package/build/component/generator/utils.js +64 -2
  223. package/build/component/generator/utils.js.map +1 -1
  224. package/build/component/messages.d.ts +3 -2
  225. package/build/component/messages.d.ts.map +1 -1
  226. package/build/component/messages.js +3 -2
  227. package/build/component/messages.js.map +1 -1
  228. package/build/component/question.d.ts +1 -0
  229. package/build/component/question.d.ts.map +1 -1
  230. package/build/component/question.js +15 -11
  231. package/build/component/question.js.map +1 -1
  232. package/build/component/resource/appManifest/appManifest.d.ts.map +1 -1
  233. package/build/component/resource/appManifest/appManifest.js +3 -4
  234. package/build/component/resource/appManifest/appManifest.js.map +1 -1
  235. package/build/component/resource/appManifest/appStudio.d.ts.map +1 -1
  236. package/build/component/resource/appManifest/appStudio.js +8 -12
  237. package/build/component/resource/appManifest/appStudio.js.map +1 -1
  238. package/build/component/resource/appManifest/constants.d.ts +1 -0
  239. package/build/component/resource/appManifest/constants.d.ts.map +1 -1
  240. package/build/component/resource/appManifest/constants.js +1 -0
  241. package/build/component/resource/appManifest/constants.js.map +1 -1
  242. package/build/component/resource/appManifest/errors.d.ts +0 -4
  243. package/build/component/resource/appManifest/errors.d.ts.map +1 -1
  244. package/build/component/resource/appManifest/errors.js +0 -7
  245. package/build/component/resource/appManifest/errors.js.map +1 -1
  246. package/build/component/resource/appManifest/utils/ManifestUtils.d.ts +2 -1
  247. package/build/component/resource/appManifest/utils/ManifestUtils.d.ts.map +1 -1
  248. package/build/component/resource/appManifest/utils/ManifestUtils.js +9 -14
  249. package/build/component/resource/appManifest/utils/ManifestUtils.js.map +1 -1
  250. package/build/component/resource/appManifest/utils/telemetry.d.ts +2 -0
  251. package/build/component/resource/appManifest/utils/telemetry.d.ts.map +1 -1
  252. package/build/component/resource/appManifest/utils/telemetry.js +2 -0
  253. package/build/component/resource/appManifest/utils/telemetry.js.map +1 -1
  254. package/build/component/resource/appManifest/utils/utils.d.ts.map +1 -1
  255. package/build/component/resource/appManifest/utils/utils.js +5 -1
  256. package/build/component/resource/appManifest/utils/utils.js.map +1 -1
  257. package/build/component/resource/azureSql/errors.js +28 -28
  258. package/build/component/resource/azureSql/errors.js.map +1 -1
  259. package/build/component/resource/azureStorage/configs.d.ts +1 -1
  260. package/build/component/resource/spfx/utils/question-helper.js +1 -1
  261. package/build/component/resource/spfx/utils/question-helper.js.map +1 -1
  262. package/build/component/utils/ResourceGroupHelper.d.ts +1 -6
  263. package/build/component/utils/ResourceGroupHelper.d.ts.map +1 -1
  264. package/build/component/utils/ResourceGroupHelper.js +65 -131
  265. package/build/component/utils/ResourceGroupHelper.js.map +1 -1
  266. package/build/component/utils/azureSdkErrorHandler.d.ts +2 -1
  267. package/build/component/utils/azureSdkErrorHandler.d.ts.map +1 -1
  268. package/build/component/utils/azureSdkErrorHandler.js.map +1 -1
  269. package/build/component/utils/depsChecker/bicepChecker.d.ts.map +1 -1
  270. package/build/component/utils/depsChecker/bicepChecker.js +4 -7
  271. package/build/component/utils/depsChecker/bicepChecker.js.map +1 -1
  272. package/build/component/utils/envUtil.d.ts.map +1 -1
  273. package/build/component/utils/envUtil.js +5 -8
  274. package/build/component/utils/envUtil.js.map +1 -1
  275. package/build/component/utils/pathUtils.js +2 -2
  276. package/build/component/utils/pathUtils.js.map +1 -1
  277. package/build/component/utils/settingsUtil.js +3 -3
  278. package/build/component/utils/settingsUtil.js.map +1 -1
  279. package/build/core/FxCore.d.ts +89 -31
  280. package/build/core/FxCore.d.ts.map +1 -1
  281. package/build/core/FxCore.js +144 -607
  282. package/build/core/FxCore.js.map +1 -1
  283. package/build/core/FxCoreImplementV3.d.ts +12 -3
  284. package/build/core/FxCoreImplementV3.d.ts.map +1 -1
  285. package/build/core/FxCoreImplementV3.js +88 -31
  286. package/build/core/FxCoreImplementV3.js.map +1 -1
  287. package/build/core/environment.d.ts.map +1 -1
  288. package/build/core/environment.js +2 -13
  289. package/build/core/environment.js.map +1 -1
  290. package/build/core/error.d.ts +1 -13
  291. package/build/core/error.d.ts.map +1 -1
  292. package/build/core/error.js +1 -57
  293. package/build/core/error.js.map +1 -1
  294. package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
  295. package/build/core/middleware/concurrentLocker.js +3 -10
  296. package/build/core/middleware/concurrentLocker.js.map +1 -1
  297. package/build/core/middleware/envInfoLoaderV3.d.ts +1 -10
  298. package/build/core/middleware/envInfoLoaderV3.d.ts.map +1 -1
  299. package/build/core/middleware/envInfoLoaderV3.js +1 -207
  300. package/build/core/middleware/envInfoLoaderV3.js.map +1 -1
  301. package/build/core/middleware/projectMigratorV3.d.ts +3 -1
  302. package/build/core/middleware/projectMigratorV3.d.ts.map +1 -1
  303. package/build/core/middleware/projectMigratorV3.js +81 -35
  304. package/build/core/middleware/projectMigratorV3.js.map +1 -1
  305. package/build/core/middleware/questionModel.d.ts +0 -1
  306. package/build/core/middleware/questionModel.d.ts.map +1 -1
  307. package/build/core/middleware/questionModel.js +110 -32
  308. package/build/core/middleware/questionModel.js.map +1 -1
  309. package/build/core/middleware/utils/MigrationUtils.d.ts.map +1 -1
  310. package/build/core/middleware/utils/MigrationUtils.js +1 -0
  311. package/build/core/middleware/utils/MigrationUtils.js.map +1 -1
  312. package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts +1 -1
  313. package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts.map +1 -1
  314. package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts +2 -0
  315. package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts.map +1 -1
  316. package/build/core/middleware/utils/debug/debugV3MigrationUtils.js +12 -8
  317. package/build/core/middleware/utils/debug/debugV3MigrationUtils.js.map +1 -1
  318. package/build/core/middleware/utils/debug/taskMigrator.d.ts +1 -0
  319. package/build/core/middleware/utils/debug/taskMigrator.d.ts.map +1 -1
  320. package/build/core/middleware/utils/debug/taskMigrator.js +134 -37
  321. package/build/core/middleware/utils/debug/taskMigrator.js.map +1 -1
  322. package/build/core/middleware/utils/migrationContext.d.ts +1 -0
  323. package/build/core/middleware/utils/migrationContext.d.ts.map +1 -1
  324. package/build/core/middleware/utils/migrationContext.js +1 -0
  325. package/build/core/middleware/utils/migrationContext.js.map +1 -1
  326. package/build/core/middleware/utils/v3MigrationUtils.d.ts +9 -1
  327. package/build/core/middleware/utils/v3MigrationUtils.d.ts.map +1 -1
  328. package/build/core/middleware/utils/v3MigrationUtils.js +49 -18
  329. package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
  330. package/build/core/question.d.ts +10 -3
  331. package/build/core/question.d.ts.map +1 -1
  332. package/build/core/question.js +181 -90
  333. package/build/core/question.js.map +1 -1
  334. package/build/core/types.d.ts +3 -3
  335. package/build/core/types.d.ts.map +1 -1
  336. package/build/error/arm.d.ts +6 -0
  337. package/build/error/arm.d.ts.map +1 -1
  338. package/build/error/arm.js +17 -1
  339. package/build/error/arm.js.map +1 -1
  340. package/build/error/azure.d.ts +30 -0
  341. package/build/error/azure.d.ts.map +1 -1
  342. package/build/error/azure.js +81 -1
  343. package/build/error/azure.js.map +1 -1
  344. package/build/error/common.d.ts +14 -2
  345. package/build/error/common.d.ts.map +1 -1
  346. package/build/error/common.js +59 -11
  347. package/build/error/common.js.map +1 -1
  348. package/build/error/deploy.d.ts +28 -0
  349. package/build/error/deploy.d.ts.map +1 -1
  350. package/build/error/deploy.js +100 -1
  351. package/build/error/deploy.js.map +1 -1
  352. package/build/error/script.d.ts +14 -0
  353. package/build/error/script.d.ts.map +1 -0
  354. package/build/error/script.js +38 -0
  355. package/build/error/script.js.map +1 -0
  356. package/build/error/upgrade.d.ts +5 -0
  357. package/build/error/upgrade.d.ts.map +1 -0
  358. package/build/error/upgrade.js +16 -0
  359. package/build/error/upgrade.js.map +1 -0
  360. package/build/error/yml.d.ts +1 -1
  361. package/build/error/yml.d.ts.map +1 -1
  362. package/build/error/yml.js +5 -5
  363. package/build/error/yml.js.map +1 -1
  364. package/package.json +13 -8
  365. package/resource/package.nls.cs.json +307 -366
  366. package/resource/package.nls.de.json +307 -366
  367. package/resource/package.nls.es.json +307 -366
  368. package/resource/package.nls.fr.json +307 -366
  369. package/resource/package.nls.it.json +307 -366
  370. package/resource/package.nls.ja.json +307 -366
  371. package/resource/package.nls.json +118 -112
  372. package/resource/package.nls.ko.json +307 -366
  373. package/resource/package.nls.pl.json +307 -366
  374. package/resource/package.nls.pt-BR.json +307 -366
  375. package/resource/package.nls.ru.json +307 -366
  376. package/resource/package.nls.tr.json +307 -366
  377. package/resource/package.nls.zh-Hans.json +307 -366
  378. package/resource/package.nls.zh-Hant.json +307 -366
  379. package/resource/yaml.schema.json +33 -12
  380. package/templates/core/v3Migration/csharp.app.local.yml +13 -20
  381. package/templates/core/v3Migration/csharp.app.yml +20 -9
  382. package/templates/core/v3Migration/js.ts.app.local.yml +105 -53
  383. package/templates/core/v3Migration/js.ts.app.yml +149 -54
  384. package/templates/core/v3Migration/spfx.app.yml +61 -17
  385. package/templates/core/v3Migration/upgradeReport.md +4 -2
  386. package/templates/fallback/common.zip +0 -0
  387. package/templates/fallback/csharp.zip +0 -0
  388. package/templates/fallback/js.zip +0 -0
  389. package/templates/fallback/ts.zip +0 -0
  390. package/templates/plugins/resource/aad/auth/V3/Bot/SSO/SsoOperations.cs +23 -8
  391. package/templates/plugins/resource/aad/auth/V3/Tab/GetUserProfile.razor +2 -1
  392. package/build/component/driver/aad/error/invalidParameterUserError.d.ts +0 -5
  393. package/build/component/driver/aad/error/invalidParameterUserError.d.ts.map +0 -1
  394. package/build/component/driver/aad/error/invalidParameterUserError.js +0 -29
  395. package/build/component/driver/aad/error/invalidParameterUserError.js.map +0 -1
  396. package/build/component/driver/aad/error/unhandledError.d.ts +0 -8
  397. package/build/component/driver/aad/error/unhandledError.d.ts.map +0 -1
  398. package/build/component/driver/aad/error/unhandledError.js +0 -33
  399. package/build/component/driver/aad/error/unhandledError.js.map +0 -1
  400. package/build/component/driver/botAadApp/error/invalidParameterUserError.d.ts +0 -5
  401. package/build/component/driver/botAadApp/error/invalidParameterUserError.d.ts.map +0 -1
  402. package/build/component/driver/botAadApp/error/invalidParameterUserError.js +0 -30
  403. package/build/component/driver/botAadApp/error/invalidParameterUserError.js.map +0 -1
  404. package/build/component/driver/botAadApp/error/unhandledError.d.ts +0 -8
  405. package/build/component/driver/botAadApp/error/unhandledError.d.ts.map +0 -1
  406. package/build/component/driver/botAadApp/error/unhandledError.js +0 -33
  407. package/build/component/driver/botAadApp/error/unhandledError.js.map +0 -1
  408. package/build/component/driver/botFramework/error/unhandledError.d.ts +0 -5
  409. package/build/component/driver/botFramework/error/unhandledError.d.ts.map +0 -1
  410. package/build/component/driver/botFramework/error/unhandledError.js +0 -25
  411. package/build/component/driver/botFramework/error/unhandledError.js.map +0 -1
  412. package/build/component/driver/file/error/unhandledError.d.ts +0 -5
  413. package/build/component/driver/file/error/unhandledError.d.ts.map +0 -1
  414. package/build/component/driver/file/error/unhandledError.js +0 -25
  415. package/build/component/driver/file/error/unhandledError.js.map +0 -1
  416. package/build/component/driver/m365/error/FileNotFoundUserError.d.ts +0 -5
  417. package/build/component/driver/m365/error/FileNotFoundUserError.d.ts.map +0 -1
  418. package/build/component/driver/m365/error/FileNotFoundUserError.js +0 -22
  419. package/build/component/driver/m365/error/FileNotFoundUserError.js.map +0 -1
  420. package/build/component/driver/m365/error/unhandledError.d.ts +0 -5
  421. package/build/component/driver/m365/error/unhandledError.d.ts.map +0 -1
  422. package/build/component/driver/m365/error/unhandledError.js +0 -25
  423. package/build/component/driver/m365/error/unhandledError.js.map +0 -1
  424. package/build/component/driver/prerequisite/constant.d.ts.map +0 -1
  425. package/build/component/driver/prerequisite/constant.js.map +0 -1
  426. package/build/component/driver/prerequisite/error/dotnetInstallationUserError.d.ts +0 -5
  427. package/build/component/driver/prerequisite/error/dotnetInstallationUserError.d.ts.map +0 -1
  428. package/build/component/driver/prerequisite/error/dotnetInstallationUserError.js.map +0 -1
  429. package/build/component/driver/prerequisite/error/funcInstallationUserError.d.ts +0 -5
  430. package/build/component/driver/prerequisite/error/funcInstallationUserError.d.ts.map +0 -1
  431. package/build/component/driver/prerequisite/error/funcInstallationUserError.js.map +0 -1
  432. package/build/component/driver/prerequisite/installDriver.d.ts.map +0 -1
  433. package/build/component/driver/prerequisite/installDriver.js.map +0 -1
  434. package/build/component/driver/prerequisite/interfaces/InstallToolArgs.d.ts.map +0 -1
  435. package/build/component/driver/prerequisite/interfaces/InstallToolArgs.js.map +0 -1
  436. package/build/core/middleware/envInfoWriter.d.ts +0 -8
  437. package/build/core/middleware/envInfoWriter.d.ts.map +0 -1
  438. package/build/core/middleware/envInfoWriter.js +0 -76
  439. package/build/core/middleware/envInfoWriter.js.map +0 -1
  440. package/build/core/middleware/envInfoWriterV3.d.ts +0 -6
  441. package/build/core/middleware/envInfoWriterV3.d.ts.map +0 -1
  442. package/build/core/middleware/envInfoWriterV3.js +0 -67
  443. package/build/core/middleware/envInfoWriterV3.js.map +0 -1
  444. package/build/core/middleware/projectSettingsWriter.d.ts +0 -6
  445. package/build/core/middleware/projectSettingsWriter.d.ts.map +0 -1
  446. package/build/core/middleware/projectSettingsWriter.js +0 -52
  447. package/build/core/middleware/projectSettingsWriter.js.map +0 -1
  448. /package/build/component/driver/{prerequisite → devTool}/constant.d.ts +0 -0
  449. /package/build/component/driver/{prerequisite → devTool}/constant.js +0 -0
  450. /package/build/component/driver/{prerequisite → devTool}/interfaces/InstallToolArgs.js +0 -0
@@ -2,415 +2,328 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT license.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.isFuncVersionSupport = exports.mapToFuncToolsVersion = exports.FuncToolChecker = exports.FuncMajorVersion = void 0;
5
+ exports.isFuncVersionSupport = exports.mapToFuncToolsVersion = exports.FuncToolChecker = void 0;
6
6
  const tslib_1 = require("tslib");
7
+ /**
8
+ * @author Xiaofu Huang <xiaofhua@microsoft.com>
9
+ */
7
10
  const fs = tslib_1.__importStar(require("fs-extra"));
8
- const path = tslib_1.__importStar(require("path"));
9
11
  const os = tslib_1.__importStar(require("os"));
12
+ const path = tslib_1.__importStar(require("path"));
13
+ const semver_1 = tslib_1.__importDefault(require("semver"));
14
+ const uuid = tslib_1.__importStar(require("uuid"));
10
15
  const teamsfx_api_1 = require("@microsoft/teamsfx-api");
16
+ const localizeUtils_1 = require("../../localizeUtils");
11
17
  const helpLink_1 = require("../constant/helpLink");
12
- const progressIndicator_1 = require("../util/progressIndicator");
18
+ const message_1 = require("../constant/message");
19
+ const depsChecker_1 = require("../depsChecker");
13
20
  const depsError_1 = require("../depsError");
14
21
  const cpUtils_1 = require("../util/cpUtils");
22
+ const fileHelper_1 = require("../util/fileHelper");
15
23
  const system_1 = require("../util/system");
16
- const telemetry_1 = require("../constant/telemetry");
17
- const depsChecker_1 = require("../depsChecker");
18
- const message_1 = require("../constant/message");
19
24
  const nodeChecker_1 = require("./nodeChecker");
20
- const localizeUtils_1 = require("../../localizeUtils");
21
- var FuncMajorVersion;
22
- (function (FuncMajorVersion) {
23
- FuncMajorVersion["v1"] = "1";
24
- FuncMajorVersion["v2"] = "2";
25
- FuncMajorVersion["v3"] = "3";
26
- FuncMajorVersion["v4"] = "4";
27
- })(FuncMajorVersion = exports.FuncMajorVersion || (exports.FuncMajorVersion = {}));
28
- const FuncNodeVersionWhiteList = {
29
- // func-core-tools version
30
- "3": {
31
- "10": true,
32
- "12": true,
33
- "14": true,
34
- },
35
- "4": {
36
- "14": true,
37
- "16": true,
38
- "18": true,
39
- },
40
- };
41
- const RecommendedNodeVersion = "16";
42
- const MinNode18FuncVersion = {
43
- majorVersion: FuncMajorVersion.v4,
44
- minorVersion: 0,
45
- patchVersion: 4670,
25
+ const telemetry_1 = require("../constant/telemetry");
26
+ const nodeFuncVersionRangeMapping = {
27
+ "12": "3",
28
+ "14": "3 || 4",
29
+ "16": ">=4",
30
+ "18": ">=4.0.4670",
46
31
  };
47
32
  const funcPackageName = "azure-functions-core-tools";
48
33
  const funcToolName = "Azure Functions Core Tools";
49
- const installVersion = FuncMajorVersion.v4;
50
- const supportedVersions = [FuncMajorVersion.v4];
51
- const displayFuncName = `${funcToolName} (v${FuncMajorVersion.v4})`;
52
34
  const timeout = 5 * 60 * 1000;
53
35
  class FuncToolChecker {
54
36
  constructor(logger, telemetry) {
55
- this._logger = logger;
56
- this._telemetry = telemetry;
37
+ this.telemetryProperties = {};
57
38
  }
58
- async getDepsInfo(isPortableFuncInstalled, isGlobalFuncInstalled, error) {
39
+ async getDepsInfo(funcVersion, binFolder, error) {
40
+ var _a;
59
41
  return Promise.resolve({
60
42
  name: funcToolName,
61
43
  type: depsChecker_1.DepsType.FuncCoreTools,
62
- isInstalled: isPortableFuncInstalled || isGlobalFuncInstalled,
63
- command: await this.command(isPortableFuncInstalled, isGlobalFuncInstalled),
44
+ isInstalled: !!funcVersion,
45
+ command: "func",
64
46
  details: {
65
47
  isLinuxSupported: false,
66
- installVersion: installVersion,
67
- supportedVersions: supportedVersions,
68
- binFolders: isPortableFuncInstalled ? this.getPortableFuncBinFolders() : undefined,
48
+ installVersion: (_a = funcVersion === null || funcVersion === void 0 ? void 0 : funcVersion.versionStr) !== null && _a !== void 0 ? _a : undefined,
49
+ supportedVersions: [],
50
+ binFolders: binFolder ? [binFolder] : undefined,
69
51
  },
52
+ telemetryProperties: this.telemetryProperties,
70
53
  error: error,
71
54
  });
72
55
  }
73
- async resolve() {
56
+ async resolve(installOptions) {
74
57
  let installationInfo;
75
58
  try {
76
59
  const nodeVersion = await this.getNodeVersion();
77
- installationInfo = await this.getInstallationInfo({ nodeVersion: nodeVersion });
60
+ installationInfo = await this.getInstallationInfo(installOptions);
78
61
  if (!installationInfo.isInstalled) {
79
- await this.install(nodeVersion);
80
- installationInfo = await this.getInstallationInfo({ nodeVersion: nodeVersion });
81
- }
82
- if (!installationInfo.error && installationInfo.portableFunc.isInstalled) {
83
- const portableFuncNodeError = await this.checkPortableFuncAndNode(installationInfo.portableFunc, nodeVersion);
84
- if (portableFuncNodeError) {
85
- installationInfo.isInstalled = false;
86
- installationInfo.error = portableFuncNodeError;
87
- }
62
+ const symlinkDir = installOptions.symlinkDir
63
+ ? path.resolve(installOptions.projectPath, installOptions.symlinkDir)
64
+ : undefined;
65
+ installationInfo = await this.install(installOptions.version, symlinkDir);
88
66
  }
89
- if (!installationInfo.error) {
90
- const globalFuncNodeError = await this.checkGlobalFuncAndNode(installationInfo.globalFunc, nodeVersion);
91
- if (globalFuncNodeError) {
92
- installationInfo.error = globalFuncNodeError;
93
- if (!installationInfo.portableFunc.isInstalled &&
94
- installationInfo.globalFunc.isInstalled) {
95
- installationInfo.isInstalled = false;
96
- }
67
+ if (!installationInfo.error &&
68
+ installationInfo.isInstalled &&
69
+ installationInfo.details.installVersion) {
70
+ const expectedFuncNodeError = await this.checkExpectedFuncAndNode(installationInfo.details.installVersion, nodeVersion);
71
+ if (expectedFuncNodeError) {
72
+ installationInfo.error = expectedFuncNodeError;
97
73
  }
98
74
  }
75
+ return installationInfo;
99
76
  }
100
77
  catch (error) {
101
- await this._logger.printDetailLog();
102
- await this._logger.error(`${error.message}, error = '${error}'`);
103
78
  if (error instanceof depsError_1.DepsCheckerError) {
104
- return await this.getDepsInfo(false, false, error);
79
+ return await this.getDepsInfo(undefined, undefined, error);
105
80
  }
106
- return await this.getDepsInfo(false, false, new depsError_1.DepsCheckerError(error.message, helpLink_1.defaultHelpLink));
81
+ return await this.getDepsInfo(undefined, undefined, new depsError_1.DepsCheckerError(error.message, helpLink_1.v3DefaultHelpLink));
107
82
  }
108
- finally {
109
- this._logger.cleanup();
110
- }
111
- return installationInfo;
112
83
  }
113
84
  async getInstallationInfo(installOptions) {
114
- var _a, _b;
115
- const nodeVersion = (_a = installOptions === null || installOptions === void 0 ? void 0 : installOptions.nodeVersion) !== null && _a !== void 0 ? _a : (await this.getNodeVersion());
116
- const globalFunc = await this.checkGlobalFuncVersion(nodeVersion);
117
- const isGlobalFuncInstalled = globalFunc.isInstalled;
118
- const portableFunc = await this.checkPortableFuncVersion(nodeVersion);
119
- const isPortableFuncInstalled = portableFunc.isInstalled;
120
- if (isGlobalFuncInstalled) {
121
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.funcAlreadyInstalled, {
122
- "global-func-version": (_b = globalFunc.funcVersion) !== null && _b !== void 0 ? _b : "",
123
- });
124
- if (!isPortableFuncInstalled) {
125
- await this.cleanup();
85
+ const symlinkDir = installOptions.symlinkDir
86
+ ? path.resolve(installOptions.projectPath, installOptions.symlinkDir)
87
+ : undefined;
88
+ if (symlinkDir) {
89
+ const symlinkFuncRes = await this.checkFuncVersion(installOptions.version, symlinkDir, undefined);
90
+ if (symlinkFuncRes.isOk()) {
91
+ this.telemetryProperties[telemetry_1.TelemetryProperties.SymlinkFuncVersion] =
92
+ symlinkFuncRes.value.versionStr;
93
+ return await this.getDepsInfo(symlinkFuncRes.value, symlinkDir);
94
+ }
95
+ else {
96
+ this.telemetryProperties[telemetry_1.TelemetryProperties.SymlinkFuncVersionError] =
97
+ symlinkFuncRes.error.message;
98
+ await fileHelper_1.unlinkSymlink(symlinkDir);
99
+ }
100
+ }
101
+ const portableFunc = await this.checkPortableFuncVersion(installOptions.version);
102
+ if (portableFunc) {
103
+ this.telemetryProperties[telemetry_1.TelemetryProperties.SelectedPortableFuncVersion] =
104
+ portableFunc.funcVersion.versionStr;
105
+ if (symlinkDir) {
106
+ await fileHelper_1.createSymlink(portableFunc.binFolder, symlinkDir);
107
+ return await this.getDepsInfo(portableFunc.funcVersion, symlinkDir);
126
108
  }
109
+ return await this.getDepsInfo(portableFunc.funcVersion, portableFunc.binFolder);
127
110
  }
128
- if (isPortableFuncInstalled) {
129
- // avoid missing this event after first installation 60 days
130
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.funcInstallCompleted);
111
+ const globalFuncRes = await this.checkFuncVersion(installOptions.version, undefined, undefined);
112
+ if (globalFuncRes.isOk()) {
113
+ this.telemetryProperties[telemetry_1.TelemetryProperties.GlobalFuncVersion] =
114
+ globalFuncRes.value.versionStr;
115
+ return await this.getDepsInfo(globalFuncRes.value, undefined);
116
+ }
117
+ else {
118
+ this.telemetryProperties[telemetry_1.TelemetryProperties.GlobalFuncVersionError] =
119
+ globalFuncRes.error.message;
120
+ return await this.getDepsInfo(undefined, undefined);
131
121
  }
132
- const depsInfo = await this.getDepsInfo(isPortableFuncInstalled, isGlobalFuncInstalled);
133
- return Object.assign(depsInfo, { globalFunc: globalFunc, portableFunc: portableFunc });
134
122
  }
135
123
  async getNodeVersion() {
136
124
  var _a;
137
125
  const nodeVersion = (_a = (await nodeChecker_1.NodeChecker.getInstalledNodeVersion())) === null || _a === void 0 ? void 0 : _a.majorVersion;
138
126
  if (!nodeVersion) {
139
- throw new depsError_1.NodeNotFoundError(message_1.Messages.NodeNotFound()
140
- .split("@NodeVersion")
141
- .join(supportedVersions[supportedVersions.length - 1]), helpLink_1.nodeNotFoundHelpLink);
127
+ throw new depsError_1.NodeNotFoundError(message_1.Messages.NodeNotFound(), helpLink_1.v3NodeNotFoundHelpLink);
142
128
  }
143
129
  return nodeVersion;
144
130
  }
145
- async checkPortableFuncAndNode(portableFunc, nodeVersion) {
146
- var _a;
147
- if (portableFunc.funcVersion) {
148
- if (!((_a = FuncNodeVersionWhiteList[portableFunc.funcVersion.toString()]) === null || _a === void 0 ? void 0 : _a[nodeVersion])) {
149
- return new depsError_1.PortableFuncNodeNotMatchedError(message_1.Messages.portableFuncNodeNotMatched()
150
- .split("@FuncVersion")
151
- .join(`v${portableFunc.funcVersion}`)
152
- .split("@NodeVersion")
153
- .join(`v${nodeVersion}`)
154
- .split("@Link")
155
- .join(helpLink_1.nodeInstallationLink)
156
- .split("@RecommendedVersion")
157
- .join(`v${RecommendedNodeVersion}`), helpLink_1.functionDepsVersionsLink);
158
- }
131
+ async checkExpectedFuncAndNode(funcVersion, nodeVersion) {
132
+ const funcVersionRange = nodeFuncVersionRangeMapping[nodeVersion];
133
+ if (funcVersionRange && !semver_1.default.satisfies(funcVersion, funcVersionRange)) {
134
+ return new depsError_1.DepsCheckerError(message_1.Messages.portableFuncNodeNotMatched(nodeVersion, funcVersion), helpLink_1.v3DefaultHelpLink);
159
135
  }
160
136
  return undefined;
161
137
  }
162
- async checkGlobalFuncAndNode(globalFunc, nodeVersion) {
163
- var _a;
164
- if (globalFunc.funcVersion) {
165
- if (!((_a = FuncNodeVersionWhiteList[globalFunc.funcVersion.toString()]) === null || _a === void 0 ? void 0 : _a[nodeVersion])) {
166
- return new depsError_1.GlobalFuncNodeNotMatchedError(message_1.Messages.globalFuncNodeNotMatched()
167
- .split("@FuncVersion")
168
- .join(`v${globalFunc.funcVersion.toString()}`)
169
- .split("@NodeVersion")
170
- .join(`v${nodeVersion}`)
171
- .split("@link")
172
- .join(helpLink_1.functionDepsVersionsLink), helpLink_1.functionDepsVersionsLink);
138
+ async checkPortableFuncVersion(expectedFuncVersion) {
139
+ try {
140
+ const historyFuncBinFolder = FuncToolChecker.getPortableFuncBinFolder(undefined);
141
+ const historyFuncRes = await this.checkFuncVersion(expectedFuncVersion, historyFuncBinFolder, FuncToolChecker.getHistorySentinelPath());
142
+ if (historyFuncRes.isOk()) {
143
+ this.telemetryProperties[telemetry_1.TelemetryProperties.HistoryFuncVersion] =
144
+ historyFuncRes.value.versionStr;
145
+ }
146
+ else {
147
+ this.telemetryProperties[telemetry_1.TelemetryProperties.HistoryFuncVersionError] =
148
+ historyFuncRes.error.message;
149
+ }
150
+ const versioningFuncStatus = await this.getVersioningPortableFunc(expectedFuncVersion);
151
+ if (versioningFuncStatus &&
152
+ (historyFuncRes.isErr() ||
153
+ semver_1.default.gte(versioningFuncStatus.funcVersion.versionStr, historyFuncRes.value.versionStr))) {
154
+ return versioningFuncStatus;
155
+ }
156
+ else if (historyFuncRes.isOk()) {
157
+ return { funcVersion: historyFuncRes.value, binFolder: historyFuncBinFolder };
173
158
  }
174
159
  }
160
+ catch (error) {
161
+ // do nothing
162
+ }
175
163
  return undefined;
176
164
  }
177
- async checkPortableFuncVersion(nodeVersion) {
178
- let isVersionSupported = false, hasSentinel = false;
179
- let portableFuncVersion = null;
165
+ async checkFuncVersion(expectedFuncVersion, binFolder, sentinelPath) {
180
166
  try {
181
- portableFuncVersion = await this.queryFuncVersion(FuncToolChecker.getPortableFuncExecPath());
182
- isVersionSupported = isFuncVersionSupport(portableFuncVersion, nodeVersion);
183
- // to avoid "func -v" and "func new" work well, but "func start" fail.
184
- hasSentinel = await fs.pathExists(FuncToolChecker.getSentinelPath());
185
- if (system_1.isWindows() && isVersionSupported && hasSentinel) {
186
- await this.cleanupPortablePs1();
167
+ const funcVersion = await this.queryFuncVersion(binFolder);
168
+ // For portable func, avoid "func -v" and "func new" work well, but "func start" fail.
169
+ const hasSentinel = sentinelPath ? await fs.pathExists(sentinelPath) : true;
170
+ if (!hasSentinel) {
171
+ return teamsfx_api_1.err(new depsError_1.DepsCheckerError(message_1.Messages.noSentinelFile(), helpLink_1.v3DefaultHelpLink));
187
172
  }
173
+ const funcVersionSupport = isFuncVersionSupport(funcVersion, expectedFuncVersion);
174
+ if (!funcVersionSupport) {
175
+ return teamsfx_api_1.err(new depsError_1.DepsCheckerError(message_1.Messages.funcVersionNotMatch(funcVersion.versionStr, expectedFuncVersion), helpLink_1.v3DefaultHelpLink));
176
+ }
177
+ return teamsfx_api_1.ok(funcVersion);
188
178
  }
189
179
  catch (error) {
190
- // do nothing
191
- return {
192
- isInstalled: false,
193
- funcVersion: portableFuncVersion !== null ? portableFuncVersion.majorVersion : null,
194
- };
180
+ return teamsfx_api_1.err(new depsError_1.DepsCheckerError(error.message, helpLink_1.v3DefaultHelpLink));
195
181
  }
196
- return {
197
- isInstalled: isVersionSupported && hasSentinel,
198
- funcVersion: portableFuncVersion !== null ? portableFuncVersion.majorVersion : null,
199
- };
200
182
  }
201
- async checkGlobalFuncVersion(nodeVersion) {
202
- const globalFuncVersion = await this.queryGlobalFuncVersion();
203
- return {
204
- isInstalled: isFuncVersionSupport(globalFuncVersion, nodeVersion),
205
- funcVersion: globalFuncVersion !== null ? globalFuncVersion.majorVersion : null,
206
- };
183
+ async getVersioningPortableFunc(expectedFuncVersion) {
184
+ var _a;
185
+ const files = await fs.readdir(FuncToolChecker.getDefaultInstallPath(), {
186
+ withFileTypes: true,
187
+ });
188
+ const funcDictionaries = files
189
+ .filter((f) => f.isDirectory() && semver_1.default.valid(f.name))
190
+ .map((f) => f.name);
191
+ this.telemetryProperties[telemetry_1.TelemetryProperties.VersioningFuncVersions] =
192
+ JSON.stringify(funcDictionaries);
193
+ while (funcDictionaries.length > 0) {
194
+ const matchedVersion = semver_1.default.maxSatisfying(funcDictionaries, expectedFuncVersion);
195
+ if (!matchedVersion) {
196
+ return undefined;
197
+ }
198
+ const binFolder = FuncToolChecker.getPortableFuncBinFolder(matchedVersion);
199
+ const actualFuncRes = await this.checkFuncVersion(expectedFuncVersion, binFolder, FuncToolChecker.getVersioningSentinelPath(matchedVersion));
200
+ if (actualFuncRes.isOk() && actualFuncRes.value.versionStr === matchedVersion) {
201
+ return {
202
+ funcVersion: actualFuncRes.value,
203
+ binFolder: binFolder,
204
+ };
205
+ }
206
+ if (actualFuncRes.isErr()) {
207
+ this.telemetryProperties[telemetry_1.TelemetryProperties.VersioningFuncVersionError] =
208
+ ((_a = this.telemetryProperties[telemetry_1.TelemetryProperties.VersioningFuncVersionError]) !== null && _a !== void 0 ? _a : "") +
209
+ `[${matchedVersion}] ${actualFuncRes.error.message}`;
210
+ }
211
+ const matchedVersionIndex = funcDictionaries.indexOf(matchedVersion);
212
+ if (matchedVersionIndex < 0) {
213
+ return undefined;
214
+ }
215
+ funcDictionaries.splice(matchedVersionIndex, 1);
216
+ }
217
+ return undefined;
207
218
  }
208
- async install(nodeVersion) {
219
+ async install(expectedFuncVersion, symlinkDir) {
209
220
  if (system_1.isLinux()) {
210
- throw new depsError_1.LinuxNotSupportedError(message_1.Messages.linuxDepsNotFound().split("@SupportedPackages").join(displayFuncName), helpLink_1.defaultHelpLink);
221
+ throw new depsError_1.LinuxNotSupportedError(message_1.Messages.linuxDepsNotFound().split("@SupportedPackages").join(funcToolName), helpLink_1.v3DefaultHelpLink);
211
222
  }
212
223
  if (!(await this.hasNPM())) {
213
- this.handleNpmNotFound();
214
- }
215
- await this.cleanup();
216
- await this.installFunc();
217
- if (!(await this.validate(nodeVersion))) {
218
- await this.handleInstallFuncFailed();
219
- }
220
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.funcInstallCompleted);
221
- await this._logger.info(message_1.Messages.finishInstallFunctionCoreTool().replace("@NameVersion", displayFuncName));
222
- }
223
- async handleInstallFuncFailed() {
224
- await this.cleanup();
225
- this._telemetry.sendSystemErrorEvent(telemetry_1.DepsCheckerEvent.funcInstallError, telemetry_1.TelemtryMessages.failedToInstallFunc, message_1.Messages.failToValidateFuncCoreTool().replace("@NameVersion", displayFuncName));
226
- throw new depsError_1.DepsCheckerError(localizeUtils_1.getLocalizedString("error.common.InstallSoftwareError", displayFuncName), helpLink_1.defaultHelpLink);
227
- }
228
- async validate(nodeVersion) {
229
- let isVersionSupported = false;
230
- let hasSentinel = false;
231
- try {
232
- const portableFunc = await this.queryFuncVersion(FuncToolChecker.getPortableFuncExecPath());
233
- isVersionSupported = isFuncVersionSupport(portableFunc, nodeVersion);
234
- // to avoid "func -v" and "func new" work well, but "func start" fail.
235
- hasSentinel = await fs.pathExists(FuncToolChecker.getSentinelPath());
224
+ throw new depsError_1.DepsCheckerError(message_1.Messages.needInstallNpm(), helpLink_1.v3DefaultHelpLink);
236
225
  }
237
- catch (err) {
238
- this._telemetry.sendSystemErrorEvent(telemetry_1.DepsCheckerEvent.funcValidationError, telemetry_1.TelemtryMessages.failedToValidateFunc, err);
226
+ const tmpVersion = uuid.v4();
227
+ await this.installFunc(tmpVersion, expectedFuncVersion);
228
+ const funcVersionRes = await this.checkFuncVersion(expectedFuncVersion, FuncToolChecker.getPortableFuncBinFolder(tmpVersion), FuncToolChecker.getVersioningSentinelPath(tmpVersion));
229
+ if (funcVersionRes.isErr()) {
230
+ await this.cleanup(tmpVersion);
231
+ this.telemetryProperties[telemetry_1.TelemetryProperties.InstallFuncError] = funcVersionRes.error.message;
232
+ throw new depsError_1.DepsCheckerError(message_1.Messages.failToValidateFuncCoreTool() + " " + funcVersionRes.error.message, helpLink_1.v3DefaultHelpLink);
239
233
  }
240
- if (!isVersionSupported || !hasSentinel) {
241
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.funcValidationError, {
242
- "func-v": String(isVersionSupported),
243
- sentinel: String(hasSentinel),
244
- });
234
+ this.telemetryProperties[telemetry_1.TelemetryProperties.InstalledFuncVersion] =
235
+ funcVersionRes.value.versionStr;
236
+ await fileHelper_1.rename(FuncToolChecker.getFuncInstallPath(tmpVersion), FuncToolChecker.getFuncInstallPath(funcVersionRes.value.versionStr));
237
+ const binFolder = FuncToolChecker.getPortableFuncBinFolder(funcVersionRes.value.versionStr);
238
+ if (symlinkDir) {
239
+ await fileHelper_1.createSymlink(binFolder, symlinkDir);
240
+ return await this.getDepsInfo(funcVersionRes.value, symlinkDir);
245
241
  }
246
- return isVersionSupported && hasSentinel;
247
- }
248
- handleNpmNotFound() {
249
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.npmNotFound);
250
- throw new depsError_1.DepsCheckerError(message_1.Messages.needInstallFuncCoreTool().replace("@NameVersion", displayFuncName), helpLink_1.defaultHelpLink);
242
+ return await this.getDepsInfo(funcVersionRes.value, binFolder);
251
243
  }
252
244
  static getDefaultInstallPath() {
253
- return path.join(os.homedir(), `.${teamsfx_api_1.ConfigFolderName}`, "bin", "func");
245
+ return path.join(os.homedir(), `.${teamsfx_api_1.ConfigFolderName}`, "bin", "azfunc");
254
246
  }
255
- static getSentinelPath() {
256
- return path.join(os.homedir(), `.${teamsfx_api_1.ConfigFolderName}`, "func-sentinel");
247
+ static getFuncInstallPath(versionStr) {
248
+ return versionStr
249
+ ? path.join(this.getDefaultInstallPath(), versionStr)
250
+ : path.join(os.homedir(), `.${teamsfx_api_1.ConfigFolderName}`, "bin", "func");
257
251
  }
258
- static getPortableFuncExecPath() {
259
- return path.join(FuncToolChecker.getDefaultInstallPath(), "node_modules", "azure-functions-core-tools", "lib", "main.js");
252
+ static getVersioningSentinelPath(versionStr) {
253
+ return path.join(FuncToolChecker.getPortableFuncBinFolder(versionStr), "func-sentinel");
260
254
  }
261
- async command(isPortableFuncInstalled, isGlobalFuncInstalled) {
262
- if (isPortableFuncInstalled) {
263
- return `node "${FuncToolChecker.getPortableFuncExecPath()}"`;
264
- }
265
- if (isGlobalFuncInstalled) {
266
- return "func";
267
- }
268
- return "npx azure-functions-core-tools@3";
255
+ static getHistorySentinelPath() {
256
+ return path.join(os.homedir(), `.${teamsfx_api_1.ConfigFolderName}`, "func-sentinel");
269
257
  }
270
- getPortableFuncBinFolders() {
271
- return [
272
- FuncToolChecker.getDefaultInstallPath(),
273
- path.join(FuncToolChecker.getDefaultInstallPath(), "node_modules", ".bin"),
274
- ];
258
+ static getPortableFuncBinFolder(versionStr) {
259
+ return path.resolve(FuncToolChecker.getFuncInstallPath(versionStr), "node_modules", "azure-functions-core-tools", "bin");
275
260
  }
276
- async queryFuncVersion(path) {
277
- const output = await cpUtils_1.cpUtils.executeCommand(undefined, this._logger, { shell: true }, "node", `"${path}"`, "--version");
261
+ async queryFuncVersion(funcBinFolder) {
262
+ const execPath = funcBinFolder ? path.resolve(funcBinFolder, "func") : "func";
263
+ const output = await cpUtils_1.cpUtils.executeCommand(undefined, undefined,
264
+ // same as backend start, avoid powershell execution policy issue.
265
+ { shell: system_1.isWindows() ? "cmd.exe" : true }, execPath, "--version");
278
266
  return mapToFuncToolsVersion(output);
279
267
  }
280
- async queryGlobalFuncVersion() {
281
- try {
282
- const output = await cpUtils_1.cpUtils.executeCommand(undefined, this._logger,
283
- // same as backend start, avoid powershell execution policy issue.
284
- { shell: system_1.isWindows() ? "cmd.exe" : true }, "func", "--version");
285
- return mapToFuncToolsVersion(output);
286
- }
287
- catch (error) {
288
- return null;
289
- }
290
- }
291
268
  async hasNPM() {
292
269
  try {
293
- const npmVersion = await cpUtils_1.cpUtils.executeCommand(undefined, this._logger, { shell: true }, "npm", "--version");
294
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.npmAlreadyInstalled, {
295
- "npm-version": npmVersion,
296
- });
270
+ await cpUtils_1.cpUtils.executeCommand(undefined, undefined, { shell: true }, "npm", "--version");
297
271
  return true;
298
272
  }
299
273
  catch (error) {
300
- this._telemetry.sendEvent(telemetry_1.DepsCheckerEvent.npmNotFound);
301
274
  return false;
302
275
  }
303
276
  }
304
- async cleanup() {
277
+ async cleanup(tmpVersionStr) {
305
278
  try {
306
- await fs.emptyDir(FuncToolChecker.getDefaultInstallPath());
307
- await fs.remove(FuncToolChecker.getSentinelPath());
308
- }
309
- catch (err) {
310
- await this._logger.debug(`Failed to clean up path: ${FuncToolChecker.getDefaultInstallPath()}, error: ${err}`);
311
- }
312
- }
313
- async cleanupPortablePs1() {
314
- // delete func.ps1 from portable function
315
- for (const funcFolder of this.getPortableFuncBinFolders()) {
316
- const funcPath = path.join(funcFolder, "func.ps1");
317
- if (await fs.pathExists(funcPath)) {
318
- await this._logger.debug(`deleting func.ps1 from ${funcPath}`);
319
- await fs.remove(funcPath);
320
- }
279
+ await fs.remove(FuncToolChecker.getFuncInstallPath(tmpVersionStr));
321
280
  }
281
+ catch (_a) { }
322
282
  }
323
- async installFunc() {
324
- await this._telemetry.sendEventWithDuration(telemetry_1.DepsCheckerEvent.funcInstallScriptCompleted, async () => {
325
- await progressIndicator_1.runWithProgressIndicator(async () => await this.doInstallPortableFunc(FuncMajorVersion.v4), this._logger);
326
- });
327
- }
328
- async doInstallPortableFunc(version) {
329
- await this._logger.info(message_1.Messages.startInstallFunctionCoreTool().replace("@NameVersion", displayFuncName));
283
+ async installFunc(tmpVersion, expectedFuncVersion) {
330
284
  try {
331
- await cpUtils_1.cpUtils.executeCommand(undefined, this._logger, { timeout: timeout, shell: false }, this.getExecCommand("npm"), "install",
285
+ const tmpFolder = FuncToolChecker.getFuncInstallPath(tmpVersion);
286
+ await cpUtils_1.cpUtils.executeCommand(undefined, undefined, { timeout: timeout, shell: false }, this.getExecCommand("npm"), "install",
332
287
  // not use -f, to avoid npm@6 bug: exit code = 0, even if install fail
333
- `${funcPackageName}@${version}`, "--prefix", `${FuncToolChecker.getDefaultInstallPath()}`, "--no-audit");
334
- await fs.ensureFile(FuncToolChecker.getSentinelPath());
335
- if (system_1.isWindows()) {
336
- // delete func.ps1 if exists to workaround the powershell execution policy issue:
337
- // https://github.com/npm/cli/issues/470
338
- const funcPSScript = await this.getFuncPSScriptPath();
339
- if (await fs.pathExists(funcPSScript)) {
340
- await this._logger.debug(`deleting func.ps1 from ${funcPSScript}`);
341
- await fs.remove(funcPSScript);
342
- }
343
- await this.cleanupPortablePs1();
344
- }
288
+ `${funcPackageName}@${expectedFuncVersion}`, "--prefix", `${tmpFolder}`, "--no-audit");
289
+ await fs.ensureFile(FuncToolChecker.getVersioningSentinelPath(tmpVersion));
345
290
  }
346
291
  catch (error) {
347
- this._telemetry.sendSystemErrorEvent(telemetry_1.DepsCheckerEvent.funcInstallScriptError, telemetry_1.TelemtryMessages.failedToInstallFunc, error);
292
+ await this.cleanup(tmpVersion);
293
+ this.telemetryProperties[telemetry_1.TelemetryProperties.InstallFuncError] = error.message;
294
+ throw new depsError_1.DepsCheckerError(localizeUtils_1.getLocalizedString("error.common.InstallSoftwareError", funcToolName), helpLink_1.v3DefaultHelpLink);
348
295
  }
349
296
  }
350
297
  getExecCommand(command) {
351
298
  return system_1.isWindows() ? `${command}.cmd` : command;
352
299
  }
353
- async getFuncPSScriptPath() {
354
- try {
355
- const output = await cpUtils_1.cpUtils.executeCommand(undefined, this._logger, {
356
- shell: "cmd.exe",
357
- }, "where", "func");
358
- const funcPath = output.split(/\r?\n/)[0];
359
- const funcFolder = path.dirname(funcPath);
360
- return path.join(funcFolder, "func.ps1");
361
- }
362
- catch (_a) {
363
- // ignore error and regard func.ps1 as not found.
364
- return "";
365
- }
366
- }
367
300
  }
368
301
  exports.FuncToolChecker = FuncToolChecker;
369
302
  function mapToFuncToolsVersion(output) {
370
- var _a, _b, _c, _d, _e;
303
+ var _a, _b, _c, _d, _e, _f;
371
304
  const regex = /(?<major_version>\d+)\.(?<minor_version>\d+)\.(?<patch_version>\d+)/gm;
372
305
  const match = regex.exec(output);
373
306
  if (!match) {
374
- return null;
307
+ throw new depsError_1.DepsCheckerError(message_1.Messages.invalidFuncVersion(output), helpLink_1.v3DefaultHelpLink);
375
308
  }
376
- const majorVersionFunc = (majorVersion) => {
377
- switch (majorVersion) {
378
- case FuncMajorVersion.v1:
379
- return FuncMajorVersion.v1;
380
- case FuncMajorVersion.v2:
381
- return FuncMajorVersion.v2;
382
- case FuncMajorVersion.v3:
383
- return FuncMajorVersion.v3;
384
- case FuncMajorVersion.v4:
385
- return FuncMajorVersion.v4;
386
- default:
387
- return null;
388
- }
389
- };
390
- const majorVersion = majorVersionFunc((_a = match.groups) === null || _a === void 0 ? void 0 : _a.major_version);
391
- const minorVersion = Number.parseInt((_c = (_b = match.groups) === null || _b === void 0 ? void 0 : _b.minor_version) !== null && _c !== void 0 ? _c : "");
392
- const patchVersion = Number.parseInt((_e = (_d = match.groups) === null || _d === void 0 ? void 0 : _d.patch_version) !== null && _e !== void 0 ? _e : "");
393
- if (majorVersion == null || !Number.isInteger(minorVersion) || !Number.isInteger(patchVersion)) {
394
- return null;
309
+ const majorVersion = Number.parseInt((_b = (_a = match.groups) === null || _a === void 0 ? void 0 : _a.major_version) !== null && _b !== void 0 ? _b : "");
310
+ const minorVersion = Number.parseInt((_d = (_c = match.groups) === null || _c === void 0 ? void 0 : _c.minor_version) !== null && _d !== void 0 ? _d : "");
311
+ const patchVersion = Number.parseInt((_f = (_e = match.groups) === null || _e === void 0 ? void 0 : _e.patch_version) !== null && _f !== void 0 ? _f : "");
312
+ if (!Number.isInteger(majorVersion) ||
313
+ !Number.isInteger(minorVersion) ||
314
+ !Number.isInteger(patchVersion)) {
315
+ throw new depsError_1.DepsCheckerError(message_1.Messages.invalidFuncVersion(output), helpLink_1.v3DefaultHelpLink);
395
316
  }
396
317
  return {
397
318
  majorVersion: majorVersion,
398
319
  minorVersion: minorVersion,
399
320
  patchVersion: patchVersion,
321
+ versionStr: `${majorVersion}.${minorVersion}.${patchVersion}`,
400
322
  };
401
323
  }
402
324
  exports.mapToFuncToolsVersion = mapToFuncToolsVersion;
403
- function isFuncVersionSupport(funcVersion, nodeVersion) {
404
- if (Number.parseInt(nodeVersion) >= 18) {
405
- return (funcVersion !== null &&
406
- funcVersion.majorVersion == MinNode18FuncVersion.majorVersion &&
407
- (funcVersion.minorVersion > MinNode18FuncVersion.minorVersion ||
408
- (funcVersion.minorVersion === MinNode18FuncVersion.minorVersion &&
409
- funcVersion.patchVersion >= MinNode18FuncVersion.patchVersion)));
410
- }
411
- else {
412
- return funcVersion !== null && supportedVersions.includes(funcVersion.majorVersion);
413
- }
325
+ function isFuncVersionSupport(actualFuncVersion, expectedFuncVersion) {
326
+ return semver_1.default.satisfies(actualFuncVersion.versionStr, expectedFuncVersion);
414
327
  }
415
328
  exports.isFuncVersionSupport = isFuncVersionSupport;
416
329
  //# sourceMappingURL=funcToolChecker.js.map