Skip to content

Commit

Permalink
fix: 🐛 Merkur CLI show options for --help argument
Browse files Browse the repository at this point in the history
  • Loading branch information
mjancarik committed Aug 30, 2024
1 parent 98d8417 commit ec156f1
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 26 deletions.
102 changes: 81 additions & 21 deletions packages/cli/bin/merkur.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env node
import { Command } from 'commander';
import { Command, Option } from 'commander';
import { dev } from '../src/commands/dev.mjs';
import { build } from '../src/commands/build.mjs';
import { start } from '../src/commands/start.mjs';
Expand All @@ -11,31 +11,62 @@ import packageFile from '../package.json' with { type: 'json' };

const program = new Command();

const writeToDiskOption = new Option('--writeToDisk', 'Write built files to disk.');
const sourcemapOption = new Option('--sourcemap', 'Generate sourcemap.');
const runTasksOption = new Option('--runTasks [runTasks...]', 'Run only defined tasks.');
const outputFilesOption = new Option('--outFile <string>', 'Server out file configuration in es-build.');
const portOption = new Option('--port <number>', 'Widget server port.');
const devServerPortOption = new Option('--devServerPort <number>', 'Dev server port.');
const projectFolderOption = new Option('--projectFolder <string>', 'Project folder.');
const buildFolderOption = new Option('--buildFolder <string>', 'Build folder.')
const staticFolderOption = new Option('--staticFolder <string>', 'Static folder.');
const staticPathOption = new Option('--staticPath <string>', 'The static path for dev server and widget server.');
const hasRunDevServerOption = new Option('--hasRunDevServer', 'Flag for starting dev server');
const hasRunWidgetServerOption = new Option('--hasRunWidgetServer', 'Flag for starting widget server');
const inspectOption = new Option('--inspect', 'Debugging widget server');
const verboseOption = new Option('--verbose', 'Verbose mode which show debug information.');

program
.name('merkur')
.description('CLI for Merkur framework.')
.option('--writeToDisk', 'Write built files to disk.')
.option('--sourcemap', 'Generate sourcemap.')
.option('--runTask [runTask...]', 'Run only defined task.')
.option('--outFile <string>', 'Server out file configuration in es-build.')
.option('--port <number>', 'Widget server port.')
.option('--devServerPort <number>', 'Dev server port.')
.option('--projectFolder <string>', 'Project folder.')
.option('--buildFolder <string>', 'Build folder.')
.option('--staticFolder <string>', 'Static folder.')
.option('--staticPath <string>', 'The static path for dev server and widget server.')
.option('--hasRunDevServer', 'Flag for starting dev server')
.option('--hasRunWidgetServer', 'Flag for starting widget server')
.option('--inspect', 'Debugging widget server')
.option('--verbose', 'Verbose mode which show debug information.')
// .option('--writeToDisk', 'Write built files to disk.')
// .option('--sourcemap', 'Generate sourcemap.')
// .option('--runTasks [runTasks...]', 'Run only defined tasks.')
// .option('--outFile <string>', 'Server out file configuration in es-build.')
// .option('--port <number>', 'Widget server port.')
// .option('--devServerPort <number>', 'Dev server port.')
// .option('--projectFolder <string>', 'Project folder.')
// .option('--buildFolder <string>', 'Build folder.')
// .option('--staticFolder <string>', 'Static folder.')
// .option('--staticPath <string>', 'The static path for dev server and widget server.')
// .option('--hasRunDevServer', 'Flag for starting dev server')
// .option('--hasRunWidgetServer', 'Flag for starting widget server')
// .option('--inspect', 'Debugging widget server')
// .option('--verbose', 'Verbose mode which show debug information.')
.version(packageFile.version);

