Skip to content
automation friendly json schemas
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples
.gitignore
.npmignore
.travis.yml
LICENSE
README.md
ence.ts
index.ts
package.json
test.ts
tsconfig.json

README.md

ence NPM Version Build Status NPM Type Definitions

automation friendly json schemas

  • Deterministic result ideal for diffs and snapshot testing
  • Full address output convenient for grep analysis
  • Missing/inconsistent object key detection
  • Compatible with any tool outputting to stdin

Syntax

.items[n].name.en :: null | string
└────────┬──────┘    └─────┬─────┘
      address           type(s)

Example

[{"id": 123456, "abc": 31415}, {"id": "654321"}, null]
 :: array
[n] :: null | object
[n].abc :: empty | number
[n].id :: number | string

Install

CLI

$ npm install --global ence

Package

$ npm install ence

Usage

CLI

ence [--help] [--pretty]
# Explore api response data
$ curl example.com/data.json | ence

# Analyze local file
$ cat ./data.json | ence --pretty
# Filter top level keys
$ ... | ence | grep -P "^\.\w+ ::"

# Filter potentially empty addresses
$ ... | ence | grep -P "::.*empty"

# Filter mixed-type arrays
$ ... | ence | grep -P "\[n\] ::.*\|"

API

// compute schema
ence(json: string, options?: Options): string

const options: Options = {
   // customize syntax strings
   item: "[n]",
   join: " | ",
   key: ".",
   type: " :: ",

   // customize type strings
   array: "array",
   boolean: "boolean",
   empty: "empty",
   null: "null",
   number: "number",
   object: "object",
   string: "string",
}
const ence = require("ence");

ence("[]");                  // => " :: array"
ence("[]", {array: "list"}); // => " :: list"

Performance

Quad core Intel Core i7-8550U @ 1.80GHz
+---------------------------+-----------+------------+
| Example                   | Time (ms) | Input (kB) |
+===========================+===========+============+
| data-bank                 |     42.26 |    1624.44 |
| data-reddit               |      6.74 |     207.46 |
| data-government           |      5.44 |     168.95 |
| array-array-object-empty  |      0.02 |       0.15 |
| array-object-empty-simple |      0.02 |       0.13 |
| array-object              |      0.01 |       0.10 |
| array-object-empty-mixed  |      0.02 |       0.08 |
| object-array-mixed        |      0.01 |       0.05 |
| object-simple             |      0.01 |       0.05 |
| array-simple              |      0.01 |       0.03 |
| array-mixed               |      0.01 |       0.01 |
| string                    |      0.00 |       0.01 |
| boolean                   |      0.00 |       0.01 |
| null                      |      0.00 |       0.01 |
| number                    |      0.00 |       0.00 |
| object                    |      0.00 |       0.00 |
| array                     |      0.01 |       0.00 |
+---------------------------+-----------+------------+

The test cases can be found in this directory.

License

MIT

You can’t perform that action at this time.