@microsoft/teamsfx-core 3.0.15 → 3.0.16-beta.2026073102.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 (370) hide show
  1. package/build/client/aadAppClient.d.ts.map +1 -1
  2. package/build/client/aadAppClient.js +6 -6
  3. package/build/client/aadAppClient.js.map +1 -1
  4. package/build/common/featureFlags.d.ts +0 -5
  5. package/build/common/featureFlags.d.ts.map +1 -1
  6. package/build/common/featureFlags.js +0 -5
  7. package/build/common/featureFlags.js.map +1 -1
  8. package/build/common/httpProxy.d.ts +21 -0
  9. package/build/common/httpProxy.d.ts.map +1 -0
  10. package/build/common/httpProxy.js +117 -0
  11. package/build/common/httpProxy.js.map +1 -0
  12. package/build/common/mcpToolFetcher.d.ts +90 -0
  13. package/build/common/mcpToolFetcher.d.ts.map +1 -0
  14. package/build/common/mcpToolFetcher.js +404 -0
  15. package/build/common/mcpToolFetcher.js.map +1 -0
  16. package/build/common/odrProvider.d.ts +43 -0
  17. package/build/common/odrProvider.d.ts.map +1 -0
  18. package/build/common/odrProvider.js +154 -0
  19. package/build/common/odrProvider.js.map +1 -0
  20. package/build/common/openApiParserOptions.d.ts +3 -0
  21. package/build/common/openApiParserOptions.d.ts.map +1 -0
  22. package/build/common/openApiParserOptions.js +61 -0
  23. package/build/common/openApiParserOptions.js.map +1 -0
  24. package/build/common/secretmasker/dict.d.ts.map +1 -1
  25. package/build/common/secretmasker/dict.js +5 -2
  26. package/build/common/secretmasker/dict.js.map +1 -1
  27. package/build/common/secretmasker/feature.js.map +1 -1
  28. package/build/common/templates-config.json +5 -5
  29. package/build/component/coordinator/index.d.ts.map +1 -1
  30. package/build/component/coordinator/index.js.map +1 -1
  31. package/build/component/deps-checker/internal/dotnetChecker.js.map +1 -1
  32. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.d.ts +3 -0
  33. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.d.ts.map +1 -1
  34. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js +38 -3
  35. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js.map +1 -1
  36. package/build/component/driver/script/scriptDriver.js +1 -1
  37. package/build/component/driver/script/scriptDriver.js.map +1 -1
  38. package/build/component/driver/teamsApp/create.d.ts.map +1 -1
  39. package/build/component/driver/teamsApp/create.js +3 -3
  40. package/build/component/driver/teamsApp/create.js.map +1 -1
  41. package/build/component/driver/teamsApp/createAppPackage.d.ts +1 -0
  42. package/build/component/driver/teamsApp/createAppPackage.d.ts.map +1 -1
  43. package/build/component/driver/teamsApp/createAppPackage.js +23 -0
  44. package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
  45. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -1
  46. package/build/component/generator/declarativeAgent/helper.d.ts.map +1 -1
  47. package/build/component/generator/declarativeAgent/helper.js +25 -2
  48. package/build/component/generator/declarativeAgent/helper.js.map +1 -1
  49. package/build/component/generator/generatorAction.d.ts +3 -1
  50. package/build/component/generator/generatorAction.d.ts.map +1 -1
  51. package/build/component/generator/generatorAction.js.map +1 -1
  52. package/build/component/generator/officeAddin/generator.d.ts +1 -0
  53. package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
  54. package/build/component/generator/officeAddin/generator.js +109 -2
  55. package/build/component/generator/officeAddin/generator.js.map +1 -1
  56. package/build/component/generator/openApiSpec/helper.d.ts +2 -3
  57. package/build/component/generator/openApiSpec/helper.d.ts.map +1 -1
  58. package/build/component/generator/openApiSpec/helper.js +19 -57
  59. package/build/component/generator/openApiSpec/helper.js.map +1 -1
  60. package/build/component/generator/templateHelper.d.ts +10 -2
  61. package/build/component/generator/templateHelper.d.ts.map +1 -1
  62. package/build/component/generator/templateHelper.js +16 -3
  63. package/build/component/generator/templateHelper.js.map +1 -1
  64. package/build/component/generator/templates/metadata/index.d.ts +15 -0
  65. package/build/component/generator/templates/metadata/index.d.ts.map +1 -1
  66. package/build/component/generator/templates/metadata/index.js +39 -0
  67. package/build/component/generator/templates/metadata/index.js.map +1 -1
  68. package/build/component/generator/templates/templateNames.d.ts +2 -0
  69. package/build/component/generator/templates/templateNames.d.ts.map +1 -1
  70. package/build/component/generator/templates/templateNames.js +2 -0
  71. package/build/component/generator/templates/templateNames.js.map +1 -1
  72. package/build/component/generator/utils.d.ts.map +1 -1
  73. package/build/component/generator/utils.js +6 -0
  74. package/build/component/generator/utils.js.map +1 -1
  75. package/build/component/generator/v4TemplateBridge.d.ts +4 -1
  76. package/build/component/generator/v4TemplateBridge.d.ts.map +1 -1
  77. package/build/component/generator/v4TemplateBridge.js +19 -3
  78. package/build/component/generator/v4TemplateBridge.js.map +1 -1
  79. package/build/component/utils/envUtil.d.ts.map +1 -1
  80. package/build/component/utils/envUtil.js +2 -2
  81. package/build/component/utils/envUtil.js.map +1 -1
  82. package/build/component/utils/fileOperation.d.ts.map +1 -1
  83. package/build/component/utils/fileOperation.js +4 -1
  84. package/build/component/utils/fileOperation.js.map +1 -1
  85. package/build/component/utils/mcpAuthScaffolder.d.ts +28 -0
  86. package/build/component/utils/mcpAuthScaffolder.d.ts.map +1 -1
  87. package/build/component/utils/mcpAuthScaffolder.js +39 -4
  88. package/build/component/utils/mcpAuthScaffolder.js.map +1 -1
  89. package/build/component/utils/mcpToolFetcher.d.ts +1 -72
  90. package/build/component/utils/mcpToolFetcher.d.ts.map +1 -1
  91. package/build/component/utils/mcpToolFetcher.js +1 -227
  92. package/build/component/utils/mcpToolFetcher.js.map +1 -1
  93. package/build/component/utils/odrProvider.d.ts +1 -55
  94. package/build/component/utils/odrProvider.d.ts.map +1 -1
  95. package/build/component/utils/odrProvider.js +1 -101
  96. package/build/component/utils/odrProvider.js.map +1 -1
  97. package/build/core/FxCore.d.ts.map +1 -1
  98. package/build/core/FxCore.declarativeAgent.d.ts.map +1 -1
  99. package/build/core/FxCore.declarativeAgent.js +110 -3
  100. package/build/core/FxCore.declarativeAgent.js.map +1 -1
  101. package/build/core/FxCore.js +4 -6
  102. package/build/core/FxCore.js.map +1 -1
  103. package/build/core/createFrontDoorAdapters.d.ts +4 -27
  104. package/build/core/createFrontDoorAdapters.d.ts.map +1 -1
  105. package/build/core/createFrontDoorAdapters.js +17 -157
  106. package/build/core/createFrontDoorAdapters.js.map +1 -1
  107. package/build/core/createProjectFrontDoor.d.ts +10 -12
  108. package/build/core/createProjectFrontDoor.d.ts.map +1 -1
  109. package/build/core/createProjectFrontDoor.js +143 -106
  110. package/build/core/createProjectFrontDoor.js.map +1 -1
  111. package/build/core/modifyProjectFrontDoor.d.ts +0 -1
  112. package/build/core/modifyProjectFrontDoor.d.ts.map +1 -1
  113. package/build/core/modifyProjectFrontDoor.js +0 -2
  114. package/build/core/modifyProjectFrontDoor.js.map +1 -1
  115. package/build/index.d.ts +3 -2
  116. package/build/index.d.ts.map +1 -1
  117. package/build/index.js +9 -1
  118. package/build/index.js.map +1 -1
  119. package/build/question/create.d.ts.map +1 -1
  120. package/build/question/create.js +2 -1
  121. package/build/question/create.js.map +1 -1
  122. package/build/question/inputs/AddKnowledgeInputs.d.ts.map +1 -1
  123. package/build/question/inputs/CreateProjectInputs.d.ts +4 -0
  124. package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
  125. package/build/question/options/CreateProjectOptions.d.ts.map +1 -1
  126. package/build/question/options/CreateProjectOptions.js +14 -0
  127. package/build/question/options/CreateProjectOptions.js.map +1 -1
  128. package/build/question/other.d.ts.map +1 -1
  129. package/build/question/other.js +11 -1
  130. package/build/question/other.js.map +1 -1
  131. package/build/question/questionNames.d.ts +2 -0
  132. package/build/question/questionNames.d.ts.map +1 -1
  133. package/build/question/questionNames.js +2 -0
  134. package/build/question/questionNames.js.map +1 -1
  135. package/build/question/scaffold/constructNode.d.ts +3 -1
  136. package/build/question/scaffold/constructNode.d.ts.map +1 -1
  137. package/build/question/scaffold/constructNode.js +50 -0
  138. package/build/question/scaffold/constructNode.js.map +1 -1
  139. package/build/question/scaffold/vsc/CapabilityOptions.d.ts +2 -0
  140. package/build/question/scaffold/vsc/CapabilityOptions.d.ts.map +1 -1
  141. package/build/question/scaffold/vsc/CapabilityOptions.js +16 -0
  142. package/build/question/scaffold/vsc/CapabilityOptions.js.map +1 -1
  143. package/build/question/scaffold/vsc/teamsProjectTypeNode.d.ts +19 -1
  144. package/build/question/scaffold/vsc/teamsProjectTypeNode.d.ts.map +1 -1
  145. package/build/question/scaffold/vsc/teamsProjectTypeNode.js +39 -7
  146. package/build/question/scaffold/vsc/teamsProjectTypeNode.js.map +1 -1
  147. package/build/v4/buildTarget/parseSelector.d.ts +6 -2
  148. package/build/v4/buildTarget/parseSelector.d.ts.map +1 -1
  149. package/build/v4/buildTarget/parseSelector.js +58 -45
  150. package/build/v4/buildTarget/parseSelector.js.map +1 -1
  151. package/build/v4/buildTarget/resolveBuildTarget.d.ts +21 -7
  152. package/build/v4/buildTarget/resolveBuildTarget.d.ts.map +1 -1
  153. package/build/v4/buildTarget/resolveBuildTarget.js +97 -52
  154. package/build/v4/buildTarget/resolveBuildTarget.js.map +1 -1
  155. package/build/v4/collectInputs/collectInputs.d.ts +51 -10
  156. package/build/v4/collectInputs/collectInputs.d.ts.map +1 -1
  157. package/build/v4/collectInputs/collectInputs.js +287 -91
  158. package/build/v4/collectInputs/collectInputs.js.map +1 -1
  159. package/build/v4/distribution/createQuestions.d.ts.map +1 -1
  160. package/build/v4/distribution/createQuestions.js +2 -29
  161. package/build/v4/distribution/createQuestions.js.map +1 -1
  162. package/build/v4/distribution/declarativePackage.d.ts.map +1 -1
  163. package/build/v4/distribution/declarativePackage.js +2 -30
  164. package/build/v4/distribution/declarativePackage.js.map +1 -1
  165. package/build/v4/distribution/questionFragments.d.ts +11 -0
  166. package/build/v4/distribution/questionFragments.d.ts.map +1 -0
  167. package/build/v4/distribution/questionFragments.js +130 -0
  168. package/build/v4/distribution/questionFragments.js.map +1 -0
  169. package/build/v4/engineVersion.d.ts +7 -0
  170. package/build/v4/engineVersion.d.ts.map +1 -0
  171. package/build/v4/engineVersion.js +12 -0
  172. package/build/v4/engineVersion.js.map +1 -0
  173. package/build/v4/expression/evaluateExpression.d.ts +13 -0
  174. package/build/v4/expression/evaluateExpression.d.ts.map +1 -1
  175. package/build/v4/expression/evaluateExpression.js +57 -0
  176. package/build/v4/expression/evaluateExpression.js.map +1 -1
  177. package/build/v4/index.d.ts +7 -0
  178. package/build/v4/index.d.ts.map +1 -1
  179. package/build/v4/index.js +7 -0
  180. package/build/v4/index.js.map +1 -1
  181. package/build/v4/inspection/scaffoldCatalog.d.ts +28 -0
  182. package/build/v4/inspection/scaffoldCatalog.d.ts.map +1 -0
  183. package/build/v4/inspection/scaffoldCatalog.js +66 -0
  184. package/build/v4/inspection/scaffoldCatalog.js.map +1 -0
  185. package/build/v4/inspection/scaffoldMetadataSource.d.ts +6 -0
  186. package/build/v4/inspection/scaffoldMetadataSource.d.ts.map +1 -0
  187. package/build/v4/inspection/scaffoldMetadataSource.js +78 -0
  188. package/build/v4/inspection/scaffoldMetadataSource.js.map +1 -0
  189. package/build/v4/mcp/mcpAuthAction.d.ts +36 -0
  190. package/build/v4/mcp/mcpAuthAction.d.ts.map +1 -0
  191. package/build/v4/mcp/mcpAuthAction.js +177 -0
  192. package/build/v4/mcp/mcpAuthAction.js.map +1 -0
  193. package/build/v4/mcp/mcpAuthScaffold.d.ts +37 -0
  194. package/build/v4/mcp/mcpAuthScaffold.d.ts.map +1 -0
  195. package/build/v4/mcp/mcpAuthScaffold.js +162 -0
  196. package/build/v4/mcp/mcpAuthScaffold.js.map +1 -0
  197. package/build/v4/model/dataModel.d.ts +1 -1
  198. package/build/v4/model/dataModel.d.ts.map +1 -1
  199. package/build/v4/pipeline/runScaffoldPipeline.d.ts +27 -5
  200. package/build/v4/pipeline/runScaffoldPipeline.d.ts.map +1 -1
  201. package/build/v4/pipeline/runScaffoldPipeline.js +64 -10
  202. package/build/v4/pipeline/runScaffoldPipeline.js.map +1 -1
  203. package/build/v4/providers/createOptionsProviders.d.ts +11 -0
  204. package/build/v4/providers/createOptionsProviders.d.ts.map +1 -0
  205. package/build/v4/providers/createOptionsProviders.js +268 -0
  206. package/build/v4/providers/createOptionsProviders.js.map +1 -0
  207. package/build/v4/renderContext/buildRenderContext.d.ts.map +1 -1
  208. package/build/v4/renderContext/buildRenderContext.js +4 -6
  209. package/build/v4/renderContext/buildRenderContext.js.map +1 -1
  210. package/build/v4/runtime/generalSensitivityLabel.d.ts +5 -0
  211. package/build/v4/runtime/generalSensitivityLabel.d.ts.map +1 -0
  212. package/build/v4/runtime/generalSensitivityLabel.js +36 -0
  213. package/build/v4/runtime/generalSensitivityLabel.js.map +1 -0
  214. package/build/v4/runtime/inMemoryRuntime.d.ts +7 -1
  215. package/build/v4/runtime/inMemoryRuntime.d.ts.map +1 -1
  216. package/build/v4/runtime/inMemoryRuntime.js +25 -3
  217. package/build/v4/runtime/inMemoryRuntime.js.map +1 -1
  218. package/build/v4/runtime/packageParse.d.ts.map +1 -1
  219. package/build/v4/runtime/packageParse.js +64 -8
  220. package/build/v4/runtime/packageParse.js.map +1 -1
  221. package/build/v4/runtime/realRuntime.d.ts +3 -1
  222. package/build/v4/runtime/realRuntime.d.ts.map +1 -1
  223. package/build/v4/runtime/realRuntime.js +3 -2
  224. package/build/v4/runtime/realRuntime.js.map +1 -1
  225. package/build/v4/runtime/renderMustache.d.ts.map +1 -1
  226. package/build/v4/runtime/renderMustache.js +13 -4
  227. package/build/v4/runtime/renderMustache.js.map +1 -1
  228. package/build/v4/runtime/runtimeRegistry.d.ts +12 -3
  229. package/build/v4/runtime/runtimeRegistry.d.ts.map +1 -1
  230. package/build/v4/runtime/runtimeRegistry.js +123 -17
  231. package/build/v4/runtime/runtimeRegistry.js.map +1 -1
  232. package/build/v4/runtime/scaffold.d.ts +1 -0
  233. package/build/v4/runtime/scaffold.d.ts.map +1 -1
  234. package/build/v4/runtime/scaffold.js +1 -20
  235. package/build/v4/runtime/scaffold.js.map +1 -1
  236. package/build/v4/runtime/steps/daAction.d.ts.map +1 -1
  237. package/build/v4/runtime/steps/daAction.js +3 -111
  238. package/build/v4/runtime/steps/daAction.js.map +1 -1
  239. package/build/v4/runtime/steps/daSensitivity.d.ts +14 -0
  240. package/build/v4/runtime/steps/daSensitivity.d.ts.map +1 -0
  241. package/build/v4/runtime/steps/daSensitivity.js +50 -0
  242. package/build/v4/runtime/steps/daSensitivity.js.map +1 -0
  243. package/build/v4/runtime/steps/mcpAuth.d.ts +5 -2
  244. package/build/v4/runtime/steps/mcpAuth.d.ts.map +1 -1
  245. package/build/v4/runtime/steps/mcpAuth.js +37 -66
  246. package/build/v4/runtime/steps/mcpAuth.js.map +1 -1
  247. package/build/v4/runtime/steps/mcpLocal.d.ts +0 -4
  248. package/build/v4/runtime/steps/mcpLocal.d.ts.map +1 -1
  249. package/build/v4/runtime/steps/mcpLocal.js +11 -31
  250. package/build/v4/runtime/steps/mcpLocal.js.map +1 -1
  251. package/build/v4/runtime/steps/mcpStatic.d.ts +1 -1
  252. package/build/v4/runtime/steps/mcpStatic.d.ts.map +1 -1
  253. package/build/v4/runtime/steps/mcpStatic.js +14 -32
  254. package/build/v4/runtime/steps/mcpStatic.js.map +1 -1
  255. package/build/v4/runtime/steps/metaOs.d.ts.map +1 -1
  256. package/build/v4/runtime/steps/metaOs.js +39 -51
  257. package/build/v4/runtime/steps/metaOs.js.map +1 -1
  258. package/build/v4/runtime/steps/officeAddin.d.ts.map +1 -1
  259. package/build/v4/runtime/steps/officeAddin.js +7 -12
  260. package/build/v4/runtime/steps/officeAddin.js.map +1 -1
  261. package/build/v4/runtime/steps/openApi.d.ts.map +1 -1
  262. package/build/v4/runtime/steps/openApi.js +85 -566
  263. package/build/v4/runtime/steps/openApi.js.map +1 -1
  264. package/build/v4/runtime/steps/openApiCustomApi.d.ts +5 -0
  265. package/build/v4/runtime/steps/openApiCustomApi.d.ts.map +1 -0
  266. package/build/v4/runtime/steps/openApiCustomApi.js +385 -0
  267. package/build/v4/runtime/steps/openApiCustomApi.js.map +1 -0
  268. package/build/v4/runtime/whitelist.d.ts +27 -0
  269. package/build/v4/runtime/whitelist.d.ts.map +1 -1
  270. package/build/v4/runtime/whitelist.js +156 -1
  271. package/build/v4/runtime/whitelist.js.map +1 -1
  272. package/build/v4/runtime/withTempDirectory.d.ts +10 -0
  273. package/build/v4/runtime/withTempDirectory.d.ts.map +1 -0
  274. package/build/v4/runtime/withTempDirectory.js +41 -0
  275. package/build/v4/runtime/withTempDirectory.js.map +1 -0
  276. package/build/v4/surface/createFloorTail.d.ts +12 -0
  277. package/build/v4/surface/createFloorTail.d.ts.map +1 -0
  278. package/build/v4/surface/createFloorTail.js +138 -0
  279. package/build/v4/surface/createFloorTail.js.map +1 -0
  280. package/build/v4/surface/createInputs.d.ts +25 -3
  281. package/build/v4/surface/createInputs.d.ts.map +1 -1
  282. package/build/v4/surface/createInputs.js +54 -431
  283. package/build/v4/surface/createInputs.js.map +1 -1
  284. package/build/v4/surface/createSelectorWalk.d.ts +8 -3
  285. package/build/v4/surface/createSelectorWalk.d.ts.map +1 -1
  286. package/build/v4/surface/createSelectorWalk.js +21 -11
  287. package/build/v4/surface/createSelectorWalk.js.map +1 -1
  288. package/build/v4/surface/deriveCreateOptions.d.ts.map +1 -1
  289. package/build/v4/surface/deriveCreateOptions.js +5 -2
  290. package/build/v4/surface/deriveCreateOptions.js.map +1 -1
  291. package/build/v4/surface/localizePrompt.d.ts +11 -0
  292. package/build/v4/surface/localizePrompt.d.ts.map +1 -0
  293. package/build/v4/surface/localizePrompt.js +32 -0
  294. package/build/v4/surface/localizePrompt.js.map +1 -0
  295. package/build/v4/surface/modifySelectorWalk.d.ts.map +1 -1
  296. package/build/v4/surface/modifySelectorWalk.js +0 -3
  297. package/build/v4/surface/modifySelectorWalk.js.map +1 -1
  298. package/build/v4/surface/uiPromptUI.d.ts.map +1 -1
  299. package/build/v4/surface/uiPromptUI.js +45 -45
  300. package/build/v4/surface/uiPromptUI.js.map +1 -1
  301. package/build/v4/validation/capabilityCatalog.d.ts +8 -0
  302. package/build/v4/validation/capabilityCatalog.d.ts.map +1 -0
  303. package/build/v4/validation/capabilityCatalog.js +62 -0
  304. package/build/v4/validation/capabilityCatalog.js.map +1 -0
  305. package/build/v4/validation/templateArchiveValidation.d.ts +15 -0
  306. package/build/v4/validation/templateArchiveValidation.d.ts.map +1 -0
  307. package/build/v4/validation/templateArchiveValidation.js +297 -0
  308. package/build/v4/validation/templateArchiveValidation.js.map +1 -0
  309. package/build/v4/validation/validateTemplatePackage.d.ts +21 -2
  310. package/build/v4/validation/validateTemplatePackage.d.ts.map +1 -1
  311. package/build/v4/validation/validateTemplatePackage.js +155 -31
  312. package/build/v4/validation/validateTemplatePackage.js.map +1 -1
  313. package/build/v4/validators/createInputValidators.d.ts +7 -0
  314. package/build/v4/validators/createInputValidators.d.ts.map +1 -0
  315. package/build/v4/validators/createInputValidators.js +77 -0
  316. package/build/v4/validators/createInputValidators.js.map +1 -0
  317. package/build/v4/validators/mcpCredentialValidators.d.ts +5 -0
  318. package/build/v4/validators/mcpCredentialValidators.d.ts.map +1 -0
  319. package/build/v4/validators/mcpCredentialValidators.js +13 -0
  320. package/build/v4/validators/mcpCredentialValidators.js.map +1 -0
  321. package/build/v4/validators/mcpServerUrlValidator.d.ts +9 -0
  322. package/build/v4/validators/mcpServerUrlValidator.d.ts.map +1 -0
  323. package/build/v4/validators/mcpServerUrlValidator.js +15 -0
  324. package/build/v4/validators/mcpServerUrlValidator.js.map +1 -0
  325. package/package.json +29 -23
  326. package/resource/package.nls.cs.json +56 -54
  327. package/resource/package.nls.de.json +56 -54
  328. package/resource/package.nls.es.json +55 -53
  329. package/resource/package.nls.fr.json +56 -54
  330. package/resource/package.nls.it.json +55 -53
  331. package/resource/package.nls.ja.json +56 -54
  332. package/resource/package.nls.json +10 -3
  333. package/resource/package.nls.ko.json +56 -54
  334. package/resource/package.nls.pl.json +56 -54
  335. package/resource/package.nls.pt-BR.json +56 -54
  336. package/resource/package.nls.ru.json +56 -54
  337. package/resource/package.nls.tr.json +56 -54
  338. package/resource/package.nls.zh-Hans.json +56 -54
  339. package/resource/package.nls.zh-Hant.json +56 -54
  340. package/resource/templates/package.nls.cs.json +22 -9
  341. package/resource/templates/package.nls.de.json +22 -9
  342. package/resource/templates/package.nls.es.json +22 -9
  343. package/resource/templates/package.nls.fr.json +22 -9
  344. package/resource/templates/package.nls.it.json +22 -9
  345. package/resource/templates/package.nls.ja.json +22 -9
  346. package/resource/templates/package.nls.json +16 -3
  347. package/resource/templates/package.nls.ko.json +22 -9
  348. package/resource/templates/package.nls.pl.json +22 -9
  349. package/resource/templates/package.nls.pt-BR.json +22 -9
  350. package/resource/templates/package.nls.ru.json +22 -9
  351. package/resource/templates/package.nls.tr.json +22 -9
  352. package/resource/templates/package.nls.zh-Hans.json +22 -9
  353. package/resource/templates/package.nls.zh-Hant.json +22 -9
  354. package/resource/templates/package.nls.zh-cn.json +7 -1
  355. package/resource/templates/package.nls.zh-tw.json +7 -1
  356. package/templates/fallback/common.zip +0 -0
  357. package/templates/fallback/csharp.zip +0 -0
  358. package/templates/fallback/js.zip +0 -0
  359. package/templates/fallback/python.zip +0 -0
  360. package/templates/fallback/ts.zip +0 -0
  361. package/templates/metadata/allTemplates.json +16 -2
  362. package/templates/metadata.zip +0 -0
  363. package/templates/ui/wizardNode.json +24 -0
  364. package/templates/v4/create-selector.json +30 -5
  365. package/templates/v4/floor.json +1 -1
  366. package/templates/v4/modify-selector.json +1 -6
  367. package/templates/v4/templates-metadata.zip +0 -0
  368. package/templates/v4/templates.zip +0 -0
  369. package/templates/configs/local/typescript/.gitignore +0 -1
  370. package/templates/configs/playground/typescript/.gitignore +0 -4
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT license.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.validateDeclarativePackageArchive = validateDeclarativePackageArchive;
6
+ exports.validateDeclarativeTemplateArchive = validateDeclarativeTemplateArchive;
7
+ const tslib_1 = require("tslib");
8
+ const adm_zip_1 = tslib_1.__importDefault(require("adm-zip"));
9
+ const ajv_1 = tslib_1.__importDefault(require("ajv"));
10
+ const neverthrow_1 = require("neverthrow");
11
+ const validateTemplatePackage_1 = require("./validateTemplatePackage");
12
+ const capabilityCatalog_1 = require("./capabilityCatalog");
13
+ const CALLER_FLOOR = ["appName", "language"];
14
+ const VALUE_TOKEN = /\{\{\s*[#^\/]?\s*([A-Za-z_][A-Za-z0-9_.]*)\s*\}\}/g;
15
+ function archiveError(errors, name, message) {
16
+ return errors.system(name, message);
17
+ }
18
+ function packageError(errors, name, message) {
19
+ return errors.user(name, message);
20
+ }
21
+ function packageIdFromEntry(kind, name) {
22
+ const prefix = `v4/${kind}/`;
23
+ if (!name.startsWith(prefix)) {
24
+ return undefined;
25
+ }
26
+ const relative = name.slice(prefix.length);
27
+ for (const suffix of ["/descriptor.json", "/questions.json", "/pipeline.json"]) {
28
+ if (relative.endsWith(suffix)) {
29
+ const id = relative.slice(0, -suffix.length);
30
+ return id.length > 0 ? id : undefined;
31
+ }
32
+ }
33
+ const contentIndex = relative.indexOf("/content/");
34
+ return contentIndex > 0 ? relative.slice(0, contentIndex) : undefined;
35
+ }
36
+ function openArchive(bytes, errors) {
37
+ let zip;
38
+ try {
39
+ zip = new adm_zip_1.default(bytes);
40
+ }
41
+ catch {
42
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplatePackageCorrupt", "The template package is not a valid archive."));
43
+ }
44
+ const entries = new Map();
45
+ const packageIds = {
46
+ create: new Set(),
47
+ modify: new Set(),
48
+ };
49
+ const presentIds = { create: [], modify: [] };
50
+ try {
51
+ for (const entry of zip.getEntries()) {
52
+ if (entry.isDirectory) {
53
+ continue;
54
+ }
55
+ const name = entry.entryName.replace(/\\/g, "/");
56
+ entries.set(name, entry.getData());
57
+ for (const kind of ["create", "modify"]) {
58
+ const id = packageIdFromEntry(kind, name);
59
+ if (id !== undefined) {
60
+ packageIds[kind].add(id);
61
+ if (name === `v4/${kind}/${id}/descriptor.json`) {
62
+ presentIds[kind].push(id);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ catch {
69
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplatePackageCorrupt", "The template package could not be read."));
70
+ }
71
+ presentIds.create.sort();
72
+ presentIds.modify.sort();
73
+ return (0, neverthrow_1.ok)({
74
+ zip,
75
+ entries,
76
+ packageIds: {
77
+ create: [...packageIds.create].sort(),
78
+ modify: [...packageIds.modify].sort(),
79
+ },
80
+ presentIds,
81
+ });
82
+ }
83
+ function parseJson(data, file, errors) {
84
+ try {
85
+ const parsed = JSON.parse(data.toString("utf8"));
86
+ return (0, neverthrow_1.ok)(parsed);
87
+ }
88
+ catch {
89
+ return (0, neverthrow_1.err)(archiveError(errors, "PackageFileInvalid", `The template package file "${file}" is not valid JSON.`));
90
+ }
91
+ }
92
+ function parseOptionalJson(archive, file, errors) {
93
+ const data = archive.entries.get(file);
94
+ return data === undefined ? (0, neverthrow_1.ok)(undefined) : parseJson(data, file, errors);
95
+ }
96
+ function isAnySchema(value) {
97
+ return (typeof value === "boolean" ||
98
+ (typeof value === "object" && value !== null && !Array.isArray(value)));
99
+ }
100
+ function schemaValidator(ajv, validate) {
101
+ return (data) => validate(data) ? undefined : ajv.errorsText(validate.errors, { separator: "; " });
102
+ }
103
+ function compileSchemas(archive, errors) {
104
+ const schemaFiles = [
105
+ ["descriptor", "v4/schema/descriptor.schema.json"],
106
+ ["question", "v4/schema/questions.schema.json"],
107
+ ["pipeline", "v4/schema/pipeline.schema.json"],
108
+ ["selector", "v4/schema/selector.schema.json"],
109
+ ];
110
+ const schemas = {};
111
+ for (const [name, file] of schemaFiles) {
112
+ const data = archive.entries.get(file);
113
+ if (data === undefined) {
114
+ return (0, neverthrow_1.err)(archiveError(errors, "PackageFileMissing", `The template package is missing "${file}".`));
115
+ }
116
+ const parsed = parseJson(data, file, errors);
117
+ if (parsed.isErr()) {
118
+ return (0, neverthrow_1.err)(parsed.error);
119
+ }
120
+ if (!isAnySchema(parsed.value)) {
121
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplateSchemaInvalid", `The template schema "${file}" is invalid.`));
122
+ }
123
+ schemas[name] = parsed.value;
124
+ }
125
+ const descriptor = schemas.descriptor;
126
+ const question = schemas.question;
127
+ const pipeline = schemas.pipeline;
128
+ const selector = schemas.selector;
129
+ if (descriptor === undefined ||
130
+ question === undefined ||
131
+ pipeline === undefined ||
132
+ selector === undefined) {
133
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplateSchemaInvalid", "The template package schema set is incomplete."));
134
+ }
135
+ try {
136
+ const ajv = new ajv_1.default({ allErrors: true, strict: false });
137
+ ajv.addSchema(question);
138
+ return (0, neverthrow_1.ok)({
139
+ descriptor: schemaValidator(ajv, ajv.compile(descriptor)),
140
+ question: schemaValidator(ajv, ajv.getSchema("https://aka.ms/m365atk/v4/questions.schema.json") ?? ajv.compile(question)),
141
+ pipeline: schemaValidator(ajv, ajv.compile(pipeline)),
142
+ selector: schemaValidator(ajv, ajv.compile(selector)),
143
+ });
144
+ }
145
+ catch {
146
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplateSchemaInvalid", "The template package schemas could not be compiled."));
147
+ }
148
+ }
149
+ function isSafeRelativePath(relativePath) {
150
+ if (relativePath.startsWith("/") ||
151
+ relativePath.startsWith("\\") ||
152
+ /^[A-Za-z]:/.test(relativePath)) {
153
+ return false;
154
+ }
155
+ return relativePath
156
+ .replace(/\\/g, "/")
157
+ .split("/")
158
+ .every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
159
+ }
160
+ function validateSelectors(archive, schemas, errors) {
161
+ for (const kind of ["create", "modify"]) {
162
+ const file = `v4/${kind}/selector.json`;
163
+ const selector = parseOptionalJson(archive, file, errors);
164
+ if (selector.isErr()) {
165
+ return (0, neverthrow_1.err)(selector.error);
166
+ }
167
+ const schemaError = schemas.selector(selector.value);
168
+ if (schemaError !== undefined) {
169
+ return (0, neverthrow_1.err)(packageError(errors, validateTemplatePackage_1.VALIDATE_SCHEMA, `${file}: selector.json failed schema validation: ${schemaError}`));
170
+ }
171
+ }
172
+ return (0, neverthrow_1.ok)(undefined);
173
+ }
174
+ function extractPlaceholders(value, output) {
175
+ for (const match of value.matchAll(VALUE_TOKEN)) {
176
+ if (match.index !== undefined && match.index > 0 && value[match.index - 1] === "$") {
177
+ continue;
178
+ }
179
+ output.add(match[1]);
180
+ }
181
+ }
182
+ function loadContent(archive, locator, errors) {
183
+ const prefix = `v4/${locator.kind}/${locator.templateId}/content/`;
184
+ const raw = [];
185
+ const validation = [];
186
+ for (const [name, data] of archive.entries) {
187
+ if (!name.startsWith(prefix)) {
188
+ continue;
189
+ }
190
+ const relativePath = name.slice(prefix.length);
191
+ if (!isSafeRelativePath(relativePath)) {
192
+ return (0, neverthrow_1.err)(archiveError(errors, "TemplatePackageUnsafePath", `The resolved template package contains an unsafe entry path: "${name}".`));
193
+ }
194
+ const placeholders = new Set();
195
+ if (relativePath.endsWith(".tpl")) {
196
+ extractPlaceholders(relativePath, placeholders);
197
+ extractPlaceholders(data.toString("utf8"), placeholders);
198
+ }
199
+ raw.push({ path: relativePath, data });
200
+ validation.push({ path: relativePath, placeholders: [...placeholders].sort() });
201
+ }
202
+ raw.sort((left, right) => left.path.localeCompare(right.path));
203
+ validation.sort((left, right) => left.path.localeCompare(right.path));
204
+ return (0, neverthrow_1.ok)({ raw, validation: validation.length === 0 ? undefined : validation });
205
+ }
206
+ function validateOpenedPackage(archive, schemas, locator, mode, engineVersion, errors) {
207
+ const root = `v4/${locator.kind}/${locator.templateId}/`;
208
+ const descriptor = parseOptionalJson(archive, `${root}descriptor.json`, errors);
209
+ if (descriptor.isErr()) {
210
+ return (0, neverthrow_1.err)(descriptor.error);
211
+ }
212
+ const questions = parseOptionalJson(archive, `${root}questions.json`, errors);
213
+ if (questions.isErr()) {
214
+ return (0, neverthrow_1.err)(questions.error);
215
+ }
216
+ const pipeline = parseOptionalJson(archive, `${root}pipeline.json`, errors);
217
+ if (pipeline.isErr()) {
218
+ return (0, neverthrow_1.err)(pipeline.error);
219
+ }
220
+ const createSelector = parseOptionalJson(archive, "v4/create/selector.json", errors);
221
+ if (createSelector.isErr()) {
222
+ return (0, neverthrow_1.err)(createSelector.error);
223
+ }
224
+ const modifySelector = parseOptionalJson(archive, "v4/modify/selector.json", errors);
225
+ if (modifySelector.isErr()) {
226
+ return (0, neverthrow_1.err)(modifySelector.error);
227
+ }
228
+ const content = loadContent(archive, locator, errors);
229
+ if (content.isErr()) {
230
+ return (0, neverthrow_1.err)(content.error);
231
+ }
232
+ const validation = (0, validateTemplatePackage_1.validateTemplatePackage)(locator.kind, locator.templateId, mode, {
233
+ userError: (name, message) => errors.user(name, message),
234
+ descriptor: () => descriptor.value,
235
+ questions: () => questions.value,
236
+ pipeline: () => pipeline.value,
237
+ content: () => content.value.validation,
238
+ selector: (kind) => (kind === "create" ? createSelector.value : modifySelector.value),
239
+ schemas,
240
+ capabilityFloor: capabilityCatalog_1.templateCapabilityFloor,
241
+ capabilityOutputs: capabilityCatalog_1.templateCapabilityOutputs,
242
+ engineVersion: () => engineVersion,
243
+ callerFloor: () => CALLER_FLOOR,
244
+ presentTemplateIds: (kind) => archive.presentIds[kind],
245
+ });
246
+ if (validation.isErr()) {
247
+ return (0, neverthrow_1.err)(validation.error);
248
+ }
249
+ return (0, neverthrow_1.ok)({
250
+ descriptor: validation.value.descriptor,
251
+ pipeline: pipeline.value,
252
+ content: content.value.raw,
253
+ });
254
+ }
255
+ /** Validate and open one declarative package from final channel archive bytes. */
256
+ function validateDeclarativePackageArchive(bytes, locator, mode, engineVersion, errors) {
257
+ const archive = openArchive(bytes, errors);
258
+ if (archive.isErr()) {
259
+ return (0, neverthrow_1.err)(archive.error);
260
+ }
261
+ const schemas = compileSchemas(archive.value, errors);
262
+ if (schemas.isErr()) {
263
+ return (0, neverthrow_1.err)(schemas.error);
264
+ }
265
+ const selectors = validateSelectors(archive.value, schemas.value, errors);
266
+ if (selectors.isErr()) {
267
+ return (0, neverthrow_1.err)(selectors.error);
268
+ }
269
+ return validateOpenedPackage(archive.value, schemas.value, locator, mode, engineVersion, errors);
270
+ }
271
+ /** Validate every authored create/modify package in final channel archive bytes. */
272
+ function validateDeclarativeTemplateArchive(bytes, mode, engineVersion, errors) {
273
+ const archive = openArchive(bytes, errors);
274
+ if (archive.isErr()) {
275
+ return (0, neverthrow_1.err)(archive.error);
276
+ }
277
+ const schemas = compileSchemas(archive.value, errors);
278
+ if (schemas.isErr()) {
279
+ return (0, neverthrow_1.err)(schemas.error);
280
+ }
281
+ const selectors = validateSelectors(archive.value, schemas.value, errors);
282
+ if (selectors.isErr()) {
283
+ return (0, neverthrow_1.err)(selectors.error);
284
+ }
285
+ const validated = [];
286
+ for (const kind of ["create", "modify"]) {
287
+ for (const templateId of archive.value.packageIds[kind]) {
288
+ const result = validateOpenedPackage(archive.value, schemas.value, { kind, templateId }, mode, engineVersion, errors);
289
+ if (result.isErr()) {
290
+ return (0, neverthrow_1.err)(result.error);
291
+ }
292
+ validated.push(`${kind}/${templateId}`);
293
+ }
294
+ }
295
+ return (0, neverthrow_1.ok)(validated);
296
+ }
297
+ //# sourceMappingURL=templateArchiveValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateArchiveValidation.js","sourceRoot":"","sources":["../../../src/v4/validation/templateArchiveValidation.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { FxError } from "@microsoft/teamsfx-api";
2
- import { Result } from "neverthrow";
1
+ import type { FxError } from "@microsoft/teamsfx-api";
2
+ import type { Result } from "neverthrow";
3
+ /** Create one caller-owned, author-fixable validation failure. */
4
+ export type TemplatePackageErrorFactory = (name: string, message: string) => FxError;
3
5
  /** Package namespace. */
4
6
  export type PackageKind = "create" | "modify";
5
7
  /** Validation mode; only `load` compares this engine against `minEngineVersion`. */
@@ -11,8 +13,12 @@ export interface ContentFile {
11
13
  }
12
14
  /** JSON-schema validator face; `undefined` means valid. */
13
15
  export type SchemaValidator = (data: unknown) => string | undefined;
16
+ /** Template-visible extension-point categories with source-owned introduction versions. */
17
+ export type CapabilityKind = "step" | "provider" | "validator";
14
18
  /** Narrow validation port; schema, package, and engine-context data stay injected. */
15
19
  export interface TemplatePackagePort {
20
+ /** Adapt an author-fixable diagnosis to the caller's concrete error type. */
21
+ userError: TemplatePackageErrorFactory;
16
22
  /** The package's parsed `descriptor.json`, or `undefined` when absent. */
17
23
  descriptor(): unknown | undefined;
18
24
  /** The package's parsed `questions.json`, or `undefined` when absent. */
@@ -27,8 +33,13 @@ export interface TemplatePackagePort {
27
33
  schemas: {
28
34
  descriptor: SchemaValidator;
29
35
  question: SchemaValidator;
36
+ pipeline: SchemaValidator;
30
37
  selector: SchemaValidator;
31
38
  };
39
+ /** The engine introduction version for a named capability; `undefined` means unknown. */
40
+ capabilityFloor(kind: CapabilityKind, id: string): string | undefined;
41
+ /** Output names a capability may add to the render context. */
42
+ capabilityOutputs(kind: CapabilityKind, id: string): string[];
32
43
  /** The consuming engine's SemVer (the `load`-mode reverse gate). */
33
44
  engineVersion(): string;
34
45
  /** The closed caller-injected identifier names (`appName`, the `language` axis, …). */
@@ -59,6 +70,14 @@ export declare const VALIDATE_KIND_OVERLAP = "TemplatePackageKindOverlap";
59
70
  export declare const VALIDATE_MIN_ENGINE_MISSING = "TemplatePackageMinEngineVersionMissing";
60
71
  /** `UserError` name: `engineVersion < minEngineVersion` — the engine is too old. */
61
72
  export declare const VALIDATE_ENGINE_TOO_OLD = "TemplatePackageEngineTooOld";
73
+ /** `UserError` name: a package or consuming engine version is not valid SemVer. */
74
+ export declare const VALIDATE_ENGINE_VERSION_INVALID = "TemplatePackageEngineVersionInvalid";
75
+ /** `UserError` name: package data references a capability absent from the engine catalogue. */
76
+ export declare const VALIDATE_UNKNOWN_CAPABILITY = "TemplatePackageUnknownCapability";
77
+ /** `UserError` name: `minEngineVersion` predates a referenced capability. */
78
+ export declare const VALIDATE_CAPABILITY_FLOOR = "TemplatePackageCapabilityFloor";
79
+ /** Apply the package's reverse engine-version gate before any content is rendered. */
80
+ export declare function validateMinEngineVersion(kind: PackageKind, id: string, descriptor: unknown, engineVersion: string, userError: TemplatePackageErrorFactory): Result<string, FxError>;
62
81
  /** Validate one `<kind>/<id>` package before any content is rendered. */
63
82
  export declare function validateTemplatePackage(kind: PackageKind, id: string, mode: ValidateMode, port: TemplatePackagePort): Result<ValidatedPackage, FxError>;
64
83
  //# sourceMappingURL=validateTemplatePackage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateTemplatePackage.d.ts","sourceRoot":"","sources":["../../../src/v4/validation/validateTemplatePackage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAa,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAW,MAAM,YAAY,CAAC;AAM7C,yBAAyB;AACzB,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9C,oFAAoF;AACpF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;AAEpE,sFAAsF;AACtF,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,UAAU,IAAI,OAAO,GAAG,SAAS,CAAC;IAClC,yEAAyE;IACzE,SAAS,IAAI,OAAO,GAAG,SAAS,CAAC;IACjC,wEAAwE;IACxE,QAAQ,IAAI,OAAO,GAAG,SAAS,CAAC;IAChC,4FAA4F;IAC5F,OAAO,IAAI,WAAW,EAAE,GAAG,SAAS,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACrC,+DAA+D;IAC/D,OAAO,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,eAAe,CAAA;KAAE,CAAC;IAC/F,oEAAoE;IACpE,aAAa,IAAI,MAAM,CAAC;IACxB,uFAAuF;IACvF,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,sFAAsF;IACtF,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAAC;CACjD;AAED,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,+DAA+D;AAC/D,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,4FAA4F;AAC5F,eAAO,MAAM,0BAA0B,oCAAoC,CAAC;AAC5E,6FAA6F;AAC7F,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AACtE,iGAAiG;AACjG,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAClE,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,2CAA2C,CAAC;AACpF,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AAkErE,yEAAyE;AACzE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,mBAAmB,GACxB,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAwJnC"}
1
+ {"version":3,"file":"validateTemplatePackage.d.ts","sourceRoot":"","sources":["../../../src/v4/validation/validateTemplatePackage.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,14 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT license.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.VALIDATE_ENGINE_TOO_OLD = exports.VALIDATE_MIN_ENGINE_MISSING = exports.VALIDATE_KIND_OVERLAP = exports.VALIDATE_DANGLING_ROUTE = exports.VALIDATE_PLACEHOLDER_DRIFT = exports.VALIDATE_SCHEMA = exports.VALIDATE_REQUIRED_FILE = void 0;
5
+ exports.VALIDATE_CAPABILITY_FLOOR = exports.VALIDATE_UNKNOWN_CAPABILITY = exports.VALIDATE_ENGINE_VERSION_INVALID = exports.VALIDATE_ENGINE_TOO_OLD = exports.VALIDATE_MIN_ENGINE_MISSING = exports.VALIDATE_KIND_OVERLAP = exports.VALIDATE_DANGLING_ROUTE = exports.VALIDATE_PLACEHOLDER_DRIFT = exports.VALIDATE_SCHEMA = exports.VALIDATE_REQUIRED_FILE = void 0;
6
+ exports.validateMinEngineVersion = validateMinEngineVersion;
6
7
  exports.validateTemplatePackage = validateTemplatePackage;
7
- const teamsfx_api_1 = require("@microsoft/teamsfx-api");
8
+ const tslib_1 = require("tslib");
8
9
  const neverthrow_1 = require("neverthrow");
10
+ const semver_1 = tslib_1.__importDefault(require("semver"));
9
11
  /** Pure v4 template-package validation gate. See validate-template-package spec and ADR-0015. */
10
- const SOURCE = "Scaffold";
12
+ const MUSTACHE_VALUE = /\{\{\s*([A-Za-z_][A-Za-z0-9_.]*)\s*\}\}/g;
11
13
  /** `UserError` name: a required package file (`descriptor`/`questions`/`pipeline`) is absent. */
12
14
  exports.VALIDATE_REQUIRED_FILE = "TemplatePackageRequiredFile";
13
15
  /** `UserError` name: a package file failed its JSON schema. */
@@ -22,9 +24,12 @@ exports.VALIDATE_KIND_OVERLAP = "TemplatePackageKindOverlap";
22
24
  exports.VALIDATE_MIN_ENGINE_MISSING = "TemplatePackageMinEngineVersionMissing";
23
25
  /** `UserError` name: `engineVersion < minEngineVersion` — the engine is too old. */
24
26
  exports.VALIDATE_ENGINE_TOO_OLD = "TemplatePackageEngineTooOld";
25
- function userError(name, message) {
26
- return new teamsfx_api_1.UserError({ source: SOURCE, name, message });
27
- }
27
+ /** `UserError` name: a package or consuming engine version is not valid SemVer. */
28
+ exports.VALIDATE_ENGINE_VERSION_INVALID = "TemplatePackageEngineVersionInvalid";
29
+ /** `UserError` name: package data references a capability absent from the engine catalogue. */
30
+ exports.VALIDATE_UNKNOWN_CAPABILITY = "TemplatePackageUnknownCapability";
31
+ /** `UserError` name: `minEngineVersion` predates a referenced capability. */
32
+ exports.VALIDATE_CAPABILITY_FLOOR = "TemplatePackageCapabilityFloor";
28
33
  function isRecord(v) {
29
34
  return typeof v === "object" && v !== null && !Array.isArray(v);
30
35
  }
@@ -58,29 +63,111 @@ function v4RouteIds(selectorData) {
58
63
  }
59
64
  return ids;
60
65
  }
61
- /** Compare `major.minor.patch` numerically: <0 / 0 / >0. */
62
- function compareSemver(a, b) {
63
- const pa = parseSemver(a);
64
- const pb = parseSemver(b);
65
- for (let i = 0; i < 3; i++) {
66
- if (pa[i] !== pb[i]) {
67
- return pa[i] < pb[i] ? -1 : 1;
66
+ function validateEngineVersion(pkg, field, version, userError) {
67
+ if (semver_1.default.valid(version) !== version) {
68
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_ENGINE_VERSION_INVALID, `${pkg}: ${field} '${version}' is not valid SemVer`));
69
+ }
70
+ return (0, neverthrow_1.ok)(version);
71
+ }
72
+ function validatorReference(validation) {
73
+ const id = typeof validation === "string"
74
+ ? validation
75
+ : isRecord(validation)
76
+ ? getString(validation, "use")
77
+ : undefined;
78
+ return id === undefined ? undefined : { kind: "validator", id };
79
+ }
80
+ function capabilityReferences(questions, pipeline) {
81
+ const references = [];
82
+ if (isRecord(questions)) {
83
+ for (const question of getArray(questions, "questions") ?? []) {
84
+ if (!isRecord(question)) {
85
+ continue;
86
+ }
87
+ const provider = getString(question, "optionsFrom");
88
+ if (provider !== undefined) {
89
+ references.push({ kind: "provider", id: provider });
90
+ }
91
+ const validator = validatorReference(question.validation);
92
+ if (validator !== undefined) {
93
+ references.push(validator);
94
+ }
95
+ const inputBoxValidator = validatorReference(getRecord(question, "inputBoxConfig")?.validation);
96
+ if (inputBoxValidator !== undefined) {
97
+ references.push(inputBoxValidator);
98
+ }
99
+ }
100
+ }
101
+ if (isRecord(pipeline)) {
102
+ for (const step of getArray(pipeline, "steps") ?? []) {
103
+ if (!isRecord(step)) {
104
+ continue;
105
+ }
106
+ const id = getString(step, "step");
107
+ if (id !== undefined) {
108
+ references.push({ kind: "step", id });
109
+ }
110
+ }
111
+ }
112
+ return references;
113
+ }
114
+ function pipelinePlaceholderReferences(pipeline) {
115
+ const references = new Set();
116
+ if (!isRecord(pipeline)) {
117
+ return [];
118
+ }
119
+ for (const step of getArray(pipeline, "steps") ?? []) {
120
+ if (!isRecord(step)) {
121
+ continue;
122
+ }
123
+ const withParams = getRecord(step, "with");
124
+ if (withParams === undefined) {
125
+ continue;
126
+ }
127
+ for (const value of Object.values(withParams)) {
128
+ const strings = typeof value === "string" ? [value] : Array.isArray(value) ? value : [];
129
+ for (const item of strings) {
130
+ if (typeof item !== "string") {
131
+ continue;
132
+ }
133
+ for (const match of item.matchAll(MUSTACHE_VALUE)) {
134
+ if (match.index !== undefined && match.index > 0 && item[match.index - 1] === "$") {
135
+ continue;
136
+ }
137
+ references.add(match[1]);
138
+ }
139
+ }
68
140
  }
69
141
  }
70
- return 0;
142
+ return [...references];
71
143
  }
72
- function parseSemver(v) {
73
- const parts = v.split(".");
74
- const nums = [];
75
- for (let i = 0; i < 3; i++) {
76
- const n = Number.parseInt(parts[i] ?? "0", 10);
77
- nums.push(Number.isNaN(n) ? 0 : n);
78
- }
79
- return nums;
144
+ /** Apply the package's reverse engine-version gate before any content is rendered. */
145
+ function validateMinEngineVersion(kind, id, descriptor, engineVersion, userError) {
146
+ const pkg = `${kind}/${id}`;
147
+ if (!isRecord(descriptor)) {
148
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_SCHEMA, `${pkg}: descriptor.json must be a JSON object`));
149
+ }
150
+ const minEngineVersion = getString(descriptor, "minEngineVersion");
151
+ if (minEngineVersion === undefined) {
152
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_MIN_ENGINE_MISSING, `${pkg}: descriptor.json must declare minEngineVersion (the reverse compatibility signal)`));
153
+ }
154
+ const validMinimum = validateEngineVersion(pkg, "minEngineVersion", minEngineVersion, userError);
155
+ if (validMinimum.isErr()) {
156
+ return (0, neverthrow_1.err)(validMinimum.error);
157
+ }
158
+ const validEngine = validateEngineVersion(pkg, "engineVersion", engineVersion, userError);
159
+ if (validEngine.isErr()) {
160
+ return (0, neverthrow_1.err)(validEngine.error);
161
+ }
162
+ if (semver_1.default.lt(engineVersion, minEngineVersion)) {
163
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_ENGINE_TOO_OLD, `${pkg}: requires engine ${minEngineVersion}, but this engine is ${engineVersion}; upgrade the engine (no silent fallback)`));
164
+ }
165
+ return (0, neverthrow_1.ok)(minEngineVersion);
80
166
  }
81
167
  /** Validate one `<kind>/<id>` package before any content is rendered. */
82
168
  function validateTemplatePackage(kind, id, mode, port) {
83
169
  const pkg = `${kind}/${id}`;
170
+ const userError = (name, message) => port.userError(name, message);
84
171
  // descriptor / questions / pipeline are required; `content/` is optional.
85
172
  const descriptor = port.descriptor();
86
173
  const questions = port.questions();
@@ -107,10 +194,37 @@ function validateTemplatePackage(kind, id, mode, port) {
107
194
  if (qSchemaErr !== undefined) {
108
195
  return (0, neverthrow_1.err)(userError(exports.VALIDATE_SCHEMA, `${pkg}: questions.json failed schema validation: ${qSchemaErr}`));
109
196
  }
197
+ const pSchemaErr = port.schemas.pipeline(pipeline);
198
+ if (pSchemaErr !== undefined) {
199
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_SCHEMA, `${pkg}: pipeline.json failed schema validation: ${pSchemaErr}`));
200
+ }
110
201
  const sSchemaErr = port.schemas.selector(selectorData);
111
202
  if (sSchemaErr !== undefined) {
112
203
  return (0, neverthrow_1.err)(userError(exports.VALIDATE_SCHEMA, `${pkg}: selector.json failed schema validation: ${sSchemaErr}`));
113
204
  }
205
+ const minEngineVersion = getString(descriptor, "minEngineVersion");
206
+ if (minEngineVersion === undefined) {
207
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_MIN_ENGINE_MISSING, `${pkg}: descriptor.json must declare minEngineVersion (the reverse compatibility signal)`));
208
+ }
209
+ const validMinimum = validateEngineVersion(pkg, "minEngineVersion", minEngineVersion, userError);
210
+ if (validMinimum.isErr()) {
211
+ return (0, neverthrow_1.err)(validMinimum.error);
212
+ }
213
+ const derivedVars = [];
214
+ for (const reference of capabilityReferences(questions, pipeline)) {
215
+ const floor = port.capabilityFloor(reference.kind, reference.id);
216
+ if (floor === undefined) {
217
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_UNKNOWN_CAPABILITY, `${pkg}: ${reference.kind} '${reference.id}' is not a registered template capability`));
218
+ }
219
+ if (semver_1.default.lt(minEngineVersion, floor)) {
220
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_CAPABILITY_FLOOR, `${pkg}: ${reference.kind} '${reference.id}' requires minEngineVersion ${floor}, but descriptor.json declares ${minEngineVersion}`));
221
+ }
222
+ if (reference.kind === "provider") {
223
+ for (const output of port.capabilityOutputs(reference.kind, reference.id)) {
224
+ derivedVars.push(`derived.${reference.id}.${output}`);
225
+ }
226
+ }
227
+ }
114
228
  // Placeholder closure: every token has a producer, and every required var is consumed.
115
229
  const replaceMapVars = [];
116
230
  const requiredVars = [];
@@ -145,9 +259,20 @@ function validateTemplatePackage(kind, id, mode, port) {
145
259
  }
146
260
  }
