mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Fix: logs data disapearing causing crashes (#2566) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Refactor helm-chart.api and improve kube validation and error handling (#2265) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix: HPA's not sortable by age (#2565) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Conditionally render status icon for kube meta (#2298) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix custom resource loading spinner appears above extensions' cluster menus (#2344) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Lens should point to the release docs (#2268) Signed-off-by: Sebastian Malton <sebastian@malton.name> * Refactor the Extensions settings page (#2221) Signed-off-by: Sebastian Malton <sebastian@malton.name> * try and get jest to not core dump Signed-off-by: Sebastian Malton <sebastian@malton.name>
141 lines
3.3 KiB
TypeScript
141 lines
3.3 KiB
TypeScript
import { compile } from "path-to-regexp";
|
|
import { apiBase } from "../index";
|
|
import { stringify } from "querystring";
|
|
import { autobind } from "../../utils";
|
|
|
|
export type RepoHelmChartList = Record<string, HelmChart[]>;
|
|
export type HelmChartList = Record<string, RepoHelmChartList>;
|
|
|
|
export interface IHelmChartDetails {
|
|
readme: string;
|
|
versions: HelmChart[];
|
|
}
|
|
|
|
const endpoint = compile(`/v2/charts/:repo?/:name?`) as (params?: {
|
|
repo?: string;
|
|
name?: string;
|
|
}) => string;
|
|
|
|
/**
|
|
* Get a list of all helm charts from all saved helm repos
|
|
*/
|
|
export async function listCharts(): Promise<HelmChart[]> {
|
|
const data = await apiBase.get<HelmChartList>(endpoint());
|
|
|
|
return Object
|
|
.values(data)
|
|
.reduce((allCharts, repoCharts) => allCharts.concat(Object.values(repoCharts)), [])
|
|
.map(([chart]) => HelmChart.create(chart));
|
|
}
|
|
|
|
export interface GetChartDetailsOptions {
|
|
version?: string;
|
|
reqInit?: RequestInit;
|
|
}
|
|
|
|
/**
|
|
* Get the readme and all versions of a chart
|
|
* @param repo The repo to get from
|
|
* @param name The name of the chart to request the data of
|
|
* @param options.version The version of the chart's readme to get, default latest
|
|
* @param options.reqInit A way for passing in an abort controller or other browser request options
|
|
*/
|
|
export async function getChartDetails(repo: string, name: string, { version, reqInit }: GetChartDetailsOptions = {}): Promise<IHelmChartDetails> {
|
|
const path = endpoint({ repo, name });
|
|
|
|
const { readme, ...data } = await apiBase.get<IHelmChartDetails>(`${path}?${stringify({ version })}`, undefined, reqInit);
|
|
const versions = data.versions.map(HelmChart.create);
|
|
|
|
return {
|
|
readme,
|
|
versions,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get chart values related to a specific repos' version of a chart
|
|
* @param repo The repo to get from
|
|
* @param name The name of the chart to request the data of
|
|
* @param version The version to get the values from
|
|
*/
|
|
export async function getChartValues(repo: string, name: string, version: string): Promise<string> {
|
|
return apiBase.get<string>(`/v2/charts/${repo}/${name}/values?${stringify({ version })}`);
|
|
}
|
|
|
|
@autobind()
|
|
export class HelmChart {
|
|
constructor(data: any) {
|
|
Object.assign(this, data);
|
|
}
|
|
|
|
static create(data: any) {
|
|
return new HelmChart(data);
|
|
}
|
|
|
|
apiVersion: string;
|
|
name: string;
|
|
version: string;
|
|
repo: string;
|
|
kubeVersion?: string;
|
|
created: string;
|
|
description?: string;
|
|
digest: string;
|
|
keywords?: string[];
|
|
home?: string;
|
|
sources?: string[];
|
|
maintainers?: {
|
|
name: string;
|
|
email: string;
|
|
url: string;
|
|
}[];
|
|
engine?: string;
|
|
icon?: string;
|
|
appVersion?: string;
|
|
deprecated?: boolean;
|
|
tillerVersion?: string;
|
|
|
|
getId() {
|
|
return `${this.repo}:${this.apiVersion}/${this.name}@${this.getAppVersion()}+${this.digest}`;
|
|
}
|
|
|
|
getName() {
|
|
return this.name;
|
|
}
|
|
|
|
getFullName(splitter = "/") {
|
|
return [this.getRepository(), this.getName()].join(splitter);
|
|
}
|
|
|
|
getDescription() {
|
|
return this.description;
|
|
}
|
|
|
|
getIcon() {
|
|
return this.icon;
|
|
}
|
|
|
|
getHome() {
|
|
return this.home;
|
|
}
|
|
|
|
getMaintainers() {
|
|
return this.maintainers || [];
|
|
}
|
|
|
|
getVersion() {
|
|
return this.version;
|
|
}
|
|
|
|
getRepository() {
|
|
return this.repo;
|
|
}
|
|
|
|
getAppVersion() {
|
|
return this.appVersion || "";
|
|
}
|
|
|
|
getKeywords() {
|
|
return this.keywords || [];
|
|
}
|
|
}
|