Skip to content

Commit 8eadf1b

Browse files
committed
refactor(agent-cli): share output field omission helper
1 parent b246517 commit 8eadf1b

5 files changed

Lines changed: 28 additions & 50 deletions

File tree

packages/agent-cli/src/commands/handlers/assets.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
getChunks,
55
getAssets as getAssetsFromData,
66
} from '../datasource';
7-
import { requireArg } from '../utils';
7+
import { omitModulesFields, requireArg } from '../utils';
88

99
interface Asset {
1010
path: string;
@@ -230,21 +230,6 @@ const getAssetsDiffResult = (baseline: ChunkGraph, current: ChunkGraph) => ({
230230
},
231231
});
232232

233-
const omitModulesFields = <T>(value: T): T => {
234-
if (!value || typeof value !== 'object') {
235-
return value;
236-
}
237-
if (Array.isArray(value)) {
238-
return value.map((item) => omitModulesFields(item)) as T;
239-
}
240-
241-
return Object.fromEntries(
242-
Object.entries(value)
243-
.filter(([key]) => key !== 'modules')
244-
.map(([key, item]) => [key, omitModulesFields(item)]),
245-
) as T;
246-
};
247-
248233
export async function listAssets(): Promise<{
249234
ok: boolean;
250235
data: unknown;

packages/agent-cli/src/commands/handlers/build.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
getDataFilePath,
66
getEntrypoints as getEntrypointsFromData,
77
} from '../datasource';
8-
import { parsePositiveInt } from '../utils';
8+
import { omitModulesFields, parsePositiveInt } from '../utils';
99
import { getMediaAssets } from './assets';
1010
import { getLargeChunksData } from './chunks';
1111
import { detectDuplicatePackages, detectSimilarPackages } from './packages';
@@ -25,21 +25,6 @@ function withoutDescription<T>(result: { ok: boolean; data: T }): {
2525
};
2626
}
2727

28-
function omitModulesFields<T>(value: T): T {
29-
if (!value || typeof value !== 'object') {
30-
return value;
31-
}
32-
if (Array.isArray(value)) {
33-
return value.map((item) => omitModulesFields(item)) as T;
34-
}
35-
36-
return Object.fromEntries(
37-
Object.entries(value)
38-
.filter(([key]) => key !== 'modules')
39-
.map(([key, item]) => [key, omitModulesFields(item)]),
40-
) as T;
41-
}
42-
4328
export async function getSummary(): Promise<{
4429
ok: boolean;
4530
data: unknown;

packages/agent-cli/src/commands/handlers/chunks.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
11
import { getChunks, getChunkById as getChunkByIdFromData } from '../datasource';
2-
import { getMedianChunkSize, parseNumber, parsePositiveInt } from '../utils';
2+
import {
3+
getMedianChunkSize,
4+
omitModulesFields,
5+
parseNumber,
6+
parsePositiveInt,
7+
} from '../utils';
38

49
interface Chunk {
510
size: number;
611
}
712

8-
const omitModulesFields = <T>(value: T): T => {
9-
if (!value || typeof value !== 'object') {
10-
return value;
11-
}
12-
if (Array.isArray(value)) {
13-
return value.map((item) => omitModulesFields(item)) as T;
14-
}
15-
16-
return Object.fromEntries(
17-
Object.entries(value)
18-
.filter(([key]) => key !== 'modules')
19-
.map(([key, item]) => [key, omitModulesFields(item)]),
20-
) as T;
21-
};
22-
2313
export function getLargeChunksData(chunks: Chunk[]): {
2414
median: number;
2515
operator: number;

packages/agent-cli/src/commands/utils.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,21 @@ export function parseModulesInput(
126126
return parseCommaList(value);
127127
}
128128

129+
export function omitModulesFields<T>(value: T): T {
130+
if (!value || typeof value !== 'object') {
131+
return value;
132+
}
133+
if (Array.isArray(value)) {
134+
return value.map((item) => omitModulesFields(item)) as T;
135+
}
136+
137+
return Object.fromEntries(
138+
Object.entries(value)
139+
.filter(([key]) => key !== 'modules')
140+
.map(([key, item]) => [key, omitModulesFields(item)]),
141+
) as T;
142+
}
143+
129144
export function paginateItems<T>(
130145
items: T[],
131146
pageNumber: number,

packages/agent-cli/tests/cli.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import os from 'node:os';
44
import path from 'node:path';
55

66
import { runCli } from '../src/cli';
7+
import packageJson from '../package.json';
8+
9+
const expectedVersionOutput = `${packageJson.version}\n`;
710

811
describe('agent cli', () => {
912
it('lists the available subcommands for an external main agent', async () => {
@@ -56,7 +59,7 @@ describe('agent cli', () => {
5659

5760
expect(exitCode).toBe(0);
5861
expect(stderr.join('')).toBe('');
59-
expect(stdout.join('')).toBe('0.1.0-beta.0\n');
62+
expect(stdout.join('')).toBe(expectedVersionOutput);
6063
});
6164

6265
it('prints the package version with short option', async () => {
@@ -70,7 +73,7 @@ describe('agent cli', () => {
7073

7174
expect(exitCode).toBe(0);
7275
expect(stderr.join('')).toBe('');
73-
expect(stdout.join('')).toBe('0.1.0-beta.0\n');
76+
expect(stdout.join('')).toBe(expectedVersionOutput);
7477
});
7578

7679
it('invokes a named tool through the external agent query path', async () => {

0 commit comments

Comments
 (0)