push neon reactor
This commit is contained in:
+137
@@ -0,0 +1,137 @@
|
||||
/*!
|
||||
* 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
|
||||
Reference in New Issue
Block a user