@microsoft/apps-cli 0.0.1 → 0.4.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 (334) hide show
  1. package/README.md +281 -1
  2. package/dist/ArgumentProvider.d.ts +102 -0
  3. package/dist/ArgumentProvider.d.ts.map +1 -0
  4. package/dist/ArgumentProvider.js +376 -0
  5. package/dist/ArgumentProvider.js.map +1 -0
  6. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +18 -0
  7. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
  8. package/dist/Authentication/NodeMsalAuthenticationProvider.js +99 -0
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
  10. package/dist/Authentication/OrchardAuthenticationProvider.d.ts +13 -0
  11. package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +1 -0
  12. package/dist/Authentication/OrchardAuthenticationProvider.js +30 -0
  13. package/dist/Authentication/OrchardAuthenticationProvider.js.map +1 -0
  14. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +23 -0
  15. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
  16. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +60 -0
  17. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
  18. package/dist/Bin.d.ts +6 -0
  19. package/dist/Bin.d.ts.map +1 -0
  20. package/dist/Bin.js +7 -0
  21. package/dist/Bin.js.map +1 -0
  22. package/dist/Cli.d.ts +2 -0
  23. package/dist/Cli.d.ts.map +1 -0
  24. package/dist/Cli.js +95 -0
  25. package/dist/Cli.js.map +1 -0
  26. package/dist/CliSettings.d.ts +14 -0
  27. package/dist/CliSettings.d.ts.map +1 -0
  28. package/dist/CliSettings.js +76 -0
  29. package/dist/CliSettings.js.map +1 -0
  30. package/dist/CliUtils.d.ts +92 -0
  31. package/dist/CliUtils.d.ts.map +1 -0
  32. package/dist/CliUtils.js +218 -0
  33. package/dist/CliUtils.js.map +1 -0
  34. package/dist/Constants/CliConstants.d.ts +6 -0
  35. package/dist/Constants/CliConstants.d.ts.map +1 -0
  36. package/dist/Constants/CliConstants.js +6 -0
  37. package/dist/Constants/CliConstants.js.map +1 -0
  38. package/dist/Constants/CommandRegistry.d.ts +23 -0
  39. package/dist/Constants/CommandRegistry.d.ts.map +1 -0
  40. package/dist/Constants/CommandRegistry.js +197 -0
  41. package/dist/Constants/CommandRegistry.js.map +1 -0
  42. package/dist/Constants/HelpStrings.d.ts +329 -0
  43. package/dist/Constants/HelpStrings.d.ts.map +1 -0
  44. package/dist/Constants/HelpStrings.js +451 -0
  45. package/dist/Constants/HelpStrings.js.map +1 -0
  46. package/dist/Constants.d.ts +10 -0
  47. package/dist/Constants.d.ts.map +1 -0
  48. package/dist/Constants.js +18 -0
  49. package/dist/Constants.js.map +1 -0
  50. package/dist/Errors/CliError.d.ts +5 -0
  51. package/dist/Errors/CliError.d.ts.map +1 -0
  52. package/dist/Errors/CliError.js +7 -0
  53. package/dist/Errors/CliError.js.map +1 -0
  54. package/dist/FS/CliFs.d.ts +41 -0
  55. package/dist/FS/CliFs.d.ts.map +1 -0
  56. package/dist/FS/CliFs.js +136 -0
  57. package/dist/FS/CliFs.js.map +1 -0
  58. package/dist/HttpClient/CliHttpClient.d.ts +24 -0
  59. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
  60. package/dist/HttpClient/CliHttpClient.js +122 -0
  61. package/dist/HttpClient/CliHttpClient.js.map +1 -0
  62. package/dist/HttpClient/OrchardProxy.d.ts +11 -0
  63. package/dist/HttpClient/OrchardProxy.d.ts.map +1 -0
  64. package/dist/HttpClient/OrchardProxy.js +25 -0
  65. package/dist/HttpClient/OrchardProxy.js.map +1 -0
  66. package/dist/HttpClient/Proxy.d.ts +7 -0
  67. package/dist/HttpClient/Proxy.d.ts.map +1 -0
  68. package/dist/HttpClient/Proxy.js +5 -0
  69. package/dist/HttpClient/Proxy.js.map +1 -0
  70. package/dist/Logger/CliLogger.d.ts +35 -0
  71. package/dist/Logger/CliLogger.d.ts.map +1 -0
  72. package/dist/Logger/CliLogger.js +237 -0
  73. package/dist/Logger/CliLogger.js.map +1 -0
  74. package/dist/Logger/ConsoleWriter.d.ts +15 -0
  75. package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
  76. package/dist/Logger/ConsoleWriter.js +45 -0
  77. package/dist/Logger/ConsoleWriter.js.map +1 -0
  78. package/dist/Logger/Constants.d.ts +6 -0
  79. package/dist/Logger/Constants.d.ts.map +1 -0
  80. package/dist/Logger/Constants.js +15 -0
  81. package/dist/Logger/Constants.js.map +1 -0
  82. package/dist/Logger/LoggerSettings.d.ts +19 -0
  83. package/dist/Logger/LoggerSettings.d.ts.map +1 -0
  84. package/dist/Logger/LoggerSettings.js +114 -0
  85. package/dist/Logger/LoggerSettings.js.map +1 -0
  86. package/dist/Logger/OneDSWriter.d.ts +22 -0
  87. package/dist/Logger/OneDSWriter.d.ts.map +1 -0
  88. package/dist/Logger/OneDSWriter.js +129 -0
  89. package/dist/Logger/OneDSWriter.js.map +1 -0
  90. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
  91. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
  92. package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
  93. package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
  94. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
  95. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
  96. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
  97. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
  98. package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
  99. package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
  100. package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
  101. package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
  102. package/dist/Types/Argument.types.d.ts +27 -0
  103. package/dist/Types/Argument.types.d.ts.map +1 -0
  104. package/dist/Types/Argument.types.js +5 -0
  105. package/dist/Types/Argument.types.js.map +1 -0
  106. package/dist/Types/Cli.types.d.ts +32 -0
  107. package/dist/Types/Cli.types.d.ts.map +1 -0
  108. package/dist/Types/Cli.types.js +5 -0
  109. package/dist/Types/Cli.types.js.map +1 -0
  110. package/dist/Types/Command.types.d.ts +52 -0
  111. package/dist/Types/Command.types.d.ts.map +1 -0
  112. package/dist/Types/Command.types.js +8 -0
  113. package/dist/Types/Command.types.js.map +1 -0
  114. package/dist/Types/Datasource.types.d.ts +43 -0
  115. package/dist/Types/Datasource.types.d.ts.map +1 -0
  116. package/dist/Types/Datasource.types.js +5 -0
  117. package/dist/Types/Datasource.types.js.map +1 -0
  118. package/dist/Types/LoggerTypes.types.d.ts +17 -0
  119. package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
  120. package/dist/Types/LoggerTypes.types.js +5 -0
  121. package/dist/Types/LoggerTypes.types.js.map +1 -0
  122. package/dist/Utils/BuildVerbDescriptionTable.d.ts +19 -0
  123. package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
  124. package/dist/Utils/BuildVerbDescriptionTable.js +87 -0
  125. package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
  126. package/dist/Utils/ConsoleOutput.d.ts +80 -0
  127. package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
  128. package/dist/Utils/ConsoleOutput.js +151 -0
  129. package/dist/Utils/ConsoleOutput.js.map +1 -0
  130. package/dist/Utils/DetectPackageManager.d.ts +9 -0
  131. package/dist/Utils/DetectPackageManager.d.ts.map +1 -0
  132. package/dist/Utils/DetectPackageManager.js +24 -0
  133. package/dist/Utils/DetectPackageManager.js.map +1 -0
  134. package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
  135. package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
  136. package/dist/Utils/EnhanceNetworkError.js +59 -0
  137. package/dist/Utils/EnhanceNetworkError.js.map +1 -0
  138. package/dist/Utils/EnvVars.d.ts +17 -0
  139. package/dist/Utils/EnvVars.d.ts.map +1 -0
  140. package/dist/Utils/EnvVars.js +38 -0
  141. package/dist/Utils/EnvVars.js.map +1 -0
  142. package/dist/Utils/GitCredentialConfig.d.ts +12 -0
  143. package/dist/Utils/GitCredentialConfig.d.ts.map +1 -0
  144. package/dist/Utils/GitCredentialConfig.js +32 -0
  145. package/dist/Utils/GitCredentialConfig.js.map +1 -0
  146. package/dist/Utils/GitUtils.d.ts +22 -0
  147. package/dist/Utils/GitUtils.d.ts.map +1 -0
  148. package/dist/Utils/GitUtils.js +35 -0
  149. package/dist/Utils/GitUtils.js.map +1 -0
  150. package/dist/Utils/Paging.d.ts +23 -0
  151. package/dist/Utils/Paging.d.ts.map +1 -0
  152. package/dist/Utils/Paging.js +67 -0
  153. package/dist/Utils/Paging.js.map +1 -0
  154. package/dist/Utils/ReadPackageJson.d.ts +9 -0
  155. package/dist/Utils/ReadPackageJson.d.ts.map +1 -0
  156. package/dist/Utils/ReadPackageJson.js +13 -0
  157. package/dist/Utils/ReadPackageJson.js.map +1 -0
  158. package/dist/Utils/ResolveCommand.d.ts +26 -0
  159. package/dist/Utils/ResolveCommand.d.ts.map +1 -0
  160. package/dist/Utils/ResolveCommand.js +62 -0
  161. package/dist/Utils/ResolveCommand.js.map +1 -0
  162. package/dist/Utils/RunCommand.d.ts +13 -0
  163. package/dist/Utils/RunCommand.d.ts.map +1 -0
  164. package/dist/Utils/RunCommand.js +35 -0
  165. package/dist/Utils/RunCommand.js.map +1 -0
  166. package/dist/Utils/Spinner.d.ts +15 -0
  167. package/dist/Utils/Spinner.d.ts.map +1 -0
  168. package/dist/Utils/Spinner.js +71 -0
  169. package/dist/Utils/Spinner.js.map +1 -0
  170. package/dist/Utils/zipBuildArtifact.d.ts +35 -0
  171. package/dist/Utils/zipBuildArtifact.d.ts.map +1 -0
  172. package/dist/Utils/zipBuildArtifact.js +100 -0
  173. package/dist/Utils/zipBuildArtifact.js.map +1 -0
  174. package/dist/Verbs/AddAction.d.ts +6 -0
  175. package/dist/Verbs/AddAction.d.ts.map +1 -0
  176. package/dist/Verbs/AddAction.js +87 -0
  177. package/dist/Verbs/AddAction.js.map +1 -0
  178. package/dist/Verbs/AddDataSource.d.ts +19 -0
  179. package/dist/Verbs/AddDataSource.d.ts.map +1 -0
  180. package/dist/Verbs/AddDataSource.js +174 -0
  181. package/dist/Verbs/AddDataSource.js.map +1 -0
  182. package/dist/Verbs/AddFlow.d.ts +12 -0
  183. package/dist/Verbs/AddFlow.d.ts.map +1 -0
  184. package/dist/Verbs/AddFlow.js +67 -0
  185. package/dist/Verbs/AddFlow.js.map +1 -0
  186. package/dist/Verbs/AddTable.d.ts +6 -0
  187. package/dist/Verbs/AddTable.d.ts.map +1 -0
  188. package/dist/Verbs/AddTable.js +163 -0
  189. package/dist/Verbs/AddTable.js.map +1 -0
  190. package/dist/Verbs/AuthStatus.d.ts +6 -0
  191. package/dist/Verbs/AuthStatus.d.ts.map +1 -0
  192. package/dist/Verbs/AuthStatus.js +18 -0
  193. package/dist/Verbs/AuthStatus.js.map +1 -0
  194. package/dist/Verbs/BuildMaafApp.d.ts +6 -0
  195. package/dist/Verbs/BuildMaafApp.d.ts.map +1 -0
  196. package/dist/Verbs/BuildMaafApp.js +97 -0
  197. package/dist/Verbs/BuildMaafApp.js.map +1 -0
  198. package/dist/Verbs/ConnectorHelpers.d.ts +37 -0
  199. package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -0
  200. package/dist/Verbs/ConnectorHelpers.js +116 -0
  201. package/dist/Verbs/ConnectorHelpers.js.map +1 -0
  202. package/dist/Verbs/CreateMaafApp.d.ts +25 -0
  203. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -0
  204. package/dist/Verbs/CreateMaafApp.js +565 -0
  205. package/dist/Verbs/CreateMaafApp.js.map +1 -0
  206. package/dist/Verbs/DeleteDataSource.d.ts +6 -0
  207. package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
  208. package/dist/Verbs/DeleteDataSource.js +106 -0
  209. package/dist/Verbs/DeleteDataSource.js.map +1 -0
  210. package/dist/Verbs/DeleteMaafApp.d.ts +23 -0
  211. package/dist/Verbs/DeleteMaafApp.d.ts.map +1 -0
  212. package/dist/Verbs/DeleteMaafApp.js +99 -0
  213. package/dist/Verbs/DeleteMaafApp.js.map +1 -0
  214. package/dist/Verbs/DeployMaafApp.d.ts +6 -0
  215. package/dist/Verbs/DeployMaafApp.d.ts.map +1 -0
  216. package/dist/Verbs/DeployMaafApp.js +96 -0
  217. package/dist/Verbs/DeployMaafApp.js.map +1 -0
  218. package/dist/Verbs/Dev.d.ts +6 -0
  219. package/dist/Verbs/Dev.d.ts.map +1 -0
  220. package/dist/Verbs/Dev.js +214 -0
  221. package/dist/Verbs/Dev.js.map +1 -0
  222. package/dist/Verbs/FindDataverseApi.d.ts +12 -0
  223. package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
  224. package/dist/Verbs/FindDataverseApi.js +101 -0
  225. package/dist/Verbs/FindDataverseApi.js.map +1 -0
  226. package/dist/Verbs/GetMaafApp.d.ts +6 -0
  227. package/dist/Verbs/GetMaafApp.d.ts.map +1 -0
  228. package/dist/Verbs/GetMaafApp.js +60 -0
  229. package/dist/Verbs/GetMaafApp.js.map +1 -0
  230. package/dist/Verbs/GetMaafBuildStatus.d.ts +6 -0
  231. package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -0
  232. package/dist/Verbs/GetMaafBuildStatus.js +68 -0
  233. package/dist/Verbs/GetMaafBuildStatus.js.map +1 -0
  234. package/dist/Verbs/GetSettings.d.ts +12 -0
  235. package/dist/Verbs/GetSettings.d.ts.map +1 -0
  236. package/dist/Verbs/GetSettings.js +48 -0
  237. package/dist/Verbs/GetSettings.js.map +1 -0
  238. package/dist/Verbs/Init.d.ts +6 -0
  239. package/dist/Verbs/Init.d.ts.map +1 -0
  240. package/dist/Verbs/Init.js +172 -0
  241. package/dist/Verbs/Init.js.map +1 -0
  242. package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
  243. package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
  244. package/dist/Verbs/ListConnectionReferences.js +70 -0
  245. package/dist/Verbs/ListConnectionReferences.js.map +1 -0
  246. package/dist/Verbs/ListConnectorActions.d.ts +6 -0
  247. package/dist/Verbs/ListConnectorActions.d.ts.map +1 -0
  248. package/dist/Verbs/ListConnectorActions.js +79 -0
  249. package/dist/Verbs/ListConnectorActions.js.map +1 -0
  250. package/dist/Verbs/ListConnectors.d.ts +6 -0
  251. package/dist/Verbs/ListConnectors.d.ts.map +1 -0
  252. package/dist/Verbs/ListConnectors.js +66 -0
  253. package/dist/Verbs/ListConnectors.js.map +1 -0
  254. package/dist/Verbs/ListDatasets.d.ts +6 -0
  255. package/dist/Verbs/ListDatasets.d.ts.map +1 -0
  256. package/dist/Verbs/ListDatasets.js +83 -0
  257. package/dist/Verbs/ListDatasets.js.map +1 -0
  258. package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
  259. package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
  260. package/dist/Verbs/ListEnvironmentVariables.js +66 -0
  261. package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
  262. package/dist/Verbs/ListFlows.d.ts +13 -0
  263. package/dist/Verbs/ListFlows.d.ts.map +1 -0
  264. package/dist/Verbs/ListFlows.js +88 -0
  265. package/dist/Verbs/ListFlows.js.map +1 -0
  266. package/dist/Verbs/ListMaafApps.d.ts +71 -0
  267. package/dist/Verbs/ListMaafApps.d.ts.map +1 -0
  268. package/dist/Verbs/ListMaafApps.js +168 -0
  269. package/dist/Verbs/ListMaafApps.js.map +1 -0
  270. package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
  271. package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
  272. package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
  273. package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
  274. package/dist/Verbs/ListTables.d.ts +6 -0
  275. package/dist/Verbs/ListTables.d.ts.map +1 -0
  276. package/dist/Verbs/ListTables.js +95 -0
  277. package/dist/Verbs/ListTables.js.map +1 -0
  278. package/dist/Verbs/Login.d.ts +6 -0
  279. package/dist/Verbs/Login.d.ts.map +1 -0
  280. package/dist/Verbs/Login.js +28 -0
  281. package/dist/Verbs/Login.js.map +1 -0
  282. package/dist/Verbs/Logout.d.ts +6 -0
  283. package/dist/Verbs/Logout.d.ts.map +1 -0
  284. package/dist/Verbs/Logout.js +28 -0
  285. package/dist/Verbs/Logout.js.map +1 -0
  286. package/dist/Verbs/MaafAppPermissions.d.ts +23 -0
  287. package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -0
  288. package/dist/Verbs/MaafAppPermissions.js +278 -0
  289. package/dist/Verbs/MaafAppPermissions.js.map +1 -0
  290. package/dist/Verbs/Pack.d.ts +38 -0
  291. package/dist/Verbs/Pack.d.ts.map +1 -0
  292. package/dist/Verbs/Pack.js +106 -0
  293. package/dist/Verbs/Pack.js.map +1 -0
  294. package/dist/Verbs/PushMaafApp.d.ts +6 -0
  295. package/dist/Verbs/PushMaafApp.d.ts.map +1 -0
  296. package/dist/Verbs/PushMaafApp.js +145 -0
  297. package/dist/Verbs/PushMaafApp.js.map +1 -0
  298. package/dist/Verbs/RefreshDataSource.d.ts +6 -0
  299. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
  300. package/dist/Verbs/RefreshDataSource.js +72 -0
  301. package/dist/Verbs/RefreshDataSource.js.map +1 -0
  302. package/dist/Verbs/RemoveFlow.d.ts +12 -0
  303. package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
  304. package/dist/Verbs/RemoveFlow.js +99 -0
  305. package/dist/Verbs/RemoveFlow.js.map +1 -0
  306. package/dist/Verbs/SetSetting.d.ts +12 -0
  307. package/dist/Verbs/SetSetting.d.ts.map +1 -0
  308. package/dist/Verbs/SetSetting.js +142 -0
  309. package/dist/Verbs/SetSetting.js.map +1 -0
  310. package/dist/Verbs/ShareMaafApp.d.ts +12 -0
  311. package/dist/Verbs/ShareMaafApp.d.ts.map +1 -0
  312. package/dist/Verbs/ShareMaafApp.js +14 -0
  313. package/dist/Verbs/ShareMaafApp.js.map +1 -0
  314. package/dist/Verbs/ShowMaafApp.d.ts +94 -0
  315. package/dist/Verbs/ShowMaafApp.d.ts.map +1 -0
  316. package/dist/Verbs/ShowMaafApp.js +216 -0
  317. package/dist/Verbs/ShowMaafApp.js.map +1 -0
  318. package/dist/Verbs/TelemetrySettings.d.ts +8 -0
  319. package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
  320. package/dist/Verbs/TelemetrySettings.js +104 -0
  321. package/dist/Verbs/TelemetrySettings.js.map +1 -0
  322. package/dist/Verbs/UnshareMaafApp.d.ts +12 -0
  323. package/dist/Verbs/UnshareMaafApp.d.ts.map +1 -0
  324. package/dist/Verbs/UnshareMaafApp.js +14 -0
  325. package/dist/Verbs/UnshareMaafApp.js.map +1 -0
  326. package/dist/Verbs/VerbConstants.d.ts +433 -0
  327. package/dist/Verbs/VerbConstants.d.ts.map +1 -0
  328. package/dist/Verbs/VerbConstants.js +403 -0
  329. package/dist/Verbs/VerbConstants.js.map +1 -0
  330. package/dist/Verbs/index.d.ts +40 -0
  331. package/dist/Verbs/index.d.ts.map +1 -0
  332. package/dist/Verbs/index.js +40 -0
  333. package/dist/Verbs/index.js.map +1 -0
  334. package/package.json +43 -3
