137 lines
5.8 KiB
JavaScript
137 lines
5.8 KiB
JavaScript
/*!
|
|
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
*/
|
|
import { ArgumentProvider } from './ArgumentProvider.js';
|
|
import { PacCliAuthenticationProvider } from './Authentication/PacCliAuthenticationProvider.js';
|
|
import { initializeCliSettings, setCliLogger } from './CliSettings.js';
|
|
import { CliError } from './Errors/CliError.js';
|
|
import { CliHttpClient } from './HttpClient/CliHttpClient.js';
|
|
import { CliLogger } from './Logger/CliLogger.js';
|
|
import { addDataSourceAsync, addDataverseApiAsync, addFlowAsync, createConnectionVerbAsync, deleteDataSourceAsync, findDataverseApiAsync, getCodeAppsAsync, initAsync, listConnectionReferences, listConnectionsAsync, listDatasetsAsync, listSqlStoredProceduresAsync, listTablesAsync, logoutAsync, pushAsync, refreshDataSourceAsync, removeFlowAsync, runAsync, } from './Verbs/index.js';
|
|
import { listAllEnvironmentVariablesAsync } from './Verbs/ListEnvironmentVariables.js';
|
|
import { listFlowsAsync } from './Verbs/ListFlows.js';
|
|
import { modifyTelemetrySettings } from './Verbs/TelemetrySettings.js';
|
|
let logger;
|
|
let exitCode = 0;
|
|
export async function boot() {
|
|
try {
|
|
if (process.argv.includes('--no-color')) {
|
|
process.env.NO_COLOR = '1';
|
|
}
|
|
const isPacCli = process.env.IS_PAC_CLI === 'true';
|
|
const isTestRun = process.env.CI === 'true';
|
|
const hasNonInteractiveFlag = process.argv.includes('--non-interactive');
|
|
const source = isPacCli ? 'pac-cli' : 'standalone';
|
|
const interactive = !isPacCli && !isTestRun && !hasNonInteractiveFlag && process.stdin.isTTY === true;
|
|
const cliSettings = await initializeCliSettings({ source, interactive });
|
|
let authenticationProvider;
|
|
if (isPacCli) {
|
|
authenticationProvider = new PacCliAuthenticationProvider();
|
|
}
|
|
else if (isTestRun) {
|
|
const { ServicePrincipalAuthenticationProvider } = await import('./Authentication/ServicePrincipalAuthenticationProvider.js');
|
|
authenticationProvider = new ServicePrincipalAuthenticationProvider();
|
|
}
|
|
else {
|
|
// Dynamically import NodeMsalAuthenticationProvider only when needed
|
|
const { NodeMsalAuthenticationProvider } = await import('./Authentication/NodeMsalAuthenticationProvider.js');
|
|
authenticationProvider = new NodeMsalAuthenticationProvider();
|
|
}
|
|
const httpClient = new CliHttpClient(authenticationProvider);
|
|
// The CLI logger might need to use httpClient and environment info during its initialization
|
|
// So we create it after the httpClient and authenticationProvider are ready
|
|
logger = await CliLogger.create(cliSettings, httpClient);
|
|
setCliLogger(logger);
|
|
const argumentProvider = new ArgumentProvider(httpClient, logger, authenticationProvider);
|
|
argumentProvider.handleGlobalHelpOrFlagsAndExit();
|
|
const verb = argumentProvider.getVerb();
|
|
await executeVerb({ verb, argumentProvider });
|
|
}
|
|
catch (err) {
|
|
const message = err instanceof Error ? err.message : String(err);
|
|
console.error(message);
|
|
exitCode = err instanceof CliError ? err.exitCode : 1;
|
|
}
|
|
finally {
|
|
// Ensure logger flush on exit
|
|
if (logger) {
|
|
await logger.flush();
|
|
}
|
|
process.exit(exitCode);
|
|
}
|
|
}
|
|
async function executeVerb(config) {
|
|
const { verb, argumentProvider } = config;
|
|
switch (verb) {
|
|
case 'init':
|
|
await initAsync(argumentProvider);
|
|
break;
|
|
case 'list-codeapps':
|
|
await getCodeAppsAsync(argumentProvider);
|
|
break;
|
|
case 'add-data-source':
|
|
await addDataSourceAsync(argumentProvider);
|
|
break;
|
|
case 'list-datasets':
|
|
await listDatasetsAsync(argumentProvider);
|
|
break;
|
|
case 'list-tables':
|
|
await listTablesAsync(argumentProvider);
|
|
break;
|
|
case 'list-sqlStoredProcedures':
|
|
await listSqlStoredProceduresAsync(argumentProvider);
|
|
break;
|
|
case 'delete-data-source':
|
|
await deleteDataSourceAsync(argumentProvider);
|
|
break;
|
|
case 'refresh-data-source':
|
|
await refreshDataSourceAsync(argumentProvider);
|
|
break;
|
|
case 'logout':
|
|
await logoutAsync(argumentProvider);
|
|
break;
|
|
case 'list-environment-variables':
|
|
await listAllEnvironmentVariablesAsync(argumentProvider);
|
|
break;
|
|
case 'list-connection-references':
|
|
await listConnectionReferences(argumentProvider);
|
|
break;
|
|
case 'list-connections':
|
|
await listConnectionsAsync(argumentProvider);
|
|
break;
|
|
case 'list-flows':
|
|
await listFlowsAsync(argumentProvider);
|
|
break;
|
|
case 'add-dataverse-api':
|
|
await addDataverseApiAsync(argumentProvider);
|
|
break;
|
|
case 'add-flow':
|
|
await addFlowAsync(argumentProvider);
|
|
break;
|
|
case 'create-connection':
|
|
await createConnectionVerbAsync(argumentProvider);
|
|
break;
|
|
case 'remove-flow':
|
|
await removeFlowAsync(argumentProvider);
|
|
break;
|
|
case 'find-dataverse-api':
|
|
await findDataverseApiAsync(argumentProvider);
|
|
break;
|
|
case 'push':
|
|
await pushAsync(argumentProvider);
|
|
break;
|
|
case 'run':
|
|
await runAsync(argumentProvider);
|
|
break;
|
|
case 'telemetry':
|
|
await modifyTelemetrySettings(argumentProvider);
|
|
break;
|
|
default:
|
|
unsupportedVerb(verb);
|
|
}
|
|
}
|
|
// Helper function ensures compile time checking for exhaustive verb handling
|
|
function unsupportedVerb(verb) {
|
|
throw new Error(`The verb "${verb}" is not supported.`);
|
|
}
|
|
//# sourceMappingURL=Cli.js.map
|