161847f8eSopenharmony_ci/* 261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 461847f8eSopenharmony_ci * you may not use this file except in compliance with the License. 561847f8eSopenharmony_ci * You may obtain a copy of the License at 661847f8eSopenharmony_ci * 761847f8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 861847f8eSopenharmony_ci * 961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and 1361847f8eSopenharmony_ci * limitations under the License. 1461847f8eSopenharmony_ci */ 1561847f8eSopenharmony_ci 1661847f8eSopenharmony_ciconst commander = require('commander'); 1761847f8eSopenharmony_ciconst toolboxConfig = require('./toolbox.config'); 1861847f8eSopenharmony_ciclass ToolBoxCommander { 1961847f8eSopenharmony_ci program = new commander.Command(); 2061847f8eSopenharmony_ci constructor() {} 2161847f8eSopenharmony_ci 2261847f8eSopenharmony_ci addPluginCommand(plugin) { 2361847f8eSopenharmony_ci const pluginOption = plugin.getPluginOptions(); 2461847f8eSopenharmony_ci if (!pluginOption) { 2561847f8eSopenharmony_ci return; 2661847f8eSopenharmony_ci } 2761847f8eSopenharmony_ci const pluginCommand = this.program.name(pluginOption.name) 2861847f8eSopenharmony_ci .description(pluginOption.description) 2961847f8eSopenharmony_ci .version(pluginOption.version) 3061847f8eSopenharmony_ci .action((opts) => { 3161847f8eSopenharmony_ci plugin.start(opts); 3261847f8eSopenharmony_ci plugin.stop(); 3361847f8eSopenharmony_ci }); 3461847f8eSopenharmony_ci pluginOption.commands.forEach((command) => { 3561847f8eSopenharmony_ci if (command.isRequiredOption) { 3661847f8eSopenharmony_ci pluginCommand.requiredOption(...command.options); 3761847f8eSopenharmony_ci } else { 3861847f8eSopenharmony_ci pluginCommand.option(...command.options); 3961847f8eSopenharmony_ci } 4061847f8eSopenharmony_ci }); 4161847f8eSopenharmony_ci } 4261847f8eSopenharmony_ci 4361847f8eSopenharmony_ci buildCommands() { 4461847f8eSopenharmony_ci this.program.parse(); 4561847f8eSopenharmony_ci } 4661847f8eSopenharmony_ci} 4761847f8eSopenharmony_ciclass ToolboxEntry { 4861847f8eSopenharmony_ci commandBuilder; 4961847f8eSopenharmony_ci constructor() { 5061847f8eSopenharmony_ci this.commandBuilder = new ToolBoxCommander(); 5161847f8eSopenharmony_ci } 5261847f8eSopenharmony_ci 5361847f8eSopenharmony_ci runPlugins() { 5461847f8eSopenharmony_ci const configuration = toolboxConfig.getToolConfiguration(); 5561847f8eSopenharmony_ci configuration.plugins.forEach((plugin) => { 5661847f8eSopenharmony_ci this.commandBuilder.addPluginCommand(plugin); 5761847f8eSopenharmony_ci }); 5861847f8eSopenharmony_ci this.commandBuilder.buildCommands(); 5961847f8eSopenharmony_ci } 6061847f8eSopenharmony_ci} 6161847f8eSopenharmony_cifunction main() { 6261847f8eSopenharmony_ci const entry = new ToolboxEntry(); 6361847f8eSopenharmony_ci entry.runPlugins(); 6461847f8eSopenharmony_ci} 6561847f8eSopenharmony_cimain();