1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Factor out helm chart normalization

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-10-18 09:52:35 -04:00
parent 9551e0c926
commit 8fd0b6f4c1
2 changed files with 31 additions and 30 deletions

View File

@ -83,5 +83,5 @@ export function sortCharts(charts: RawHelmChart[]) {
return chartsWithVersion
.sort(sortCompareChartVersions)
.map(chart => (delete chart.__version, chart));
.map(chart => (delete chart.__version, chart as RawHelmChart));
}

View File

@ -95,37 +95,11 @@ export class HelmChartManager {
const cacheFileStats = await fs.promises.stat(this.repo.cacheFilePath);
const data = yaml.load(cacheFile) as string | number | HelmCacheFile;
if (typeof data !== "object" || !data) {
return;
if (!data || typeof data !== "object" || typeof data.entries !== "object") {
throw Object.assign(new TypeError("Helm Cache file does not parse correctly"), { file: this.repo.cacheFilePath, data });
}
const { entries } = data;
/**
* Do some initial preprocessing on the data, so as to avoid needing to do it later
* 1. Set the repo name
* 2. Normalize the created date
* 3. Filter out deprecated items
*/
const normalized = Object.fromEntries(
iter.filter(
iter.map(
Object.entries(entries),
([name, charts]) => [
name,
sortCharts(
charts.map(chart => ({
...chart,
created: Date.parse(chart.created).toString(),
repo: this.repo.name,
})),
),
] as const
),
([, charts]) => !charts.every(chart => chart.deprecated),
)
);
const normalized = normalizeHelmCharts(this.repo.name, data.entries);
HelmChartManager.#cache.set(this.repo.name, {
data: v8.serialize(normalized),
@ -148,3 +122,30 @@ export class HelmChartManager {
return v8.deserialize(HelmChartManager.#cache.get(this.repo.name).data);
}
}
/**
* Do some initial preprocessing on the data, so as to avoid needing to do it later
* 1. Set the repo name
* 2. Normalize the created date
* 3. Filter out charts that only have deprecated entries
*/
function normalizeHelmCharts(repoName: string, entries: RepoHelmChartList): RepoHelmChartList {
return Object.fromEntries(
iter.filter(
iter.map(
Object.entries(entries),
([name, charts]) => [
name,
sortCharts(
charts.map(chart => ({
...chart,
created: Date.parse(chart.created).toString(),
repo: repoName,
})),
),
] as const
),
([, charts]) => !charts.every(chart => chart.deprecated),
)
);
}