Files
papra/apps/docs/src/config.data.ts
2025-01-18 00:21:31 +01:00

56 lines
1.5 KiB
TypeScript

import type { ConfigDefinition, ConfigDefinitionElement } from 'figue';
import { isArray, isEmpty, isNil } from 'lodash-es';
import { configDefinition } from '../../papra-server/src/modules/config/config';
function walk(configDefinition: ConfigDefinition, path: string[] = []): (ConfigDefinitionElement & { path: string[] })[] {
return Object
.entries(configDefinition)
.flatMap(([key, value]) => {
if ('schema' in value) {
return [{ ...value, path: [...path, key] }] as (ConfigDefinitionElement & { path: string[] })[];
}
return walk(value, [...path, key]);
});
}
const configDetails = walk(configDefinition);
function formatDoc(doc: string | undefined): string {
const coerced = (doc ?? '').trim();
if (coerced.endsWith('.')) {
return coerced;
}
return `${coerced}.`;
}
const rows = configDetails
.filter(({ path }) => path[0] !== 'env')
.map(({ doc, default: defaultValue, env, path }) => {
const isEmptyDefaultValue = isNil(defaultValue) || (isArray(defaultValue) && isEmpty(defaultValue)) || defaultValue === '';
const rawDocumentation = formatDoc(doc);
return {
path,
env,
documentation: rawDocumentation,
defaultValue: isEmptyDefaultValue ? undefined : defaultValue,
};
});
const mdSections = rows.map(({ documentation, env, path, defaultValue }) => `
### ${env}
${documentation}
- Path: \`${path.join('.')}\`
- Environment variable: \`${env}\`
- Default value: \`${defaultValue}\`
`.trim()).join('\n\n---\n\n');
export { mdSections };