@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.
- package/README.md +281 -1
- package/dist/ArgumentProvider.d.ts +102 -0
- package/dist/ArgumentProvider.d.ts.map +1 -0
- package/dist/ArgumentProvider.js +376 -0
- package/dist/ArgumentProvider.js.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +18 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js +99 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts +13 -0
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/OrchardAuthenticationProvider.js +30 -0
- package/dist/Authentication/OrchardAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +23 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +60 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
- package/dist/Bin.d.ts +6 -0
- package/dist/Bin.d.ts.map +1 -0
- package/dist/Bin.js +7 -0
- package/dist/Bin.js.map +1 -0
- package/dist/Cli.d.ts +2 -0
- package/dist/Cli.d.ts.map +1 -0
- package/dist/Cli.js +95 -0
- package/dist/Cli.js.map +1 -0
- package/dist/CliSettings.d.ts +14 -0
- package/dist/CliSettings.d.ts.map +1 -0
- package/dist/CliSettings.js +76 -0
- package/dist/CliSettings.js.map +1 -0
- package/dist/CliUtils.d.ts +92 -0
- package/dist/CliUtils.d.ts.map +1 -0
- package/dist/CliUtils.js +218 -0
- package/dist/CliUtils.js.map +1 -0
- package/dist/Constants/CliConstants.d.ts +6 -0
- package/dist/Constants/CliConstants.d.ts.map +1 -0
- package/dist/Constants/CliConstants.js +6 -0
- package/dist/Constants/CliConstants.js.map +1 -0
- package/dist/Constants/CommandRegistry.d.ts +23 -0
- package/dist/Constants/CommandRegistry.d.ts.map +1 -0
- package/dist/Constants/CommandRegistry.js +197 -0
- package/dist/Constants/CommandRegistry.js.map +1 -0
- package/dist/Constants/HelpStrings.d.ts +329 -0
- package/dist/Constants/HelpStrings.d.ts.map +1 -0
- package/dist/Constants/HelpStrings.js +451 -0
- package/dist/Constants/HelpStrings.js.map +1 -0
- package/dist/Constants.d.ts +10 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +18 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Errors/CliError.d.ts +5 -0
- package/dist/Errors/CliError.d.ts.map +1 -0
- package/dist/Errors/CliError.js +7 -0
- package/dist/Errors/CliError.js.map +1 -0
- package/dist/FS/CliFs.d.ts +41 -0
- package/dist/FS/CliFs.d.ts.map +1 -0
- package/dist/FS/CliFs.js +136 -0
- package/dist/FS/CliFs.js.map +1 -0
- package/dist/HttpClient/CliHttpClient.d.ts +24 -0
- package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
- package/dist/HttpClient/CliHttpClient.js +122 -0
- package/dist/HttpClient/CliHttpClient.js.map +1 -0
- package/dist/HttpClient/OrchardProxy.d.ts +11 -0
- package/dist/HttpClient/OrchardProxy.d.ts.map +1 -0
- package/dist/HttpClient/OrchardProxy.js +25 -0
- package/dist/HttpClient/OrchardProxy.js.map +1 -0
- package/dist/HttpClient/Proxy.d.ts +7 -0
- package/dist/HttpClient/Proxy.d.ts.map +1 -0
- package/dist/HttpClient/Proxy.js +5 -0
- package/dist/HttpClient/Proxy.js.map +1 -0
- package/dist/Logger/CliLogger.d.ts +35 -0
- package/dist/Logger/CliLogger.d.ts.map +1 -0
- package/dist/Logger/CliLogger.js +237 -0
- package/dist/Logger/CliLogger.js.map +1 -0
- package/dist/Logger/ConsoleWriter.d.ts +15 -0
- package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
- package/dist/Logger/ConsoleWriter.js +45 -0
- package/dist/Logger/ConsoleWriter.js.map +1 -0
- package/dist/Logger/Constants.d.ts +6 -0
- package/dist/Logger/Constants.d.ts.map +1 -0
- package/dist/Logger/Constants.js +15 -0
- package/dist/Logger/Constants.js.map +1 -0
- package/dist/Logger/LoggerSettings.d.ts +19 -0
- package/dist/Logger/LoggerSettings.d.ts.map +1 -0
- package/dist/Logger/LoggerSettings.js +114 -0
- package/dist/Logger/LoggerSettings.js.map +1 -0
- package/dist/Logger/OneDSWriter.d.ts +22 -0
- package/dist/Logger/OneDSWriter.d.ts.map +1 -0
- package/dist/Logger/OneDSWriter.js +129 -0
- package/dist/Logger/OneDSWriter.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
- package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
- package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
- package/dist/Types/Argument.types.d.ts +27 -0
- package/dist/Types/Argument.types.d.ts.map +1 -0
- package/dist/Types/Argument.types.js +5 -0
- package/dist/Types/Argument.types.js.map +1 -0
- package/dist/Types/Cli.types.d.ts +32 -0
- package/dist/Types/Cli.types.d.ts.map +1 -0
- package/dist/Types/Cli.types.js +5 -0
- package/dist/Types/Cli.types.js.map +1 -0
- package/dist/Types/Command.types.d.ts +52 -0
- package/dist/Types/Command.types.d.ts.map +1 -0
- package/dist/Types/Command.types.js +8 -0
- package/dist/Types/Command.types.js.map +1 -0
- package/dist/Types/Datasource.types.d.ts +43 -0
- package/dist/Types/Datasource.types.d.ts.map +1 -0
- package/dist/Types/Datasource.types.js +5 -0
- package/dist/Types/Datasource.types.js.map +1 -0
- package/dist/Types/LoggerTypes.types.d.ts +17 -0
- package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
- package/dist/Types/LoggerTypes.types.js +5 -0
- package/dist/Types/LoggerTypes.types.js.map +1 -0
- package/dist/Utils/BuildVerbDescriptionTable.d.ts +19 -0
- package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
- package/dist/Utils/BuildVerbDescriptionTable.js +87 -0
- package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
- package/dist/Utils/ConsoleOutput.d.ts +80 -0
- package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
- package/dist/Utils/ConsoleOutput.js +151 -0
- package/dist/Utils/ConsoleOutput.js.map +1 -0
- package/dist/Utils/DetectPackageManager.d.ts +9 -0
- package/dist/Utils/DetectPackageManager.d.ts.map +1 -0
- package/dist/Utils/DetectPackageManager.js +24 -0
- package/dist/Utils/DetectPackageManager.js.map +1 -0
- package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
- package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
- package/dist/Utils/EnhanceNetworkError.js +59 -0
- package/dist/Utils/EnhanceNetworkError.js.map +1 -0
- package/dist/Utils/EnvVars.d.ts +17 -0
- package/dist/Utils/EnvVars.d.ts.map +1 -0
- package/dist/Utils/EnvVars.js +38 -0
- package/dist/Utils/EnvVars.js.map +1 -0
- package/dist/Utils/GitCredentialConfig.d.ts +12 -0
- package/dist/Utils/GitCredentialConfig.d.ts.map +1 -0
- package/dist/Utils/GitCredentialConfig.js +32 -0
- package/dist/Utils/GitCredentialConfig.js.map +1 -0
- package/dist/Utils/GitUtils.d.ts +22 -0
- package/dist/Utils/GitUtils.d.ts.map +1 -0
- package/dist/Utils/GitUtils.js +35 -0
- package/dist/Utils/GitUtils.js.map +1 -0
- package/dist/Utils/Paging.d.ts +23 -0
- package/dist/Utils/Paging.d.ts.map +1 -0
- package/dist/Utils/Paging.js +67 -0
- package/dist/Utils/Paging.js.map +1 -0
- package/dist/Utils/ReadPackageJson.d.ts +9 -0
- package/dist/Utils/ReadPackageJson.d.ts.map +1 -0
- package/dist/Utils/ReadPackageJson.js +13 -0
- package/dist/Utils/ReadPackageJson.js.map +1 -0
- package/dist/Utils/ResolveCommand.d.ts +26 -0
- package/dist/Utils/ResolveCommand.d.ts.map +1 -0
- package/dist/Utils/ResolveCommand.js +62 -0
- package/dist/Utils/ResolveCommand.js.map +1 -0
- package/dist/Utils/RunCommand.d.ts +13 -0
- package/dist/Utils/RunCommand.d.ts.map +1 -0
- package/dist/Utils/RunCommand.js +35 -0
- package/dist/Utils/RunCommand.js.map +1 -0
- package/dist/Utils/Spinner.d.ts +15 -0
- package/dist/Utils/Spinner.d.ts.map +1 -0
- package/dist/Utils/Spinner.js +71 -0
- package/dist/Utils/Spinner.js.map +1 -0
- package/dist/Utils/zipBuildArtifact.d.ts +35 -0
- package/dist/Utils/zipBuildArtifact.d.ts.map +1 -0
- package/dist/Utils/zipBuildArtifact.js +100 -0
- package/dist/Utils/zipBuildArtifact.js.map +1 -0
- package/dist/Verbs/AddAction.d.ts +6 -0
- package/dist/Verbs/AddAction.d.ts.map +1 -0
- package/dist/Verbs/AddAction.js +87 -0
- package/dist/Verbs/AddAction.js.map +1 -0
- package/dist/Verbs/AddDataSource.d.ts +19 -0
- package/dist/Verbs/AddDataSource.d.ts.map +1 -0
- package/dist/Verbs/AddDataSource.js +174 -0
- package/dist/Verbs/AddDataSource.js.map +1 -0
- package/dist/Verbs/AddFlow.d.ts +12 -0
- package/dist/Verbs/AddFlow.d.ts.map +1 -0
- package/dist/Verbs/AddFlow.js +67 -0
- package/dist/Verbs/AddFlow.js.map +1 -0
- package/dist/Verbs/AddTable.d.ts +6 -0
- package/dist/Verbs/AddTable.d.ts.map +1 -0
- package/dist/Verbs/AddTable.js +163 -0
- package/dist/Verbs/AddTable.js.map +1 -0
- package/dist/Verbs/AuthStatus.d.ts +6 -0
- package/dist/Verbs/AuthStatus.d.ts.map +1 -0
- package/dist/Verbs/AuthStatus.js +18 -0
- package/dist/Verbs/AuthStatus.js.map +1 -0
- package/dist/Verbs/BuildMaafApp.d.ts +6 -0
- package/dist/Verbs/BuildMaafApp.d.ts.map +1 -0
- package/dist/Verbs/BuildMaafApp.js +97 -0
- package/dist/Verbs/BuildMaafApp.js.map +1 -0
- package/dist/Verbs/ConnectorHelpers.d.ts +37 -0
- package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -0
- package/dist/Verbs/ConnectorHelpers.js +116 -0
- package/dist/Verbs/ConnectorHelpers.js.map +1 -0
- package/dist/Verbs/CreateMaafApp.d.ts +25 -0
- package/dist/Verbs/CreateMaafApp.d.ts.map +1 -0
- package/dist/Verbs/CreateMaafApp.js +565 -0
- package/dist/Verbs/CreateMaafApp.js.map +1 -0
- package/dist/Verbs/DeleteDataSource.d.ts +6 -0
- package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
- package/dist/Verbs/DeleteDataSource.js +106 -0
- package/dist/Verbs/DeleteDataSource.js.map +1 -0
- package/dist/Verbs/DeleteMaafApp.d.ts +23 -0
- package/dist/Verbs/DeleteMaafApp.d.ts.map +1 -0
- package/dist/Verbs/DeleteMaafApp.js +99 -0
- package/dist/Verbs/DeleteMaafApp.js.map +1 -0
- package/dist/Verbs/DeployMaafApp.d.ts +6 -0
- package/dist/Verbs/DeployMaafApp.d.ts.map +1 -0
- package/dist/Verbs/DeployMaafApp.js +96 -0
- package/dist/Verbs/DeployMaafApp.js.map +1 -0
- package/dist/Verbs/Dev.d.ts +6 -0
- package/dist/Verbs/Dev.d.ts.map +1 -0
- package/dist/Verbs/Dev.js +214 -0
- package/dist/Verbs/Dev.js.map +1 -0
- package/dist/Verbs/FindDataverseApi.d.ts +12 -0
- package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
- package/dist/Verbs/FindDataverseApi.js +101 -0
- package/dist/Verbs/FindDataverseApi.js.map +1 -0
- package/dist/Verbs/GetMaafApp.d.ts +6 -0
- package/dist/Verbs/GetMaafApp.d.ts.map +1 -0
- package/dist/Verbs/GetMaafApp.js +60 -0
- package/dist/Verbs/GetMaafApp.js.map +1 -0
- package/dist/Verbs/GetMaafBuildStatus.d.ts +6 -0
- package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -0
- package/dist/Verbs/GetMaafBuildStatus.js +68 -0
- package/dist/Verbs/GetMaafBuildStatus.js.map +1 -0
- package/dist/Verbs/GetSettings.d.ts +12 -0
- package/dist/Verbs/GetSettings.d.ts.map +1 -0
- package/dist/Verbs/GetSettings.js +48 -0
- package/dist/Verbs/GetSettings.js.map +1 -0
- package/dist/Verbs/Init.d.ts +6 -0
- package/dist/Verbs/Init.d.ts.map +1 -0
- package/dist/Verbs/Init.js +172 -0
- package/dist/Verbs/Init.js.map +1 -0
- package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
- package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
- package/dist/Verbs/ListConnectionReferences.js +70 -0
- package/dist/Verbs/ListConnectionReferences.js.map +1 -0
- package/dist/Verbs/ListConnectorActions.d.ts +6 -0
- package/dist/Verbs/ListConnectorActions.d.ts.map +1 -0
- package/dist/Verbs/ListConnectorActions.js +79 -0
- package/dist/Verbs/ListConnectorActions.js.map +1 -0
- package/dist/Verbs/ListConnectors.d.ts +6 -0
- package/dist/Verbs/ListConnectors.d.ts.map +1 -0
- package/dist/Verbs/ListConnectors.js +66 -0
- package/dist/Verbs/ListConnectors.js.map +1 -0
- package/dist/Verbs/ListDatasets.d.ts +6 -0
- package/dist/Verbs/ListDatasets.d.ts.map +1 -0
- package/dist/Verbs/ListDatasets.js +83 -0
- package/dist/Verbs/ListDatasets.js.map +1 -0
- package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
- package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
- package/dist/Verbs/ListEnvironmentVariables.js +66 -0
- package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
- package/dist/Verbs/ListFlows.d.ts +13 -0
- package/dist/Verbs/ListFlows.d.ts.map +1 -0
- package/dist/Verbs/ListFlows.js +88 -0
- package/dist/Verbs/ListFlows.js.map +1 -0
- package/dist/Verbs/ListMaafApps.d.ts +71 -0
- package/dist/Verbs/ListMaafApps.d.ts.map +1 -0
- package/dist/Verbs/ListMaafApps.js +168 -0
- package/dist/Verbs/ListMaafApps.js.map +1 -0
- package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
- package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
- package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
- package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
- package/dist/Verbs/ListTables.d.ts +6 -0
- package/dist/Verbs/ListTables.d.ts.map +1 -0
- package/dist/Verbs/ListTables.js +95 -0
- package/dist/Verbs/ListTables.js.map +1 -0
- package/dist/Verbs/Login.d.ts +6 -0
- package/dist/Verbs/Login.d.ts.map +1 -0
- package/dist/Verbs/Login.js +28 -0
- package/dist/Verbs/Login.js.map +1 -0
- package/dist/Verbs/Logout.d.ts +6 -0
- package/dist/Verbs/Logout.d.ts.map +1 -0
- package/dist/Verbs/Logout.js +28 -0
- package/dist/Verbs/Logout.js.map +1 -0
- package/dist/Verbs/MaafAppPermissions.d.ts +23 -0
- package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -0
- package/dist/Verbs/MaafAppPermissions.js +278 -0
- package/dist/Verbs/MaafAppPermissions.js.map +1 -0
- package/dist/Verbs/Pack.d.ts +38 -0
- package/dist/Verbs/Pack.d.ts.map +1 -0
- package/dist/Verbs/Pack.js +106 -0
- package/dist/Verbs/Pack.js.map +1 -0
- package/dist/Verbs/PushMaafApp.d.ts +6 -0
- package/dist/Verbs/PushMaafApp.d.ts.map +1 -0
- package/dist/Verbs/PushMaafApp.js +145 -0
- package/dist/Verbs/PushMaafApp.js.map +1 -0
- package/dist/Verbs/RefreshDataSource.d.ts +6 -0
- package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
- package/dist/Verbs/RefreshDataSource.js +72 -0
- package/dist/Verbs/RefreshDataSource.js.map +1 -0
- package/dist/Verbs/RemoveFlow.d.ts +12 -0
- package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
- package/dist/Verbs/RemoveFlow.js +99 -0
- package/dist/Verbs/RemoveFlow.js.map +1 -0
- package/dist/Verbs/SetSetting.d.ts +12 -0
- package/dist/Verbs/SetSetting.d.ts.map +1 -0
- package/dist/Verbs/SetSetting.js +142 -0
- package/dist/Verbs/SetSetting.js.map +1 -0
- package/dist/Verbs/ShareMaafApp.d.ts +12 -0
- package/dist/Verbs/ShareMaafApp.d.ts.map +1 -0
- package/dist/Verbs/ShareMaafApp.js +14 -0
- package/dist/Verbs/ShareMaafApp.js.map +1 -0
- package/dist/Verbs/ShowMaafApp.d.ts +94 -0
- package/dist/Verbs/ShowMaafApp.d.ts.map +1 -0
- package/dist/Verbs/ShowMaafApp.js +216 -0
- package/dist/Verbs/ShowMaafApp.js.map +1 -0
- package/dist/Verbs/TelemetrySettings.d.ts +8 -0
- package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
- package/dist/Verbs/TelemetrySettings.js +104 -0
- package/dist/Verbs/TelemetrySettings.js.map +1 -0
- package/dist/Verbs/UnshareMaafApp.d.ts +12 -0
- package/dist/Verbs/UnshareMaafApp.d.ts.map +1 -0
- package/dist/Verbs/UnshareMaafApp.js +14 -0
- package/dist/Verbs/UnshareMaafApp.js.map +1 -0
- package/dist/Verbs/VerbConstants.d.ts +433 -0
- package/dist/Verbs/VerbConstants.d.ts.map +1 -0
- package/dist/Verbs/VerbConstants.js +403 -0
- package/dist/Verbs/VerbConstants.js.map +1 -0
- package/dist/Verbs/index.d.ts +40 -0
- package/dist/Verbs/index.d.ts.map +1 -0
- package/dist/Verbs/index.js +40 -0
- package/dist/Verbs/index.js.map +1 -0
- 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":"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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/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":"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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"}
|
|
@@ -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
|