ramldt2jsonschema
Version:
Converts a RAML data type into JSON schema, and back
147 lines (109 loc) • 4.62 kB
Markdown
# ramldt2jsonschema
[](https://greenkeeper.io/)
[![NPM version][npm-image]][npm-url]
[![NPM downloads][downloads-image]][downloads-url]
[![Build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]
CLI & Library to convert a RAML 1.0 DataType to a JSON Schema Draft 4, and back. Uses [webapi-parser](https://github.com/raml-org/webapi-parser) under the hood.
## Usage
### Global (CLI)
```
npm install -g ramldt2jsonschema
```
This will install two command-line tools:
- `dt2js`: RAML data type <> JSON schema
- `js2dt`: JSON schema <> RAML data type
#### dt2js
```
dt2js <ramlFile> <ramlTypeName> --draft=[version] [--validate]
```
**Options**
* `<ramlFile>` Path to a file containing at least one RAML data type (e.g. `path/to/api.raml`)
* `<ramlTypeName>` RAML type name to convert to JSON schema
* `--draft` Optional JSON Shema draft version to convert to. Supported values are: `04`, `06` and `07` (default)
* `--validate` Validate output JSON Schema with Ajv. Throws an error if schema is invalid. Requires "ajv" to be installed. (default: false)
#### js2dt
```
js2dt <jsonFile> <ramlTypeName> [--validate]
```
**Options**
* `<jsonFile>` Path to a JSON schema file (e.g. `path/to/schema.json`)
* `<ramlTypeName>` RAML type name to give to the exported RAML data type
* `--validate` Validate output RAML with webapi-parser. Throws an error if it is invalid. (default: false)
### Locally (JavaScript)
```
npm install ramldt2jsonschema --save
```
#### dt2js
```js
const r2j = require('ramldt2jsonschema')
const join = require('path').join
const fs = require('fs')
const filePath = join(__dirname, 'complex_cat.raml')
const ramlData = fs.readFileSync(filePath).toString()
async function main () {
let schema
try {
schema = await r2j.dt2js(ramlData, 'Cat')
} catch (err) {
console.log(err)
return
}
console.log(JSON.stringify(schema, null, 2))
}
main()
```
#### js2dt
```js
const r2j = require('ramldt2jsonschema')
const join = require('path').join
const fs = require('fs')
const yaml = require('js-yaml')
const filePath = join(__dirname, 'complex_cat.json')
const jsonData = fs.readFileSync(filePath).toString()
async function main () {
let raml
try {
raml = await r2j.js2dt(jsonData, 'Cat')
} catch (err) {
console.log(err)
return
}
console.log('#%RAML 1.0 Library\n')
console.log(yaml.safeDump(raml, { 'noRefs': true }))
}
main()
```
#### Resolving references
When the input contains external references (`!include`, `uses:`, `$ref`, etc.) and the referred files are not in the same directory as the script it is being ran from, you may provide a third argument to both `dt2js` and `js2dt`. The argument must be an object with a `basePath` key. All references will then be resolved relative to that base path.
Example of using `basePath` argument in dt2js:
```js
// Script below ran from /home/john/where/ever/
// Reference is located at /home/john/schemas/simple_person.json
const raml2json = require('ramldt2jsonschema')
const ramlStr = `
#%RAML 1.0 Library
types:
Person: !include simple_person.json
`
const basePath = '/home/john/schemas/' // or '../../schemas/'
const schema = raml2json.dt2js(ramlStr, 'Person', { basePath: basePath })
console.log(JSON.stringify(schema, null, 2))
```
### Limitations
- in js2dt
- the following JSON Schema properties are not supported and as a result, may not be converted as expected:
> dependencies, exclusiveMaximum, exclusiveMinimum, items (array value), allOf, oneOf, not, format (email, hostname, ipv4, ipv6, uri), readOnly
- the following JSON Schema properties won't be converted at all:
> $schema, additionalItems, contains, id, $id, propertyNames, definitions, links, fragmentResolution, media, pathStart, targetSchema
- array `items` property is not properly converted to RAML when it's value is an array of schemas (see #111)
## License
Apache 2.0
[npm-image]: https://img.shields.io/npm/v/ramldt2jsonschema.svg?style=flat
[npm-url]: https://npmjs.org/package/ramldt2jsonschema
[downloads-image]: https://img.shields.io/npm/dm/ramldt2jsonschema.svg?style=flat
[downloads-url]: https://npmjs.org/package/ramldt2jsonschema
[travis-image]: https://img.shields.io/travis/raml-org/ramldt2jsonschema.svg?style=flat
[travis-url]: https://travis-ci.org/raml-org/ramldt2jsonschema
[coveralls-image]: https://img.shields.io/coveralls/raml-org/ramldt2jsonschema.svg?style=flat
[coveralls-url]: https://coveralls.io/r/raml-org/ramldt2jsonschema?branch=master