Noodles, Poodles and More!

    untyped
    TypeScript icon, indicating that this package has built-in type declarations

    0.4.4 • Public • Published

    untyped

    npm version npm downloads Github Actions Codecov bundle

    ▶️ Check online playground

    Usage

    Install package

    Install untyped npm package:

    yarn add untyped
    # or
    npm i untyped

    Define reference object

    First we have to define a reference object that describes types, defaults and normalizer

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

    Resolving Schema

    import { resolveSchema } from 'untyped'
    
    const schema = 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"
    }

    Generating types

    import { resolveSchema, generateTypes } from 'untyped'
    
    const types = generateTypes(resolveSchema(defaultPlanet))

    Output:

    interface Untyped {
       /** @default "earth" */
      name: string,
    
      specs: {
        /** @default 9.8 */
        gravity: number,
    
        /**
         * planet moons
         * @default ["moon"]
        */
        moons: string[],
      },
    }

    Generating markdown

    import { resolveSchema, generateTypes, generateMarkdown } from 'untyped'
    
    const markdown = generateMarkdown(generateTypes(resolveSchema(defaultPlanet)))

    Output:

    # `name`
    - **Type**: `string`
    - **Default**: `"earth"`
    
    
    # `specs`
    
    ## `gravity`
    - **Type**: `number`
    - **Default**: `9.8`
    
    
    ## `moons`
    - **Type**: `array`
    - **Default**: `["moon"]`

    Contribution

    • Clone repository
    • Install dependencies with yarn install
    • Use yarn web to start playground website
    • Use yarn test before push to ensure all tests and lint checks passing

    License

    MIT

    Thanks to @dominikschreiber for donating package name.

    Keywords

    none

    Install

    npm i untyped

    DownloadsWeekly Downloads

    61,173

    Version

    0.4.4

    License

    MIT

    Unpacked Size

    51 kB

    Total Files

    14

    Last publish

    Collaborators

    • pi0
    • danielroe