program.command(COMMAND_NAME.DEV).description('Dev command').action(async (options, cmd) => {
program.command(COMMAND_NAME.DEV)
.description('Dev command')
.addOption(writeToDiskOption)
.addOption(sourcemapOption)
.addOption(runTasksOption)
.addOption(outputFilesOption)
.addOption(portOption)
.addOption(devServerPortOption)
.addOption(projectFolderOption)
.addOption(buildFolderOption)
.addOption(staticFolderOption)
.addOption(staticPathOption)
.addOption(hasRunDevServerOption)
.addOption(hasRunWidgetServerOption)
.addOption(inspectOption)
.addOption(verboseOption)
.action(async (options, cmd) => {
const args = {
...{
writeToDisk: false,
watch: true,
runTask: ['node', 'es13'],
runTasks: ['node', 'es13'],
hasRunDevServer: true,
hasRunWidgetServer: true,
},
Expand All @@ -47,7 +78,17 @@ program.command(COMMAND_NAME.DEV).description('Dev command').action(async (optio
dev({ args, command: COMMAND_NAME.DEV });
});

program.command(COMMAND_NAME.BUILD).action(async (options, cmd) => {
program
.command(COMMAND_NAME.BUILD)
.addOption(writeToDiskOption)
.addOption(sourcemapOption)
.addOption(runTasksOption)
.addOption(outputFilesOption)
.addOption(projectFolderOption)
.addOption(buildFolderOption)
.addOption(staticFolderOption)
.addOption(verboseOption)
.action(async (options, cmd) => {
const args = {
...{ writeToDisk: true, watch: false, forceLegacy: true }, ...cmd.optsWithGlobals(), ...options
};
Expand All @@ -56,7 +97,19 @@ program.command(COMMAND_NAME.BUILD).action(async (options, cmd) => {
await build({ args, command: COMMAND_NAME.BUILD });
});

program.command(COMMAND_NAME.START).action(async (options, cmd) => {
program
.command(COMMAND_NAME.START)
.addOption(portOption)
.addOption(devServerPortOption)
.addOption(projectFolderOption)
.addOption(buildFolderOption)
.addOption(staticFolderOption)
.addOption(staticPathOption)
.addOption(hasRunDevServerOption)
.addOption(hasRunWidgetServerOption)
.addOption(inspectOption)
.addOption(verboseOption)
.action(async (options, cmd) => {
const args = {
...{ watch: false, hasRunWidgetServer: true }, ...cmd.optsWithGlobals(), ...options
};
Expand All @@ -65,10 +118,17 @@ program.command(COMMAND_NAME.START).action(async (options, cmd) => {
await start({ args, command: COMMAND_NAME.START});
});

program.command(COMMAND_NAME.TEST).allowUnknownOption().action(async (options, cmd) => {
program
.command(COMMAND_NAME.TEST)
.allowUnknownOption()
.action(async (options, cmd) => {
process.env.NODE_ENV = process.env.NODE_ENV ?? 'test';

await test({ args: cmd.args, command: COMMAND_NAME.TEST });
const args = {
...options,
};

await test({ args, commandArgs: cmd.args, command: COMMAND_NAME.TEST });
});

program.parse(process.argv);
11 changes: 6 additions & 5 deletions packages/cli/src/commands/test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import { createContext } from '../context.mjs';
import { createLogger } from '../logger.mjs';
import { createMerkurConfig } from '../merkurConfig.mjs';
import { handleExit } from '../handleExit.mjs';
import cli from '@merkur/integration-custom-element/cli';

export async function test({ args, command }) {
export async function test({ args, commandArgs, command }) {
const context = await createContext();
let baseCliConfig = await createCLIConfig({ args, command });

Expand All @@ -22,10 +23,10 @@ export async function test({ args, command }) {

await handleExit({ context });

args.unshift('./jest.config.js');
args.unshift('-c');
commandArgs.unshift('./jest.config.js');
commandArgs.unshift('-c')

const runner = spawn('jest', args, {
const runner = spawn('jest', commandArgs, {
env: {
...process.env,
PATH: npmRunPath(),
Expand All @@ -37,7 +38,7 @@ export async function test({ args, command }) {
});

runner.on('spawn', () => {
logger.debug(`Run test runner ${args.join(', ')}`);
logger.debug(`Run test runner ${commandArgs.join(', ')}`);
});
runner.on('exit', (code, signal) => {
logger.info(`child process exited with code ${code} and signal ${signal}`);
Expand Down
1 change: 1 addition & 0 deletions packages/create-widget/template/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20

0 comments on commit ec156f1

Please sign in to comment.