Neurotoxin Powered Marketing

    leason

    1.0.0 • Public • Published

    Build Status

    Leason

    A JSON schema learner.

    NPM

    The concept of Leason is simple: learn the schema by feeding json documents.

    Install:

    npm i leason -g

    CLI:

    $ bin/leason
     
      Usage: leason [options]
     
      Options:
     
        -h, --help         output usage information
        -V, --version      output the version number
        -t, --title        add titles
        -f, --format       try to detect format
        -e, --enum         try to detect enum
        -s, --similar <n>  merge similar objects if `n` or more properties are the same
        -d, --default      add defaults
        -r, --required     add required
     
      Examples:
     
        $ leason my.json
        $ cat my.json | leason > schema.json
     

    Script:

     
    var Leason = require('leason');
    var json = require('./package.json');
     
    var leason = new Leason()
    leason.parse(json);
     
    console.log(leason.schema);
     

    Result:

    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "main": {
          "type": "string"
        },
        "watch": {
          "type": "object",
          "properties": {
            "test": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "bin": {
          "type": "object",
          "properties": {
            "leason": {
              "type": "string"
            }
          }
        },
        "scripts": {
          "type": "object",
          "properties": {
            "test": {
              "type": "string"
            },
            "watch": {
              "type": "string"
            }
          }
        },
        "author": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "dependencies": {
          "type": "object",
          "properties": {
            "type-of": {
              "type": "string"
            },
            "commander": {
              "type": "string"
            }
          }
        },
        "devDependencies": {
          "type": "object",
          "properties": {
            "js-yaml": {
              "type": "string"
            },
            "tape": {
              "type": "string"
            },
            "tap-spec": {
              "type": "string"
            },
            "glob": {
              "type": "string"
            },
            "npm-watch": {
              "type": "string"
            },
            "jshint": {
              "type": "string"
            }
          }
        }
      }
    }
     

    As one can see there still is much to be desired.

    Some goals:

    • learn types
    • learn formats (by testing validation)
    • detect enum (just give up after 20) or a certain treshold.
    • advanced. more filters to detect similarity.
    • tresholds for each filter. 95% match, means 5% is probably invalid or not. that's why treshold.
    • description filling
    • optional title setter. just capitalize, humanize.
    • auto refactor common parts into definitions.

    Keywords

    none

    Install

    npm i leason

    DownloadsWeekly Downloads

    2

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • avatar