1
0
mirror of https://gitcode.com/github-mirrors/react-native-update-cli.git synced 2025-11-07 01:43:39 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee
Files
react-native-update-cli/src/index.ts
波仔糕 e98bcf504f cli modular refactor (#16)
* add logic to support SENTRY_PROPERTIES parameter

* remove update.json and meta.json files in ppk

* udpapte

* refactor modles

* update

* add package-module file

* update

* update readme file

* modifu cli.json file

* fix command issues

* improve version workflow logic

* udpate

* update

* update

* update

* udpate

* udpate

* add example

* update readme file

* udpate version

* change logic to use pushy command uniformly
2025-07-24 11:46:20 +08:00

156 lines
4.2 KiB
JavaScript

#!/usr/bin/env node
import { loadSession } from './api';
import { appCommands } from './app';
import { bundleCommands } from './bundle';
import { moduleManager } from './module-manager';
import { builtinModules } from './modules';
import { packageCommands } from './package';
import type { CommandContext } from './types';
import { userCommands } from './user';
import { printVersionCommand } from './utils';
import { t } from './utils/i18n';
import { versionCommands } from './versions';
function registerBuiltinModules() {
for (const module of builtinModules) {
try {
moduleManager.registerModule(module);
} catch (error) {
console.error(`Failed to register module ${module.name}:`, error);
}
}
}
function printUsage() {
console.log('React Native Update CLI');
console.log('');
console.log('Traditional commands:');
const legacyCommands = {
...userCommands,
...bundleCommands,
...appCommands,
...packageCommands,
...versionCommands,
};
for (const [name, handler] of Object.entries(legacyCommands)) {
console.log(` ${name}: Legacy command`);
}
console.log('');
console.log('Modular commands:');
const commands = moduleManager.getRegisteredCommands();
for (const command of commands) {
console.log(
` ${command.name}: ${command.description || 'No description'}`,
);
}
console.log('');
console.log('Available workflows:');
const workflows = moduleManager.getRegisteredWorkflows();
for (const workflow of workflows) {
console.log(
` ${workflow.name}: ${workflow.description || 'No description'}`,
);
}
console.log('');
console.log('Special commands:');
console.log(' list: List all available commands and workflows');
console.log(' workflow <name>: Execute a specific workflow');
console.log(' help: Show this help message');
console.log('');
console.log(
'Visit `https://github.com/reactnativecn/react-native-update` for document.',
);
process.exit(1);
}
const legacyCommands = {
...userCommands,
...bundleCommands,
...appCommands,
...packageCommands,
...versionCommands,
help: printUsage,
};
async function run() {
await printVersionCommand();
if (process.argv.indexOf('-v') >= 0 || process.argv[2] === 'version') {
process.exit();
}
// Register builtin modules for modular functionality
registerBuiltinModules();
const argv = require('cli-arguments').parse(require('../cli.json'));
global.NO_INTERACTIVE = argv.options['no-interactive'];
global.USE_ACC_OSS = argv.options.acc;
const context: CommandContext = {
args: argv.args || [],
options: argv.options || {},
};
try {
await loadSession();
context.session = require('./api').getSession();
// Handle special modular commands first
if (argv.command === 'help') {
printUsage();
} else if (argv.command === 'list') {
moduleManager.listAll();
} else if (argv.command === 'workflow') {
const workflowName = argv.args[0];
if (!workflowName) {
console.error('Workflow name is required');
process.exit(1);
}
const result = await moduleManager.executeWorkflow(workflowName, context);
if (!result.success) {
console.error('Workflow execution failed:', result.error);
process.exit(1);
}
console.log('Workflow completed successfully:', result.data);
}
// Try legacy commands first for backward compatibility
else if (legacyCommands[argv.command]) {
await legacyCommands[argv.command](argv);
}
// Fall back to modular commands
else {
const result = await moduleManager.executeCommand(argv.command, context);
if (!result.success) {
console.error('Command execution failed:', result.error);
process.exit(1);
}
console.log('Command completed successfully:', result.data);
}
} catch (err: any) {
if (err.status === 401) {
console.log(t('loginFirst'));
return;
}
console.error(err.stack);
process.exit(-1);
}
}
export { moduleManager };
export { CLIProviderImpl } from './provider';
export type {
CLIProvider,
CLIModule,
CommandDefinition,
CustomWorkflow,
WorkflowStep,
} from './types';
run();