@@ -0,0 +1,67 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import chalk from 'chalk';
5
+ import * as readline from 'readline';
6
+ import { printTable } from './ConsoleOutput.js';
7
+ export const PAGE_SIZE = 20;
8
+ /**
9
+ * Waits for a keypress in raw TTY mode.
10
+ * Enter/Space = continue, Esc/q = exit, Ctrl+C = process exit.
11
+ */
12
+ export async function waitForPageKey() {
13
+ return new Promise((resolve) => {
14
+ readline.emitKeypressEvents(process.stdin);
15
+ if (process.stdin.isTTY) {
16
+ process.stdin.setRawMode(true);
17
+ }
18
+ process.stdin.resume();
19
+ const handler = (_str, key) => {
20
+ process.stdin.removeListener('keypress', handler);
21
+ if (process.stdin.isTTY) {
22
+ process.stdin.setRawMode(false);
23
+ }
24
+ process.stdin.pause();
25
+ if (key.ctrl && key.name === 'c') {
26
+ process.exit(0);
27
+ }
28
+ if (key.name === 'escape' || key.name === 'q') {
29
+ resolve('exit');
30
+ }
31
+ else {
32
+ resolve('continue');
33
+ }
34
+ };
35
+ process.stdin.on('keypress', handler);
36
+ });
37
+ }
38
+ /**
39
+ * Prints a paginated table in TTY mode (20 rows per page, Enter/Esc to navigate)
40
+ * or a single full table in non-TTY/piped mode.
41
+ */
42
+ export async function printPagedTable(options) {
43
+ const { title, metadata, columns, rows, emptyMessage, totalLabel } = options;
44
+ const total = rows.length;
45
+ if (!process.stdout.isTTY) {
46
+ printTable({ title, metadata, columns, rows, emptyMessage });
47
+ console.log(chalk.dim(` Showing ${total} of ${total} ${totalLabel}`));
48
+ return;
49
+ }
50
+ const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE));
51
+ for (let page = 0; page < totalPages; page++) {
52
+ const start = page * PAGE_SIZE;
53
+ const pageRows = rows.slice(start, start + PAGE_SIZE);
54
+ const isLastPage = page === totalPages - 1;
55
+ printTable({ title, metadata, columns, rows: pageRows, emptyMessage });
56
+ console.log(chalk.dim(` Showing ${start + pageRows.length} of ${total} ${totalLabel}`));
57
+ if (!isLastPage) {
58
+ console.log(chalk.dim(' Press Enter for more, Esc or q to exit'));
59
+ }
60
+ if (isLastPage)
61
+ break;
62
+ const action = await waitForPageKey();
63
+ if (action === 'exit')
64
+ break;
65
+ }
66
+ }
67
+ //# sourceMappingURL=Paging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paging.js","sourceRoot":"","sources":["../../src/Utils/Paging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ export interface PackageJson {
5
+ scripts?: Record<string, string>;
6
+ packageManager?: string;
7
+ }
8
+ export declare function readPackageJson(projectRoot: string): PackageJson;
9
+ //# sourceMappingURL=ReadPackageJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadPackageJson.d.ts","sourceRoot":"","sources":["../../src/Utils/ReadPackageJson.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAMhE"}
@@ -0,0 +1,13 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ export function readPackageJson(projectRoot) {
7
+ const pkgPath = path.join(projectRoot, 'package.json');
8
+ if (!fs.existsSync(pkgPath)) {
9
+ return {};
10
+ }
11
+ return JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
12
+ }
13
+ //# sourceMappingURL=ReadPackageJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadPackageJson.js","sourceRoot":"","sources":["../../src/Utils/ReadPackageJson.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAgB,CAAC;AACrE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { CommandTree, NounKey, ResolvedCommand } from '../Types/Command.types.js';
5
+ /**
6
+ * Resolves command-line tokens against the command tree.
7
+ *
8
+ * Every command lives under a noun, so the minimum match is 2 tokens (noun + verb).
9
+ * Typed subcommands match 3 tokens (noun + verb + type).
10
+ *
11
+ * @param argv - The full process.argv array (argv[0] = node, argv[1] = script)
12
+ * @param tree - The command tree to resolve against
13
+ * @returns The resolved command, or null if no match was found
14
+ */
15
+ export declare function resolveCommand(argv: readonly string[], tree: CommandTree): ResolvedCommand | null;
16
+ /**
17
+ * Checks whether the given token is a known noun in the command tree.
18
+ * Used to distinguish `ms app` (show noun help) from `ms nonexistent` (error).
19
+ */
20
+ export declare function isKnownNoun(token: string, tree: CommandTree): token is NounKey;
21
+ /**
22
+ * Checks whether the given noun + verb combination has typed subcommands.
23
+ * Used to show the type-picker help for `ms app add --help`.
24
+ */
25
+ export declare function hasTypedSubcommands(noun: string, verb: string, tree: CommandTree): boolean;
26
+ //# sourceMappingURL=ResolveCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolveCommand.d.ts","sourceRoot":"","sources":["../../src/Utils/ResolveCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGpF;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,CAgCjG;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK,IAAI,OAAO,CAE9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAK1F"}
@@ -0,0 +1,62 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { isTypedVerbDef } from '../Types/Command.types.js';
5
+ /**
6
+ * Resolves command-line tokens against the command tree.
7
+ *
8
+ * Every command lives under a noun, so the minimum match is 2 tokens (noun + verb).
9
+ * Typed subcommands match 3 tokens (noun + verb + type).
10
+ *
11
+ * @param argv - The full process.argv array (argv[0] = node, argv[1] = script)
12
+ * @param tree - The command tree to resolve against
13
+ * @returns The resolved command, or null if no match was found
14
+ */
15
+ export function resolveCommand(argv, tree) {
16
+ const tokens = argv.slice(2);
17
+ // Skip if no tokens or first token looks like a flag
18
+ if (tokens.length === 0 || tokens[0].startsWith('-')) {
19
+ return null;
20
+ }
21
+ const [t0, t1, t2] = tokens;
22
+ if (!isKnownNoun(t0, tree))
23
+ return null;
24
+ const nounDef = tree[t0];
25
+ // Try 3-token match: noun verb type (e.g., 'app add table')
26
+ if (t1 && !t1.startsWith('-') && t2 && !t2.startsWith('-')) {
27
+ const verbEntry = nounDef.commands[t1];
28
+ if (isTypedVerbDef(verbEntry)) {
29
+ const leafDef = verbEntry.commands[t2];
30
+ if (leafDef) {
31
+ return { path: [t0, t1, t2], handler: leafDef.handler, tokensConsumed: 3 };
32
+ }
33
+ }
34
+ }
35
+ // Try 2-token match: noun verb (e.g., 'app init')
36
+ if (t1 && !t1.startsWith('-')) {
37
+ const verbEntry = nounDef.commands[t1];
38
+ if (verbEntry && !isTypedVerbDef(verbEntry)) {
39
+ return { path: [t0, t1], handler: verbEntry.handler, tokensConsumed: 2 };
40
+ }
41
+ }
42
+ return null;
43
+ }
44
+ /**
45
+ * Checks whether the given token is a known noun in the command tree.
46
+ * Used to distinguish `ms app` (show noun help) from `ms nonexistent` (error).
47
+ */
48
+ export function isKnownNoun(token, tree) {
49
+ return token in tree;
50
+ }
51
+ /**
52
+ * Checks whether the given noun + verb combination has typed subcommands.
53
+ * Used to show the type-picker help for `ms app add --help`.
54
+ */
55
+ export function hasTypedSubcommands(noun, verb, tree) {
56
+ if (!isKnownNoun(noun, tree))
57
+ return false;
58
+ const nounDef = tree[noun];
59
+ const verbEntry = nounDef.commands[verb];
60
+ return verbEntry !== undefined && isTypedVerbDef(verbEntry);
61
+ }
62
+ //# sourceMappingURL=ResolveCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolveCommand.js","sourceRoot":"","sources":["../../src/Utils/ResolveCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuB,EAAE,IAAiB;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,qDAAqD;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAEzB,4DAA4D;IAC5D,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAAiB;IAC1D,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAY,EAAE,IAAiB;IAC/E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,13 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ export interface RunCommandOptions {
5
+ /**
6
+ * When true, the child process's stdout/stderr are captured rather than inherited so
7
+ * the parent's stdout stays clean (e.g. JSON-mode callers). Captured output is
8
+ * surfaced only on failure, included in the thrown AppError's message.
9
+ */
10
+ quiet?: boolean;
11
+ }
12
+ export declare function runCommandAsync(command: string, cwd: string, options?: RunCommandOptions): Promise<void>;
13
+ //# sourceMappingURL=RunCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunCommand.d.ts","sourceRoot":"","sources":["../../src/Utils/RunCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -0,0 +1,35 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { spawn } from 'node:child_process';
5
+ import { AppError } from '../Errors/CliError.js';
6
+ export function runCommandAsync(command, cwd, options = {}) {
7
+ return new Promise((resolve, reject) => {
8
+ const quiet = options.quiet === true;
9
+ const child = spawn(command, {
10
+ cwd,
11
+ stdio: quiet ? ['ignore', 'pipe', 'pipe'] : 'inherit',
12
+ shell: true,
13
+ });
14
+ let captured = '';
15
+ if (quiet) {
16
+ child.stdout?.on('data', (chunk) => {
17
+ captured += chunk.toString();
18
+ });
19
+ child.stderr?.on('data', (chunk) => {
20
+ captured += chunk.toString();
21
+ });
22
+ }
23
+ child.on('close', (code) => {
24
+ if (code === 0) {
25
+ resolve();
26
+ return;
27
+ }
28
+ const base = `Command exited with code ${code}: ${command}`;
29
+ const message = quiet && captured.length > 0 ? `${base}\n${captured.trimEnd()}` : base;
30
+ reject(new AppError(message, code ?? 1));
31
+ });
32
+ child.on('error', reject);
33
+ });
34
+ }
35
+ //# sourceMappingURL=RunCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunCommand.js","sourceRoot":"","sources":["../../src/Utils/RunCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAW9C,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,GAAW,EACX,UAA6B,EAAE;IAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE;YAC3B,GAAG;YACH,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,4BAA4B,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ export declare class CliSpinner {
5
+ private _timer;
6
+ private _frameIndex;
7
+ private _restoreCursor;
8
+ private _handleSIGINT;
9
+ private _handleSIGTERM;
10
+ private _handleUncaughtException;
11
+ private _handleUnhandledRejection;
12
+ start(): void;
13
+ stop(): void;
14
+ }
15
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../src/Utils/Spinner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,cAAc,CAGpB;IAEF,OAAO,CAAC,aAAa,CAKnB;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,OAAO,CAAC,wBAAwB,CAK9B;IAEF,OAAO,CAAC,yBAAyB,CAI/B;IAEF,KAAK,IAAI,IAAI;IAeb,IAAI,IAAI,IAAI;CAcb"}
@@ -0,0 +1,71 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ // SYNC: this file is duplicated in packages/power-apps-cli/src/Utils/Spinner.ts.
5
+ // Changes here must be mirrored there until a shared CLI utilities package exists.
6
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
7
+ export class CliSpinner {
8
+ _timer = null;
9
+ _frameIndex = 0;
10
+ // Arrow functions so `this` is stable when passed to process.on/off.
11
+ _restoreCursor = () => {
12
+ process.stdout.write('\r\x1B[K'); // erase spinner line
13
+ process.stdout.write('\x1B[?25h'); // show cursor
14
+ };
15
+ _handleSIGINT = () => {
16
+ if (this._timer !== null)
17
+ clearInterval(this._timer);
18
+ this._restoreCursor();
19
+ // Re-raise so the process actually exits with the correct signal.
20
+ process.kill(process.pid, 'SIGINT');
21
+ };
22
+ _handleSIGTERM = () => {
23
+ if (this._timer !== null)
24
+ clearInterval(this._timer);
25
+ this._restoreCursor();
26
+ process.kill(process.pid, 'SIGTERM');
27
+ };
28
+ _handleUncaughtException = (error) => {
29
+ if (this._timer !== null)
30
+ clearInterval(this._timer);
31
+ this._restoreCursor();
32
+ // Re-throw so Node.js prints the error and exits with code 1.
33
+ throw error;
34
+ };
35
+ _handleUnhandledRejection = (reason) => {
36
+ if (this._timer !== null)
37
+ clearInterval(this._timer);
38
+ this._restoreCursor();
39
+ throw reason;
40
+ };
41
+ start() {
42
+ if (this._timer !== null)
43
+ return;
44
+ process.stdout.write('\x1B[?25l'); // hide cursor
45
+ // Restore cursor if the process exits before stop() is called normally.
46
+ process.once('exit', this._restoreCursor);
47
+ process.once('SIGINT', this._handleSIGINT);
48
+ process.once('SIGTERM', this._handleSIGTERM);
49
+ process.once('uncaughtException', this._handleUncaughtException);
50
+ process.once('unhandledRejection', this._handleUnhandledRejection);
51
+ this._timer = setInterval(() => {
52
+ process.stdout.write(`\r${SPINNER_FRAMES[this._frameIndex]}`);
53
+ this._frameIndex = (this._frameIndex + 1) % SPINNER_FRAMES.length;
54
+ }, 80);
55
+ }
56
+ stop() {
57
+ if (this._timer !== null) {
58
+ clearInterval(this._timer);
59
+ this._timer = null;
60
+ this._frameIndex = 0;
61
+ // Clean up exit handlers registered in start().
62
+ process.off('exit', this._restoreCursor);
63
+ process.off('SIGINT', this._handleSIGINT);
64
+ process.off('SIGTERM', this._handleSIGTERM);
65
+ process.off('uncaughtException', this._handleUncaughtException);
66
+ process.off('unhandledRejection', this._handleUnhandledRejection);
67
+ this._restoreCursor();
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../src/Utils/Spinner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iFAAiF;AACjF,mFAAmF;AAEnF,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1E,MAAM,OAAO,UAAU;IACb,MAAM,GAA0C,IAAI,CAAC;IACrD,WAAW,GAAG,CAAC,CAAC;IAExB,qEAAqE;IAC7D,cAAc,GAAG,GAAS,EAAE;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;IACnD,CAAC,CAAC;IAEM,aAAa,GAAG,GAAS,EAAE;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,kEAAkE;QAClE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC;IAEM,cAAc,GAAG,GAAS,EAAE;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC;IAEM,wBAAwB,GAAG,CAAC,KAAc,EAAQ,EAAE;QAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,8DAA8D;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC,CAAC;IAEM,yBAAyB,GAAG,CAAC,MAAe,EAAQ,EAAE;QAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,MAAM,CAAC;IACf,CAAC,CAAC;IAEF,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QACjD,wEAAwE;QACxE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;QACpE,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,gDAAgD;YAChD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAClE,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ /**
5
+ * Decision for a single `archiver` `'warning'` event:
6
+ * - `'continue'`: log and proceed (ENOENT — vanished file or dangling symlink).
7
+ * - `Error`: reject the archive with this error (anything else).
8
+ *
9
+ * Extracted from {@link zipBuildArtifact} so the policy can be unit-tested directly without
10
+ * needing to provoke real archiver warnings (non-ENOENT cases are hard to provoke
11
+ * cross-platform). The handler is intentionally pure: no I/O, no side effects.
12
+ */
13
+ export declare function classifyArchiveWarning(err: unknown): 'continue' | Error;
14
+ /**
15
+ * Formats the user-facing warning line for an ENOENT entry. Lives here so the test for the
16
+ * warning text doesn't have to import {@link zipBuildArtifact}'s internals.
17
+ */
18
+ export declare function formatMissingEntryWarning(err: unknown): string;
19
+ /**
20
+ * Zips the contents of `buildPath` (flattened — `buildPath`'s files appear at the zip root,
21
+ * not nested under a `build/` directory) and adds `ms.config.json` at the same root.
22
+ *
23
+ * The resulting `Buffer` is the entire zip in memory. When `maxBytes` is supplied, the helper
24
+ * counts emitted bytes as the archive streams and aborts as soon as the running total exceeds
25
+ * the cap — preventing OOM when the source tree is huge. Callers that don't enforce a cap can
26
+ * omit the option.
27
+ *
28
+ * The helper is a pure file-IO utility: it does not parse `ms.config.json`. Callers that
29
+ * need the schema (e.g. `appId`) should read it separately. ENOENT warnings during archiving
30
+ * (vanished files, dangling symlinks) are surfaced to stderr; non-ENOENT warnings reject.
31
+ */
32
+ export declare function zipBuildArtifact(buildPath: string, appConfigPath: string, options?: {
33
+ maxBytes?: number;
34
+ }): Promise<Buffer>;
35
+ //# sourceMappingURL=zipBuildArtifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipBuildArtifact.d.ts","sourceRoot":"","sources":["../../src/Utils/zipBuildArtifact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,KAAK,CAIvE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAG9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,MAAM,CAAC,CAuDjB"}
@@ -0,0 +1,100 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { promises as fs } from 'node:fs';
5
+ import { AppConfigFileName } from '@microsoft/apps-common/config';
6
+ import { BuildArtifactTooLargeError, UsageError } from '@microsoft/apps-common/errors';
7
+ import archiver from 'archiver';
8
+ import { printWarning } from './ConsoleOutput.js';
9
+ /**
10
+ * Decision for a single `archiver` `'warning'` event:
11
+ * - `'continue'`: log and proceed (ENOENT — vanished file or dangling symlink).
12
+ * - `Error`: reject the archive with this error (anything else).
13
+ *
14
+ * Extracted from {@link zipBuildArtifact} so the policy can be unit-tested directly without
15
+ * needing to provoke real archiver warnings (non-ENOENT cases are hard to provoke
16
+ * cross-platform). The handler is intentionally pure: no I/O, no side effects.
17
+ */
18
+ export function classifyArchiveWarning(err) {
19
+ const code = err?.code;
20
+ if (code === 'ENOENT')
21
+ return 'continue';
22
+ return err instanceof Error ? err : new Error(String(err));
23
+ }
24
+ /**
25
+ * Formats the user-facing warning line for an ENOENT entry. Lives here so the test for the
26
+ * warning text doesn't have to import {@link zipBuildArtifact}'s internals.
27
+ */
28
+ export function formatMissingEntryWarning(err) {
29
+ const path = err?.path ?? '<unknown>';
30
+ return `zipBuildArtifact: skipping missing entry: ${path}`;
31
+ }
32
+ /**
33
+ * Zips the contents of `buildPath` (flattened — `buildPath`'s files appear at the zip root,
34
+ * not nested under a `build/` directory) and adds `ms.config.json` at the same root.
35
+ *
36
+ * The resulting `Buffer` is the entire zip in memory. When `maxBytes` is supplied, the helper
37
+ * counts emitted bytes as the archive streams and aborts as soon as the running total exceeds
38
+ * the cap — preventing OOM when the source tree is huge. Callers that don't enforce a cap can
39
+ * omit the option.
40
+ *
41
+ * The helper is a pure file-IO utility: it does not parse `ms.config.json`. Callers that
42
+ * need the schema (e.g. `appId`) should read it separately. ENOENT warnings during archiving
43
+ * (vanished files, dangling symlinks) are surfaced to stderr; non-ENOENT warnings reject.
44
+ */
45
+ export async function zipBuildArtifact(buildPath, appConfigPath, options) {
46
+ const buildStat = await fs.stat(buildPath).catch(() => null);
47
+ if (!buildStat) {
48
+ throw new UsageError(`buildPath not found: ${buildPath}`);
49
+ }
50
+ if (!buildStat.isDirectory()) {
51
+ throw new UsageError(`buildPath is not a directory: ${buildPath}`);
52
+ }
53
+ const configStat = await fs.stat(appConfigPath).catch(() => null);
54
+ if (!configStat || !configStat.isFile()) {
55
+ throw new UsageError(`appConfigPath does not point to a file: ${appConfigPath}`);
56
+ }
57
+ const maxBytes = options?.maxBytes;
58
+ return new Promise((resolve, reject) => {
59
+ const chunks = [];
60
+ let totalBytes = 0;
61
+ let aborted = false;
62
+ const archive = archiver('zip', { zlib: { level: 9 } });
63
+ archive.on('data', (chunk) => {
64
+ if (aborted)
65
+ return;
66
+ totalBytes += chunk.length;
67
+ if (maxBytes !== undefined && totalBytes > maxBytes) {
68
+ aborted = true;
69
+ archive.abort();
70
+ reject(new BuildArtifactTooLargeError({ capBytes: maxBytes, bytes: totalBytes }));
71
+ return;
72
+ }
73
+ chunks.push(chunk);
74
+ });
75
+ archive.on('warning', (err) => {
76
+ if (aborted)
77
+ return;
78
+ const decision = classifyArchiveWarning(err);
79
+ if (decision === 'continue') {
80
+ // Surface to stderr via the CLI's logger pipeline so the line is chalk-coloured
81
+ // alongside other CLI output, and so test seams can intercept it.
82
+ printWarning(formatMissingEntryWarning(err));
83
+ return;
84
+ }
85
+ reject(decision);
86
+ });
87
+ archive.on('error', (err) => {
88
+ if (!aborted)
89
+ reject(err);
90
+ });
91
+ archive.on('end', () => {
92
+ if (!aborted)
93
+ resolve(Buffer.concat(chunks));
94
+ });
95
+ archive.directory(buildPath, false);
96
+ archive.file(appConfigPath, { name: AppConfigFileName });
97
+ void archive.finalize();
98
+ });
99
+ }
100
+ //# sourceMappingURL=zipBuildArtifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipBuildArtifact.js","sourceRoot":"","sources":["../../src/Utils/zipBuildArtifact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,MAAM,IAAI,GAAI,GAAgC,EAAE,IAAI,CAAC;IACrD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACzC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,MAAM,IAAI,GAAI,GAAgC,EAAE,IAAI,IAAI,WAAW,CAAC;IACpE,OAAO,6CAA6C,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,aAAqB,EACrB,OAA+B;IAE/B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,UAAU,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IAEnC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAExD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACnC,IAAI,OAAO;gBAAE,OAAO;YACpB,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;YAC3B,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;gBACpD,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC5B,gFAAgF;gBAChF,kEAAkE;gBAClE,YAAY,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACzD,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ export declare function addActionAsync(argumentProvider: ArgumentProvider): Promise<void>;
6
+ //# sourceMappingURL=AddAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddAction.d.ts","sourceRoot":"","sources":["../../src/Verbs/AddAction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAY5D,wBAAsB,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDtF"}
@@ -0,0 +1,87 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { addConnectorActionAsync, getPlayerServiceConfig } from '@microsoft/apps-actions';
5
+ import { getCliLogger, getSettings } from '../CliSettings.js';
6
+ import { createDefaultStringOption } from '../CliUtils.js';
7
+ import { CLI_BINARY_NAME } from '../Constants/CliConstants.js';
8
+ import { HelpStrings } from '../Constants/HelpStrings.js';
9
+ import { printInfo, printSuccess } from '../Utils/ConsoleOutput.js';
10
+ import { resolveConnectionInteractivelyAsync, runConnectorDlpPreflightAsync, } from './ConnectorHelpers.js';
11
+ import { AddActionArguments, SharedArguments } from './VerbConstants.js';
12
+ export async function addActionAsync(argumentProvider) {
13
+ const settings = getSettings();
14
+ const { fileConfig, cliFs } = settings;
15
+ createOptionSchema(argumentProvider);
16
+ await argumentProvider.runVerb();
17
+ const playerServiceConfig = getPlayerServiceConfig();
18
+ const authProvider = argumentProvider.getAuthenticationProvider();
19
+ const logger = getCliLogger();
20
+ // Commander converts kebab-case flags to camelCase attribute names — use camelCase here.
21
+ const apiId = await argumentProvider.getOption('apiId');
22
+ const connectionIdFlag = await argumentProvider.getOption('connectionId', true);
23
+ const skipCodegen = !!(await argumentProvider.getOption('skipCodegen', true));
24
+ const useV1Codegen = !!(await argumentProvider.getOption('useV1Codegen', true));
25
+ // ── Preflight: connector + DLP policy (throws on not-found or blocked) ────
26
+ const { connector } = await runConnectorDlpPreflightAsync(argumentProvider, apiId);
27
+ // ── Step 1: Does this connector require a connection? ─────────────────────
28
+ const needsConnection = (connector.properties.connectionParameterSets?.values?.length ?? 0) > 0 ||
29
+ connector.properties.metadata?.allowSharing === true;
30
+ // ── Step 2: Connection resolution ─────────────────────────────────────────
31
+ let connectionId = connectionIdFlag;
32
+ if (needsConnection && !connectionId) {
33
+ connectionId = await resolveConnectionInteractivelyAsync({
34
+ argumentProvider,
35
+ apiId,
36
+ connector,
37
+ });
38
+ }
39
+ // ── Step 3: Add the connector action ──────────────────────────────────────
40
+ const context = {
41
+ vfs: cliFs,
42
+ authProvider,
43
+ httpClient: argumentProvider.getHttpClient(),
44
+ region: playerServiceConfig.region,
45
+ environmentName: playerServiceConfig.environmentName,
46
+ actionsParams: { apiId, connectionId, skipCodegen, useV1Codegen },
47
+ localFilePaths: {
48
+ appConfigPath: fileConfig.appConfigPath,
49
+ schemaPath: fileConfig.schemaPath,
50
+ codeGenPath: fileConfig.codeGenPath,
51
+ },
52
+ logger,
53
+ };
54
+ await addConnectorActionAsync(context);
55
+ printSuccess(`Connector '${connector.properties.displayName ?? apiId}' added successfully.`);
56
+ printInfo(`Hint: Run 'npx ${CLI_BINARY_NAME} dev' to test locally, or 'npx ${CLI_BINARY_NAME} push' to deploy.`);
57
+ }
58
+ function createOptionSchema(argumentProvider) {
59
+ argumentProvider.setDescription(HelpStrings.app.add.action.description);
60
+ argumentProvider.addExamples(HelpStrings.app.add.action.examples);
61
+ argumentProvider.addOptions([
62
+ createDefaultStringOption({
63
+ flags: { key: SharedArguments.ApiId.name, alias: SharedArguments.ApiId.alias },
64
+ env: SharedArguments.ApiId.envVar,
65
+ message: SharedArguments.ApiId.promptMessage,
66
+ description: HelpStrings.app.add.action.options.apiId,
67
+ }),
68
+ {
69
+ flags: { key: SharedArguments.ConnectionId.name, alias: SharedArguments.ConnectionId.alias },
70
+ env: SharedArguments.ConnectionId.envVar,
71
+ description: HelpStrings.app.add.action.options.connectionId,
72
+ optionalInNonInteractive: true,
73
+ },
74
+ ]);
75
+ argumentProvider.addSwitch({
76
+ flags: { key: AddActionArguments.SkipCodegen.name },
77
+ env: AddActionArguments.SkipCodegen.env,
78
+ description: HelpStrings.app.add.action.options.skipCodegen,
79
+ });
80
+ argumentProvider.addSwitch({
81
+ flags: { key: AddActionArguments.UseV1Codegen.name },
82
+ env: AddActionArguments.UseV1Codegen.env,
83
+ description: 'Use V1 (legacy) code generation instead of V2.',
84
+ hidden: true,
85
+ });
86
+ }
87
+ //# sourceMappingURL=AddAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddAction.js","sourceRoot":"","sources":["../../src/Verbs/AddAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Adds a data source based on the provided environment variables.
7
+ * It supports both Dataverse and connector data sources.
8
+ * Expects the following environment variables:
9
+ * - MS_CLI_API_ID: The ID of the API (e.g., 'dataverse' or a connector ID)
10
+ * - MS_CLI_CONNECTION_ID?: The ID of the connection (for connector data sources)
11
+ * - MS_CLI_TABLE?: The table name for Dataverse or tabular connector data sources
12
+ * - MS_CLI_ENV_URL?: The environment URL for Dataverse data sources
13
+ * - MS_CLI_DATASET?: The dataset name for tabular/stored proc connector data sources
14
+ * - MS_CLI_SQL_STORED_PROCEDURE?: The name of the SQL stored procedure for connector data sources
15
+ * @param config - Local file paths configuration
16
+ * @returns Promise<void>
17
+ */
18
+ export declare function addDataSourceAsync(argumentProvider: ArgumentProvider): Promise<void>;
19
+ //# sourceMappingURL=AddDataSource.d.ts.map