@microsoft/managed-apps-cli 0.5.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 (331) hide show
  1. package/LICENSE +153 -0
  2. package/README.md +280 -0
  3. package/dist/ArgumentProvider.d.ts +102 -0
  4. package/dist/ArgumentProvider.d.ts.map +1 -0
  5. package/dist/ArgumentProvider.js +376 -0
  6. package/dist/ArgumentProvider.js.map +1 -0
  7. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +18 -0
  8. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.js +99 -0
  10. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
  11. package/dist/Authentication/OrchardAuthenticationProvider.d.ts +13 -0
  12. package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +1 -0
  13. package/dist/Authentication/OrchardAuthenticationProvider.js +30 -0
  14. package/dist/Authentication/OrchardAuthenticationProvider.js.map +1 -0
  15. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +23 -0
  16. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
  17. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +60 -0
  18. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
  19. package/dist/Bin.d.ts +6 -0
  20. package/dist/Bin.d.ts.map +1 -0
  21. package/dist/Bin.js +7 -0
  22. package/dist/Bin.js.map +1 -0
  23. package/dist/Cli.d.ts +2 -0
  24. package/dist/Cli.d.ts.map +1 -0
  25. package/dist/Cli.js +91 -0
  26. package/dist/Cli.js.map +1 -0
  27. package/dist/CliSettings.d.ts +14 -0
  28. package/dist/CliSettings.d.ts.map +1 -0
  29. package/dist/CliSettings.js +78 -0
  30. package/dist/CliSettings.js.map +1 -0
  31. package/dist/CliUtils.d.ts +92 -0
  32. package/dist/CliUtils.d.ts.map +1 -0
  33. package/dist/CliUtils.js +218 -0
  34. package/dist/CliUtils.js.map +1 -0
  35. package/dist/Constants/CliConstants.d.ts +6 -0
  36. package/dist/Constants/CliConstants.d.ts.map +1 -0
  37. package/dist/Constants/CliConstants.js +6 -0
  38. package/dist/Constants/CliConstants.js.map +1 -0
  39. package/dist/Constants/CommandRegistry.d.ts +23 -0
  40. package/dist/Constants/CommandRegistry.d.ts.map +1 -0
  41. package/dist/Constants/CommandRegistry.js +193 -0
  42. package/dist/Constants/CommandRegistry.js.map +1 -0
  43. package/dist/Constants/HelpStrings.d.ts +321 -0
  44. package/dist/Constants/HelpStrings.d.ts.map +1 -0
  45. package/dist/Constants/HelpStrings.js +438 -0
  46. package/dist/Constants/HelpStrings.js.map +1 -0
  47. package/dist/Constants.d.ts +10 -0
  48. package/dist/Constants.d.ts.map +1 -0
  49. package/dist/Constants.js +18 -0
  50. package/dist/Constants.js.map +1 -0
  51. package/dist/Errors/CliError.d.ts +5 -0
  52. package/dist/Errors/CliError.d.ts.map +1 -0
  53. package/dist/Errors/CliError.js +7 -0
  54. package/dist/Errors/CliError.js.map +1 -0
  55. package/dist/FS/CliFs.d.ts +41 -0
  56. package/dist/FS/CliFs.d.ts.map +1 -0
  57. package/dist/FS/CliFs.js +136 -0
  58. package/dist/FS/CliFs.js.map +1 -0
  59. package/dist/HttpClient/CliHttpClient.d.ts +24 -0
  60. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
  61. package/dist/HttpClient/CliHttpClient.js +122 -0
  62. package/dist/HttpClient/CliHttpClient.js.map +1 -0
  63. package/dist/HttpClient/OrchardProxy.d.ts +11 -0
  64. package/dist/HttpClient/OrchardProxy.d.ts.map +1 -0
  65. package/dist/HttpClient/OrchardProxy.js +25 -0
  66. package/dist/HttpClient/OrchardProxy.js.map +1 -0
  67. package/dist/HttpClient/Proxy.d.ts +7 -0
  68. package/dist/HttpClient/Proxy.d.ts.map +1 -0
  69. package/dist/HttpClient/Proxy.js +5 -0
  70. package/dist/HttpClient/Proxy.js.map +1 -0
  71. package/dist/Logger/CliLogger.d.ts +36 -0
  72. package/dist/Logger/CliLogger.d.ts.map +1 -0
  73. package/dist/Logger/CliLogger.js +235 -0
  74. package/dist/Logger/CliLogger.js.map +1 -0
  75. package/dist/Logger/ConsoleWriter.d.ts +15 -0
  76. package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
  77. package/dist/Logger/ConsoleWriter.js +45 -0
  78. package/dist/Logger/ConsoleWriter.js.map +1 -0
  79. package/dist/Logger/Constants.d.ts +6 -0
  80. package/dist/Logger/Constants.d.ts.map +1 -0
  81. package/dist/Logger/Constants.js +15 -0
  82. package/dist/Logger/Constants.js.map +1 -0
  83. package/dist/Logger/LoggerSettings.d.ts +19 -0
  84. package/dist/Logger/LoggerSettings.d.ts.map +1 -0
  85. package/dist/Logger/LoggerSettings.js +114 -0
  86. package/dist/Logger/LoggerSettings.js.map +1 -0
  87. package/dist/Logger/OneDSWriter.d.ts +22 -0
  88. package/dist/Logger/OneDSWriter.d.ts.map +1 -0
  89. package/dist/Logger/OneDSWriter.js +129 -0
  90. package/dist/Logger/OneDSWriter.js.map +1 -0
  91. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
  92. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
  93. package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
  94. package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
  95. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
  96. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
  97. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
  98. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
  99. package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
  100. package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
  101. package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
  102. package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
  103. package/dist/Types/Argument.types.d.ts +27 -0
  104. package/dist/Types/Argument.types.d.ts.map +1 -0
  105. package/dist/Types/Argument.types.js +5 -0
  106. package/dist/Types/Argument.types.js.map +1 -0
  107. package/dist/Types/Cli.types.d.ts +32 -0
  108. package/dist/Types/Cli.types.d.ts.map +1 -0
  109. package/dist/Types/Cli.types.js +5 -0
  110. package/dist/Types/Cli.types.js.map +1 -0
  111. package/dist/Types/Command.types.d.ts +52 -0
  112. package/dist/Types/Command.types.d.ts.map +1 -0
  113. package/dist/Types/Command.types.js +8 -0
  114. package/dist/Types/Command.types.js.map +1 -0
  115. package/dist/Types/Datasource.types.d.ts +43 -0
  116. package/dist/Types/Datasource.types.d.ts.map +1 -0
  117. package/dist/Types/Datasource.types.js +5 -0
  118. package/dist/Types/Datasource.types.js.map +1 -0
  119. package/dist/Types/LoggerTypes.types.d.ts +17 -0
  120. package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
  121. package/dist/Types/LoggerTypes.types.js +5 -0
  122. package/dist/Types/LoggerTypes.types.js.map +1 -0
  123. package/dist/Utils/BuildVerbDescriptionTable.d.ts +19 -0
  124. package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
  125. package/dist/Utils/BuildVerbDescriptionTable.js +87 -0
  126. package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
  127. package/dist/Utils/ConsoleOutput.d.ts +80 -0
  128. package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
  129. package/dist/Utils/ConsoleOutput.js +151 -0
  130. package/dist/Utils/ConsoleOutput.js.map +1 -0
  131. package/dist/Utils/DetectPackageManager.d.ts +9 -0
  132. package/dist/Utils/DetectPackageManager.d.ts.map +1 -0
  133. package/dist/Utils/DetectPackageManager.js +24 -0
  134. package/dist/Utils/DetectPackageManager.js.map +1 -0
  135. package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
  136. package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
  137. package/dist/Utils/EnhanceNetworkError.js +59 -0
  138. package/dist/Utils/EnhanceNetworkError.js.map +1 -0
  139. package/dist/Utils/EnvVars.d.ts +17 -0
  140. package/dist/Utils/EnvVars.d.ts.map +1 -0
  141. package/dist/Utils/EnvVars.js +38 -0
  142. package/dist/Utils/EnvVars.js.map +1 -0
  143. package/dist/Utils/GitCredentialConfig.d.ts +12 -0
  144. package/dist/Utils/GitCredentialConfig.d.ts.map +1 -0
  145. package/dist/Utils/GitCredentialConfig.js +32 -0
  146. package/dist/Utils/GitCredentialConfig.js.map +1 -0
  147. package/dist/Utils/GitUtils.d.ts +22 -0
  148. package/dist/Utils/GitUtils.d.ts.map +1 -0
  149. package/dist/Utils/GitUtils.js +35 -0
  150. package/dist/Utils/GitUtils.js.map +1 -0
  151. package/dist/Utils/Paging.d.ts +23 -0
  152. package/dist/Utils/Paging.d.ts.map +1 -0
  153. package/dist/Utils/Paging.js +67 -0
  154. package/dist/Utils/Paging.js.map +1 -0
  155. package/dist/Utils/ReadPackageJson.d.ts +9 -0
  156. package/dist/Utils/ReadPackageJson.d.ts.map +1 -0
  157. package/dist/Utils/ReadPackageJson.js +13 -0
  158. package/dist/Utils/ReadPackageJson.js.map +1 -0
  159. package/dist/Utils/ResolveCommand.d.ts +26 -0
  160. package/dist/Utils/ResolveCommand.d.ts.map +1 -0
  161. package/dist/Utils/ResolveCommand.js +62 -0
  162. package/dist/Utils/ResolveCommand.js.map +1 -0
  163. package/dist/Utils/RunCommand.d.ts +33 -0
  164. package/dist/Utils/RunCommand.d.ts.map +1 -0
  165. package/dist/Utils/RunCommand.js +83 -0
  166. package/dist/Utils/RunCommand.js.map +1 -0
  167. package/dist/Utils/Spinner.d.ts +15 -0
  168. package/dist/Utils/Spinner.d.ts.map +1 -0
  169. package/dist/Utils/Spinner.js +71 -0
  170. package/dist/Utils/Spinner.js.map +1 -0
  171. package/dist/Utils/zipBuildArtifact.d.ts +35 -0
  172. package/dist/Utils/zipBuildArtifact.d.ts.map +1 -0
  173. package/dist/Utils/zipBuildArtifact.js +100 -0
  174. package/dist/Utils/zipBuildArtifact.js.map +1 -0
  175. package/dist/Verbs/AddAction.d.ts +6 -0
  176. package/dist/Verbs/AddAction.d.ts.map +1 -0
  177. package/dist/Verbs/AddAction.js +87 -0
  178. package/dist/Verbs/AddAction.js.map +1 -0
  179. package/dist/Verbs/AddDataSource.d.ts +19 -0
  180. package/dist/Verbs/AddDataSource.d.ts.map +1 -0
  181. package/dist/Verbs/AddDataSource.js +173 -0
  182. package/dist/Verbs/AddDataSource.js.map +1 -0
  183. package/dist/Verbs/AddFlow.d.ts +12 -0
  184. package/dist/Verbs/AddFlow.d.ts.map +1 -0
  185. package/dist/Verbs/AddFlow.js +67 -0
  186. package/dist/Verbs/AddFlow.js.map +1 -0
  187. package/dist/Verbs/AddTable.d.ts +6 -0
  188. package/dist/Verbs/AddTable.d.ts.map +1 -0
  189. package/dist/Verbs/AddTable.js +163 -0
  190. package/dist/Verbs/AddTable.js.map +1 -0
  191. package/dist/Verbs/AuthStatus.d.ts +6 -0
  192. package/dist/Verbs/AuthStatus.d.ts.map +1 -0
  193. package/dist/Verbs/AuthStatus.js +18 -0
  194. package/dist/Verbs/AuthStatus.js.map +1 -0
  195. package/dist/Verbs/BuildMaafApp.d.ts +6 -0
  196. package/dist/Verbs/BuildMaafApp.d.ts.map +1 -0
  197. package/dist/Verbs/BuildMaafApp.js +96 -0
  198. package/dist/Verbs/BuildMaafApp.js.map +1 -0
  199. package/dist/Verbs/ConnectorHelpers.d.ts +37 -0
  200. package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -0
  201. package/dist/Verbs/ConnectorHelpers.js +116 -0
  202. package/dist/Verbs/ConnectorHelpers.js.map +1 -0
  203. package/dist/Verbs/CreateMaafApp.d.ts +58 -0
  204. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -0
  205. package/dist/Verbs/CreateMaafApp.js +712 -0
  206. package/dist/Verbs/CreateMaafApp.js.map +1 -0
  207. package/dist/Verbs/DeleteDataSource.d.ts +6 -0
  208. package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
  209. package/dist/Verbs/DeleteDataSource.js +105 -0
  210. package/dist/Verbs/DeleteDataSource.js.map +1 -0
  211. package/dist/Verbs/DeleteMaafApp.d.ts +23 -0
  212. package/dist/Verbs/DeleteMaafApp.d.ts.map +1 -0
  213. package/dist/Verbs/DeleteMaafApp.js +98 -0
  214. package/dist/Verbs/DeleteMaafApp.js.map +1 -0
  215. package/dist/Verbs/DeployMaafApp.d.ts +6 -0
  216. package/dist/Verbs/DeployMaafApp.d.ts.map +1 -0
  217. package/dist/Verbs/DeployMaafApp.js +501 -0
  218. package/dist/Verbs/DeployMaafApp.js.map +1 -0
  219. package/dist/Verbs/Dev.d.ts +6 -0
  220. package/dist/Verbs/Dev.d.ts.map +1 -0
  221. package/dist/Verbs/Dev.js +212 -0
  222. package/dist/Verbs/Dev.js.map +1 -0
  223. package/dist/Verbs/FindDataverseApi.d.ts +12 -0
  224. package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
  225. package/dist/Verbs/FindDataverseApi.js +101 -0
  226. package/dist/Verbs/FindDataverseApi.js.map +1 -0
  227. package/dist/Verbs/GetMaafApp.d.ts +6 -0
  228. package/dist/Verbs/GetMaafApp.d.ts.map +1 -0
  229. package/dist/Verbs/GetMaafApp.js +59 -0
  230. package/dist/Verbs/GetMaafApp.js.map +1 -0
  231. package/dist/Verbs/GetMaafBuildStatus.d.ts +6 -0
  232. package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -0
  233. package/dist/Verbs/GetMaafBuildStatus.js +67 -0
  234. package/dist/Verbs/GetMaafBuildStatus.js.map +1 -0
  235. package/dist/Verbs/GetSettings.d.ts +12 -0
  236. package/dist/Verbs/GetSettings.d.ts.map +1 -0
  237. package/dist/Verbs/GetSettings.js +48 -0
  238. package/dist/Verbs/GetSettings.js.map +1 -0
  239. package/dist/Verbs/Init.d.ts +6 -0
  240. package/dist/Verbs/Init.d.ts.map +1 -0
  241. package/dist/Verbs/Init.js +171 -0
  242. package/dist/Verbs/Init.js.map +1 -0
  243. package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
  244. package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
  245. package/dist/Verbs/ListConnectionReferences.js +70 -0
  246. package/dist/Verbs/ListConnectionReferences.js.map +1 -0
  247. package/dist/Verbs/ListConnectorActions.d.ts +6 -0
  248. package/dist/Verbs/ListConnectorActions.d.ts.map +1 -0
  249. package/dist/Verbs/ListConnectorActions.js +73 -0
  250. package/dist/Verbs/ListConnectorActions.js.map +1 -0
  251. package/dist/Verbs/ListConnectors.d.ts +6 -0
  252. package/dist/Verbs/ListConnectors.d.ts.map +1 -0
  253. package/dist/Verbs/ListConnectors.js +66 -0
  254. package/dist/Verbs/ListConnectors.js.map +1 -0
  255. package/dist/Verbs/ListDatasets.d.ts +6 -0
  256. package/dist/Verbs/ListDatasets.d.ts.map +1 -0
  257. package/dist/Verbs/ListDatasets.js +82 -0
  258. package/dist/Verbs/ListDatasets.js.map +1 -0
  259. package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
  260. package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
  261. package/dist/Verbs/ListEnvironmentVariables.js +66 -0
  262. package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
  263. package/dist/Verbs/ListFlows.d.ts +13 -0
  264. package/dist/Verbs/ListFlows.d.ts.map +1 -0
  265. package/dist/Verbs/ListFlows.js +88 -0
  266. package/dist/Verbs/ListFlows.js.map +1 -0
  267. package/dist/Verbs/ListMaafApps.d.ts +71 -0
  268. package/dist/Verbs/ListMaafApps.d.ts.map +1 -0
  269. package/dist/Verbs/ListMaafApps.js +168 -0
  270. package/dist/Verbs/ListMaafApps.js.map +1 -0
  271. package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
  272. package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
  273. package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
  274. package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
  275. package/dist/Verbs/ListTables.d.ts +6 -0
  276. package/dist/Verbs/ListTables.d.ts.map +1 -0
  277. package/dist/Verbs/ListTables.js +94 -0
  278. package/dist/Verbs/ListTables.js.map +1 -0
  279. package/dist/Verbs/Login.d.ts +6 -0
  280. package/dist/Verbs/Login.d.ts.map +1 -0
  281. package/dist/Verbs/Login.js +28 -0
  282. package/dist/Verbs/Login.js.map +1 -0
  283. package/dist/Verbs/Logout.d.ts +6 -0
  284. package/dist/Verbs/Logout.d.ts.map +1 -0
  285. package/dist/Verbs/Logout.js +28 -0
  286. package/dist/Verbs/Logout.js.map +1 -0
  287. package/dist/Verbs/MaafAppPermissions.d.ts +23 -0
  288. package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -0
  289. package/dist/Verbs/MaafAppPermissions.js +278 -0
  290. package/dist/Verbs/MaafAppPermissions.js.map +1 -0
  291. package/dist/Verbs/Pack.d.ts +42 -0
  292. package/dist/Verbs/Pack.d.ts.map +1 -0
  293. package/dist/Verbs/Pack.js +114 -0
  294. package/dist/Verbs/Pack.js.map +1 -0
  295. package/dist/Verbs/RefreshDataSource.d.ts +6 -0
  296. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
  297. package/dist/Verbs/RefreshDataSource.js +72 -0
  298. package/dist/Verbs/RefreshDataSource.js.map +1 -0
  299. package/dist/Verbs/RemoveFlow.d.ts +12 -0
  300. package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
  301. package/dist/Verbs/RemoveFlow.js +99 -0
  302. package/dist/Verbs/RemoveFlow.js.map +1 -0
  303. package/dist/Verbs/SetSetting.d.ts +12 -0
  304. package/dist/Verbs/SetSetting.d.ts.map +1 -0
  305. package/dist/Verbs/SetSetting.js +141 -0
  306. package/dist/Verbs/SetSetting.js.map +1 -0
  307. package/dist/Verbs/ShareMaafApp.d.ts +12 -0
  308. package/dist/Verbs/ShareMaafApp.d.ts.map +1 -0
  309. package/dist/Verbs/ShareMaafApp.js +14 -0
  310. package/dist/Verbs/ShareMaafApp.js.map +1 -0
  311. package/dist/Verbs/ShowMaafApp.d.ts +94 -0
  312. package/dist/Verbs/ShowMaafApp.d.ts.map +1 -0
  313. package/dist/Verbs/ShowMaafApp.js +216 -0
  314. package/dist/Verbs/ShowMaafApp.js.map +1 -0
  315. package/dist/Verbs/TelemetrySettings.d.ts +8 -0
  316. package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
  317. package/dist/Verbs/TelemetrySettings.js +104 -0
  318. package/dist/Verbs/TelemetrySettings.js.map +1 -0
  319. package/dist/Verbs/UnshareMaafApp.d.ts +12 -0
  320. package/dist/Verbs/UnshareMaafApp.d.ts.map +1 -0
  321. package/dist/Verbs/UnshareMaafApp.js +14 -0
  322. package/dist/Verbs/UnshareMaafApp.js.map +1 -0
  323. package/dist/Verbs/VerbConstants.d.ts +415 -0
  324. package/dist/Verbs/VerbConstants.d.ts.map +1 -0
  325. package/dist/Verbs/VerbConstants.js +382 -0
  326. package/dist/Verbs/VerbConstants.js.map +1 -0
  327. package/dist/Verbs/index.d.ts +39 -0
  328. package/dist/Verbs/index.d.ts.map +1 -0
  329. package/dist/Verbs/index.js +39 -0
  330. package/dist/Verbs/index.js.map +1 -0
  331. package/package.json +52 -0
