20 lines
525 B
TypeScript
20 lines
525 B
TypeScript
import type { Config, Widget } from "./schema";
|
|||
|
|
|
||
|
|
const SECRET_WIDGET_FIELDS = ["apiToken", "apiKey", "password"] as const;
|
||
|
|
|
||
|
|
export function toPublicConfig(config: Config): Config {
|
||
|
|
return {
|
||
|
|
...config,
|
||
|
|
groups: config.groups.map((group) => ({
|
||
|
|
...group,
|
||
|
|
widgets: group.widgets.map(redactWidget),
|
||
|
|
})),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
function redactWidget(widget: Widget): Widget {
|
||
|
|
const clone: Record<string, unknown> = { ...widget };
|
||
|
|
for (const key of SECRET_WIDGET_FIELDS) delete clone[key];
|
||
|
|
return clone as Widget;
|
||
|
|
}
|