@senchou/core

Generate TypeScript for Kubernetes resources.

Usage no npm install needed!

<script type="module">
  import senchouCore from 'https://cdn.skypack.dev/@senchou/core';
</script>

README

@senchou/core

Generate TypeScript for Kubernetes resources.

Installation

# Using npm.
npm install @senchou/core

# Using yarn.
yarn add @senchou/core

Usage

Import

Imports fetch manifests from sources, returning a JSON Schema, CustomResourceDefinitions, or JSON-formatted manifests.

Kubernetes

To import a Kubernetes release's schema, see the following example.

import core from "@senchou/core";

const schema = await core.import.kubernetes();

To import a specific release, specify the version number.

import core from "@senchou/core";

const schema = await core.import.kubernetes("1.20.0");

CustomResourceDefinition

CustomResourceDefinitions can be imported from supported sources.

GitHub

Importing CustomResourceDefinitions from GitHub is supported via doc.crds.dev. To import CRDs from GitHub, see the following example.

import core from "@senchou/core";

const crds = await core.import.github("traefik/traefik-helm-chart");
Helm

Helm Charts can be imported if Helm is installed. See the following example.

import core from "@senchou/core";

const manifests = await core.import.helm({
    name: "my-traefik-deployment",
    chart: "traefik/traefik",
});

To supply custom values for a chart, see the following example.

import core from "@senchou/core";

const manifests = await core.import.helm({
    name: "my-traefik-deployment",
    chart: "traefik/traefik",
    values: {
        // Any values for your chart can be set here.
        ingressRoute: {
            dashboard: {
                enabled: false,
            },
        },
    },
});

Custom arguments can be passed to the Helm command line if extra customization is necessary.

import core from "@senchou/core";

const manifests = await core.import.helm({
    name: "my-traefik-deployment",
    chart: "traefik/traefik",
    args: ["--my-arg", "--my-other-arg"],
});

Generate

TypeScript code can be generated from imported Kubernetes JSON Schemas or CustomResourceDefinitions.

Kubernetes

To generate types for a Kubernetes release, see the following example.

import core from "@senchou/core";

const schema = await core.import.kubernetes();

const code = core.generate.kubernetes(schema);

CustomResourceDefinitions

To generate types for CustomResourceDefinitions, see the following example.

import core from "@senchou/core";

// CRDs from any source can be used.
const crds = await core.import.github("traefik/traefik-helm-chart");

const code = core.generate.crd(crds);

Utility

A helper and type exists to assert that an object is a CustomResourceDefinition.

import { isCRD, CustomResourceDefinition } from "@senchou/core";

const invalid = {};

isCRD(invalid); // false

const valid = {
    kind: "CustomResourceDefinition",
};

if (isCRD(valid)) {
    // valid is CustomResourceDefinition
}

const crd: CustomResourceDefinition = {
    /* ... */
};