@@ -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,33 @@
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). On failure the captured
8
+ * stderr is included in the thrown AppError's message; stdout is used as a fallback
9
+ * when stderr is silent (some toolchains route diagnostics through stdout).
10
+ */
11
+ quiet?: boolean;
12
+ /**
13
+ * Per-stream tail cap (in bytes) for quiet-mode capture. Defaults to
14
+ * {@link CAPTURE_TAIL_CAP_BYTES} (8 KB). Override when a caller needs a smaller or
15
+ * larger diagnostic tail than the default (e.g. very chatty toolchains that flush a
16
+ * relevant stack trace beyond 8 KB, or extra-small callers writing to a constrained
17
+ * telemetry sink). Ignored when `quiet` is false.
18
+ */
19
+ captureTailCapBytes?: number;
20
+ }
21
+ /**
22
+ * Default per-stream tail cap for quiet-mode capture. A chatty `--verbose` build can
23
+ * spew tens or hundreds of MB; that whole payload would otherwise land in
24
+ * `AppError.message`, the JSON `errorMessage`, and the `trackErrorEvent` OneDS event.
25
+ * We keep only the tail — which is where the actual failure diagnostic lives — and
26
+ * prepend a marker line so the consumer knows truncation happened.
27
+ *
28
+ * 8 KB ≈ 8000 characters of mostly-ASCII tool output (~100 lines at 80 cols) — enough
29
+ * to capture a typical stack trace or compiler diagnostic without bloating telemetry.
30
+ */
31
+ export declare const CAPTURE_TAIL_CAP_BYTES: number;
32
+ export declare function runCommandAsync(command: string, cwd: string, options?: RunCommandOptions): Promise<void>;
33
+ //# 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;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,QAAW,CAAC;AAuC/C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
@@ -0,0 +1,83 @@
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
+ /**
7
+ * Default per-stream tail cap for quiet-mode capture. A chatty `--verbose` build can
8
+ * spew tens or hundreds of MB; that whole payload would otherwise land in
9
+ * `AppError.message`, the JSON `errorMessage`, and the `trackErrorEvent` OneDS event.
10
+ * We keep only the tail — which is where the actual failure diagnostic lives — and
11
+ * prepend a marker line so the consumer knows truncation happened.
12
+ *
13
+ * 8 KB ≈ 8000 characters of mostly-ASCII tool output (~100 lines at 80 cols) — enough
14
+ * to capture a typical stack trace or compiler diagnostic without bloating telemetry.
15
+ */
16
+ export const CAPTURE_TAIL_CAP_BYTES = 8 * 1024;
17
+ function makeSink() {
18
+ return { chunks: [], bytes: 0, dropped: 0 };
19
+ }
20
+ function appendCapped(sink, chunk, cap) {
21
+ sink.chunks.push(chunk);
22
+ sink.bytes += chunk.length;
23
+ while (sink.bytes > cap) {
24
+ const overflow = sink.bytes - cap;
25
+ const head = sink.chunks[0];
26
+ if (head.length <= overflow) {
27
+ sink.chunks.shift();
28
+ sink.bytes -= head.length;
29
+ sink.dropped += head.length;
30
+ }
31
+ else {
32
+ sink.chunks[0] = head.subarray(overflow);
33
+ sink.bytes -= overflow;
34
+ sink.dropped += overflow;
35
+ }
36
+ }
37
+ }
38
+ function decodeSink(sink) {
39
+ // toString('utf8') on a sliced tail may yield a replacement char at byte 0 if the
40
+ // slice cut a multi-byte codepoint — acceptable for a diagnostic message; the
41
+ // surrounding context still reads correctly.
42
+ const tail = Buffer.concat(sink.chunks).toString('utf8').trimEnd();
43
+ if (sink.dropped === 0)
44
+ return tail;
45
+ return `[truncated earlier ${sink.dropped} bytes; showing last ${sink.bytes} bytes]\n${tail}`;
46
+ }
47
+ export function runCommandAsync(command, cwd, options = {}) {
48
+ return new Promise((resolve, reject) => {
49
+ const { quiet = false, captureTailCapBytes = CAPTURE_TAIL_CAP_BYTES } = options;
50
+ const child = spawn(command, {
51
+ cwd,
52
+ stdio: quiet ? ['ignore', 'pipe', 'pipe'] : 'inherit',
53
+ shell: true,
54
+ });
55
+ // Collect raw bytes (capped per stream) and decode once at close — avoids
56
+ // mojibake from a UTF-8 character split across two `data` chunks, and keeps
57
+ // both the envelope and the OneDS event size-bounded under chatty builds.
58
+ const stdoutSink = makeSink();
59
+ const stderrSink = makeSink();
60
+ if (quiet) {
61
+ child.stdout?.on('data', (c) => appendCapped(stdoutSink, c, captureTailCapBytes));
62
+ child.stderr?.on('data', (c) => appendCapped(stderrSink, c, captureTailCapBytes));
63
+ }
64
+ child.on('close', (code) => {
65
+ if (code === 0) {
66
+ resolve();
67
+ return;
68
+ }
69
+ const base = `Command exited with code ${code}: ${command}`;
70
+ if (!quiet) {
71
+ reject(new AppError(base, code ?? 1));
72
+ return;
73
+ }
74
+ const stderr = decodeSink(stderrSink);
75
+ const stdout = decodeSink(stdoutSink);
76
+ const detail = stderr.length > 0 ? stderr : stdout;
77
+ const message = detail.length > 0 ? `${base}\n${detail}` : base;
78
+ reject(new AppError(message, code ?? 1));
79
+ });
80
+ child.on('error', reject);
81
+ });
82
+ }
83
+ //# sourceMappingURL=RunCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunCommand.js","sourceRoot":"","sources":["../../src/Utils/RunCommand.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
@@ -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/managed-apps-common/config';
6
+ import { BuildArtifactTooLargeError, UsageError } from '@microsoft/managed-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":"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"}
@@ -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"}