Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/g-harel/ence
automation friendly json schemas
https://github.com/g-harel/ence
automation json schema structure
Last synced: 3 days ago
JSON representation
automation friendly json schemas
- Host: GitHub
- URL: https://github.com/g-harel/ence
- Owner: g-harel
- License: mit
- Created: 2017-05-27T01:42:20.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-07-26T01:20:32.000Z (over 6 years ago)
- Last Synced: 2024-10-31T18:58:20.671Z (19 days ago)
- Topics: automation, json, schema, structure
- Language: TypeScript
- Homepage:
- Size: 311 KB
- Stars: 8
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ence [![NPM Version](https://img.shields.io/npm/v/ence.svg)](https://www.npmjs.com/package/ence) [![Build Status](https://travis-ci.org/g-harel/ence.svg?branch=master)](https://travis-ci.org/g-harel/ence) [![NPM Type Definitions](https://img.shields.io/npm/types/ence.svg)](https://github.com/g-harel/ence)
> 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
```text
.items[n].name.en :: null | string
└────────┬──────┘ └─────┬─────┘
address type(s)
```#### Example
```json
[{"id": 123456, "abc": 31415}, {"id": "654321"}, null]
``````text
:: array
[n] :: null | object
[n].abc :: empty | number
[n].id :: number | string
```## Install
#### CLI
```shell
$ npm install --global ence
```#### Package
```shell
$ npm install ence
```## Usage
#### CLI
```
ence [--help] [--pretty]
``````shell
# Explore api response data
$ curl example.com/data.json | ence# Analyze local file
$ cat ./data.json | ence --pretty
``````shell
# 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
```typescript
// compute schema
ence(json: string, options?: Options): stringconst 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",
}```
```javascript
const ence = require("ence");ence("[]"); // => " :: array"
ence("[]", {array: "list"}); // => " :: list"
```## Performance
```
Quad core Intel Core i7-8550U @ 1.80GHz
``````text
+---------------------------+-----------+------------+
| 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](./examples).
## License
[MIT](./LICENSE)