Have ideas to improve npm?Join in the discussion! »

json-schema-ref

0.0.4 • Public • Published

json-schema-ref

解析JSON-Schema中包含的 $ref 关键字,并最终合并成一个完整的模块。

  • 支持内部引用,如#/definitions/internal
  • 支持外部HTTP引用,如http://taobao.com/schema.json
  • 支持嵌套,如ref中的schema还包含ref的情况
  • 支持River规范,若$ref中指向的schema为river格式,则使用schema.response

安装

npm install json-schema-ref --save

使用

 
var Parser = require( 'json-schema-ref' );
 
var schema = {
    type: 'object',
    properties: {
        info: {
            $ref: 'http://taobao.com/schema.json'
        }
    }
};
 
Parser( schema, function( result ){
    console.log( result );
 
    // --> result.refs: { 'http://taobao.com/schema.json': { error: null, schema: .. 对应的schema内容, path: '#/properties/info/$ref' }
    // --> result.schema: 合并后的schema
});
 

options

Parser接收额外的参数:

Parser( schema, options, next );

参数如下:

  • refs: Object,给定预置的$ref对应的schema
  • refHandle: Function,接受每个遇到的$ref对应的值作为参数,必须返回一个字符串,将作为$ref计算时的值

使用refs参数的例子:

var options = {
    refs: {
        'http://taobao.com/schema.json': {
            type: 'string',
            description: 'internal schema'
        }
    }
};

var schema = {
    type: 'object',
    properties: {
        external: {
            $ref: 'http://taobao.com/schema.json'
        }
    }
};

Parser( schema, options, function( result ){
    console.log( result.schema );
    /* output:
      {
          type: 'object',
          properties: {
              external: {
                  type: 'string',
                  description: 'internal schema'
              }
          }
      }
     */
});

使用refHandle的例子:

var options = {
    refHandle: function( value ){
        if( value === 'external' ){
            return 'http://localhost:9999/json/external.json'
        }
        else {
            return value;
        }
    }
};

var schema = {
    type: 'object',
    properties: {
        external: {
            $ref: "external"
        }
    }
};

Parser( schema, options, function( result ){
    /* 计算结果中使用 `http://localhost:9999/json/external.json` 代替 `external` 来进行取值 */
});

测试

需要先开启本地服务:node test/server.js,然后执行npm test

Install

npm i json-schema-ref

DownloadsWeekly Downloads

1

Version

0.0.4

License

MIT

Last publish

Collaborators

  • avatar