147
261
  }
148
- const mayReference = new Set([...replaceMapVars, ...answerVars, ...port.callerFloor()]);
262
+ const mayReference = new Set([
263
+ ...replaceMapVars,
264
+ ...answerVars,
265
+ ...derivedVars,
266
+ ...port.callerFloor(),
267
+ ]);
149
268
  const contentFiles = port.content() ?? [];
150
269
  const contentTokens = new Set();
270
+ for (const token of pipelinePlaceholderReferences(pipeline)) {
271
+ contentTokens.add(token);
272
+ if (!mayReference.has(token)) {
273
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_PLACEHOLDER_DRIFT, `${pkg}: pipeline.json references '{{${token}}}', which no replaceMap entry, question, or caller-injected identifier produces`));
274
+ }
275
+ }
151
276
  for (const file of contentFiles) {
152
277
  for (const token of file.placeholders) {
153
278
  contentTokens.add(token);
@@ -158,7 +283,7 @@ function validateTemplatePackage(kind, id, mode, port) {
158
283
  }
159
284
  for (const v of requiredVars) {
160
285
  if (!contentTokens.has(v)) {
161
- return (0, neverthrow_1.err)(userError(exports.VALIDATE_PLACEHOLDER_DRIFT, `${pkg}: emits required render var '${v}' that no content file consumes`));
286
+ return (0, neverthrow_1.err)(userError(exports.VALIDATE_PLACEHOLDER_DRIFT, `${pkg}: emits required render var '${v}' that no render surface consumes`));
162
287
  }
163
288
  }
164
289
  // Every v4 route must resolve to a present descriptor; kinds stay disjoint.
@@ -177,13 +302,12 @@ function validateTemplatePackage(kind, id, mode, port) {
177
302
  }
178
303
  }
179
304
  // The reverse gate is explicit.
180
- const minEngineVersion = getString(descriptor, "minEngineVersion");
181
- if (minEngineVersion === undefined) {
182
- return (0, neverthrow_1.err)(userError(exports.VALIDATE_MIN_ENGINE_MISSING, `${pkg}: descriptor.json must declare minEngineVersion (the reverse compatibility signal)`));
183
- }
184
- if (mode === "load" && compareSemver(port.engineVersion(), minEngineVersion) < 0) {
185
- return (0, neverthrow_1.err)(userError(exports.VALIDATE_ENGINE_TOO_OLD, `${pkg}: requires engine ${minEngineVersion}, but this engine is ${port.engineVersion()}; upgrade the engine (no silent fallback)`));
305
+ const minEngineResult = mode === "load"
306
+ ? validateMinEngineVersion(kind, id, descriptor, port.engineVersion(), userError)
307
+ : (0, neverthrow_1.ok)(minEngineVersion);
308
+ if (minEngineResult.isErr()) {
309
+ return (0, neverthrow_1.err)(minEngineResult.error);
186
310
  }
187
- return (0, neverthrow_1.ok)({ descriptor, minEngineVersion, contentFiles });
311
+ return (0, neverthrow_1.ok)({ descriptor, minEngineVersion: minEngineResult.value, contentFiles });
188
312
  }
189
313
  //# sourceMappingURL=validateTemplatePackage.js.map