▶️ Check online playground
Install
# ✨ Auto-detect npx nypm install untyped # npm npm install untyped # yarn yarn add untyped # pnpm pnpm add untyped # bun bun install untyped # deno deno install npm: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(usenpm i -g corepackfor Node.js < 16.10) - Install dependencies using
pnpm install - Run interactive tests using
pnpm dev - Use
pnpm webto start playground website - Use
pnpm testbefore push to ensure all tests and lint checks passing
License
Thanks to @dominikschreiber for donating package name.