Skip to content

Commit 6c84899

Browse files
committed
feat: Add verbosity toggle
1 parent 1cc245b commit 6c84899

8 files changed

Lines changed: 53 additions & 5 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
node_modules
1212
oclif.manifest.json
1313
.env
14+
.codify-files

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
"deploy": "npm run pkg && npm run notarize && npm run upload",
146146
"prepublishOnly": "npm run build"
147147
},
148-
"version": "1.0.2",
148+
"version": "1.1.0-beta",
149149
"bugs": "https://github.com/codifycli/codify/issues",
150150
"keywords": [
151151
"oclif",

src/orchestrators/apply.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ProcessName, ctx } from '../events/context.js';
2+
import { DefaultReporter } from '../ui/reporters/default-reporter.js';
23
import { Reporter } from '../ui/reporters/reporter.js';
34
import { sleep } from '../utils/index.js';
45
import { PlanOrchestrator } from './plan.js';
@@ -28,6 +29,14 @@ export const ApplyOrchestrator = {
2829
const { plan, pluginManager, project } = planResult;
2930
const filteredPlan = plan.filterNoopResources()
3031

32+
let currentVerbosity = args.verbosityLevel ?? 0;
33+
if (reporter instanceof DefaultReporter) {
34+
reporter.onVerbosityToggle(async () => {
35+
currentVerbosity = currentVerbosity === 0 ? 3 : 0;
36+
await pluginManager.setVerbosityLevel(currentVerbosity);
37+
});
38+
}
39+
3140
if (!args.noProgress) ctx.processStarted(ProcessName.APPLY);
3241
if (!args.noProgress) await reporter.displayProgress();
3342

src/orchestrators/destroy.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ResourceConfig } from '../entities/resource-config.js';
55
import { ResourceInfo } from '../entities/resource-info.js';
66
import { ProcessName, SubProcessName, ctx } from '../events/context.js';
77
import { PluginManager, ResourceDefinitionMap } from '../plugins/plugin-manager.js';
8+
import { DefaultReporter } from '../ui/reporters/default-reporter.js';
89
import { PromptType, Reporter } from '../ui/reporters/reporter.js';
910
import { wildCardMatch } from '../utils/wild-card-match.js';
1011

@@ -53,6 +54,14 @@ export class DestroyOrchestrator {
5354

5455
const filteredPlan = plan.filterNoopResources()
5556

57+
let currentVerbosity = args.verbosityLevel ?? 0;
58+
if (reporter instanceof DefaultReporter) {
59+
reporter.onVerbosityToggle(async () => {
60+
currentVerbosity = currentVerbosity === 0 ? 3 : 0;
61+
await pluginManager.setVerbosityLevel(currentVerbosity);
62+
});
63+
}
64+
5665
await reporter.displayProgress();
5766
await ctx.process(ProcessName.DESTROY, () =>
5867
pluginManager.apply(destroyProject, filteredPlan)

src/ui/components/default-component.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export function DefaultComponent(props: {
5757
}
5858
{
5959
renderStatus === RenderStatus.PROGRESS && (
60-
<ProgressDisplay />
60+
<ProgressDisplay emitter={emitter} />
6161
)
6262
}
6363
{

src/ui/components/progress/progress-display.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import { Box, Text } from 'ink';
1+
import { Box, Text, useInput } from 'ink';
22
import { useAtom } from 'jotai';
3-
import React from 'react';
3+
import { EventEmitter } from 'node:events';
4+
import React, { useState } from 'react';
45

6+
import { ProcessName } from '../../../events/context.js';
7+
import { RenderEvent } from '../../reporters/reporter.js';
58
import { store } from '../../store/index.js';
69
import Spinner from './spinner.js';
710

@@ -21,8 +24,21 @@ export interface ProgressState {
2124
}> | null;
2225
}
2326

24-
export function ProgressDisplay() {
27+
export function ProgressDisplay(props: { emitter: EventEmitter }) {
28+
const { emitter } = props;
2529
const [progress] = useAtom(store.progressState);
30+
const [isVerbose, setIsVerbose] = useState(false);
31+
32+
const isApplyOrDestroy = progress?.name === ProcessName.APPLY || progress?.name === ProcessName.DESTROY;
33+
34+
useInput((input) => {
35+
if (!isApplyOrDestroy) return;
36+
if (input === 'v') {
37+
setIsVerbose((prev) => !prev);
38+
emitter.emit(RenderEvent.TOGGLE_VERBOSITY);
39+
}
40+
});
41+
2642
if (!progress) {
2743
return;
2844
}
@@ -38,6 +54,9 @@ export function ProgressDisplay() {
3854
<Box flexDirection="column" marginLeft={2}>
3955
<SubProgressDisplay subProgresses={subProgresses}/>
4056
</Box>
57+
{isApplyOrDestroy && (
58+
<Text dimColor>{isVerbose ? '[v] Hide verbose logs' : '[v] Show verbose logs'}</Text>
59+
)}
4160
</Box>
4261
}
4362

src/ui/reporters/default-reporter.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const ProgressLabelMapping = {
4646
export class DefaultReporter implements Reporter {
4747
private renderEmitter = new EventEmitter();
4848
private progressState: ProgressState | null = null
49+
private verbosityToggleCallback: (() => void) | null = null;
4950
silent = false;
5051

5152
constructor() {
@@ -56,6 +57,14 @@ export class DefaultReporter implements Reporter {
5657
ctx.on(Event.PROCESS_FINISH, (name) => this.onProcessFinishEvent(name))
5758
ctx.on(Event.SUB_PROCESS_START, (name, additionalName) => this.onSubprocessStartEvent(name, additionalName));
5859
ctx.on(Event.SUB_PROCESS_FINISH, (name, additionalName) => this.onSubprocessFinishEvent(name, additionalName));
60+
61+
this.renderEmitter.on(RenderEvent.TOGGLE_VERBOSITY, () => {
62+
this.verbosityToggleCallback?.();
63+
});
64+
}
65+
66+
onVerbosityToggle(callback: () => void): void {
67+
this.verbosityToggleCallback = callback;
5968
}
6069

6170
async promptPressKeyToContinue(message?: string): Promise<void> {

src/ui/reporters/reporter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export enum RenderEvent {
2323
PROMPT_SUDO_GRANTED = 'promptSudoGranted',
2424
SUDO_PROMPT_RESULT = 'promptSudoResult',
2525
STATE_TRANSITION = 'stateTransition',
26+
TOGGLE_VERBOSITY = 'toggleVerbosity',
2627
}
2728

2829
/**

0 commit comments

Comments
 (0)