-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathpersist.ts
More file actions
54 lines (49 loc) · 1.42 KB
/
persist.ts
File metadata and controls
54 lines (49 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import path from 'node:path';
import { z } from 'zod';
import {
type CoreConfig,
DEFAULT_PERSIST_FILENAME,
DEFAULT_PERSIST_FORMAT,
DEFAULT_PERSIST_OUTPUT_DIR,
type Format,
persistConfigSchema,
uploadConfigSchema,
} from '@code-pushup/models';
import { createReportPath, objectFromEntries } from '@code-pushup/utils';
export type EnhancedPersistConfig = Pick<CoreConfig, 'persist' | 'upload'>;
export function persistedFilesFromConfig(
config: EnhancedPersistConfig,
{ isDiff, directory }: { isDiff?: boolean; directory: string },
): Record<Format, string> {
const {
persist: {
outputDir = DEFAULT_PERSIST_OUTPUT_DIR,
filename = DEFAULT_PERSIST_FILENAME,
} = {},
} = config;
const dir = path.isAbsolute(outputDir)
? outputDir
: path.join(directory, outputDir);
const suffix = isDiff ? 'diff' : undefined;
return objectFromEntries(
DEFAULT_PERSIST_FORMAT.map(format => [
format,
createReportPath({ outputDir: dir, filename, format, suffix }),
]),
);
}
export async function parsePersistConfig(
json: unknown,
): Promise<EnhancedPersistConfig> {
const schema = z.object({
persist: persistConfigSchema.optional(),
upload: uploadConfigSchema.optional(),
});
const result = await schema.safeParseAsync(json);
if (result.error) {
throw new Error(
`Code PushUp config is invalid:\n${z.prettifyError(result.error)}`,
);
}
return result.data;
}