Package Exports
- ramldt2jsonschema
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ramldt2jsonschema) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ramldt2jsonschema
CLI & Library to convert a RAML 1.0 DataType to a JSON Schema Draft 4, and back. Uses webapi-parser under the hood.
Usage
Global (CLI)
npm install -g ramldt2jsonschemaThis will install two command-line tools:
dt2js: RAML data type <> JSON schemajs2dt: 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--draftOptional JSON Shema draft version to convert to. Supported values are:04,06and07(default)--validateValidate 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--validateValidate output RAML with webapi-parser. Throws an error if it is invalid. (default: false)
Locally (JavaScript)
npm install ramldt2jsonschema --savedt2js
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
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:
// 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
itemsproperty is not properly converted to RAML when it's value is an array of schemas (see #111)
- the following JSON Schema properties are not supported and as a result, may not be converted as expected:
License
Apache 2.0