untyped

<!-- automd:badges bundlejs -->

MIT 40 个版本
安装
npm install untyped
yarn add untyped
pnpm add untyped
bun add untyped
README

untyped

npm version npm downloads bundle size

▶️ Check online playground

Install

# ✨ Auto-detect
npx nypm install untyped

# npm
npm install untyped

# yarn
yarn add untyped

# pnpm
pnpm install untyped

# bun
bun install untyped

# deno
deno install untyped

Usage

First we have to define a reference object that describes types, defaults, and a $resolve method (normalizer).

const defaultPlanet = {
  name: "earth",
  specs: {
    gravity: {
      $resolve: (val) => Number.parseFloat(val),
      $default: "9.8",
    },
    moons: {
      $resolve: (val = ["moon"]) => [val].flat(),
      $schema: {
        title: "planet moons",
      },
    },
  },
};

API

resolveSchema

import { resolveSchema } from "untyped";

const schema = await resolveSchema(defaultPlanet);

Output:

{
  "properties": {
    "name": {
      "type": "string",
      "default": "earth"
    },
    "specs": {
      "properties": {
        "gravity": {
          "default": 9.8,
          "type": "number"
        },
        "moons": {
          "title": "planet moons",
          "default": ["moon"],
          "type": "array",
          "items": [
            {
              "type": "string"
            }
          ]
        }
      },
      "type": "object"
    }
  },
  "type": "object"
}

generateTypes

import { resolveSchema, generateTypes } from "untyped";

const types = generateTypes(await resolveSchema(defaultPlanet));

Output:

interface Untyped {
  /** @default "earth" */
  name: string;

  specs: {
    /** @default 9.8 */
    gravity: number;

    /**
     * planet moons
     * @default ["moon"]
     */
    moons: string[];
  };
}

generateMarkdown

import { resolveSchema, generateMarkdown } from "untyped";

const markdown = generateMarkdown(await resolveSchema(defaultPlanet));

Output:

# `name`

- **Type**: `string`
- **Default**: `"earth"`

# `specs`

## `gravity`

- **Type**: `number`
- **Default**: `9.8`

## `moons`

- **Type**: `array`
- **Default**: `["moon"]`

💻 Development

  • Clone this repository
  • Enable Corepack using corepack enable (use npm i -g corepack for Node.js < 16.10)
  • Install dependencies using pnpm install
  • Run interactive tests using pnpm dev
  • Use pnpm web to start playground website
  • Use pnpm test before push to ensure all tests and lint checks passing

License

MIT

Thanks to @dominikschreiber for donating package name.

版本列表
2.0.0 2025-02-26
1.5.2 2024-12-16
1.5.1 2024-10-05
1.5.0 2024-09-26
1.4.2 2024-01-20
1.4.1 2024-01-19
1.4.0 2023-07-28
1.3.2 2023-03-28
1.3.1 2023-03-27
1.3.0 2023-03-27
1.2.2 2023-01-13
1.2.1 2023-01-03
1.2.0 2022-12-14
1.1.0 2022-12-13
1.0.0 2022-11-15
0.5.0 2022-09-12
0.4.7 2022-08-26
0.4.6 2022-08-26
0.4.5 2022-08-04
0.4.4 2022-03-31
0.4.3 2022-03-15
0.4.2 2022-03-09
0.4.1 2022-03-09
0.4.0 2022-03-09
0.3.0 2021-11-18
0.2.13 2021-11-10
0.2.12 2021-11-05
0.2.11 2021-11-02
0.2.10 2021-10-26
0.2.9 2021-09-21
0.2.8 2021-07-29
0.2.7 2021-07-22
0.2.6 2021-07-22
0.2.5 2021-04-09
0.2.4 2021-04-02
0.2.3 2021-04-02
0.2.2 2021-03-28
0.2.1 2021-03-25
0.2.0 2021-03-24
0.1.0 2015-05-16