0

初期設定

構成を保持するための JavaScript オブジェクトがあり、プラグインによって拡張される場合があります。各プラグインには、configs オブジェクトのバージョンと 1 つのプロパティがあります。

const CONFIGS = {
  plugins: {
    plugins: { version: '0.15' }, // Plugins is a plugin itself.
    proxies: { version: '0.15' }  // Used to configure proxies.
  },
  proxies: {
    HTTPS: ['satan.hell:666']
  }
}

質問

CONFIGS.pluginsの各キーがオブジェクトのルートに対応するプロパティを持っているCONFIGSこと、およびその逆であることを JSON スキーマで表現する方法。

私の失敗した試み

ajv は 4.8.2 で、「有効!」と表示されます。ただし、 「無効」である必要があります

'use strict';

var Ajv = require('ajv');
var ajv = Ajv({allErrors: true, v5: true});

var schema = {

  definitions: {
    pluginDescription: {
      type: "object",
      properties: {
        version: { type: "string" }
      },
      required: ["version"],
      additionalProperties: false
    }
  },

  type: "object",
  properties: {

    plugins: {
      type: "object",
      properties: {

        plugins: {
          $ref: "#/definitions/pluginDescription"
        }

      },
      required: ["plugins"],
      additionalProperties: {
        $ref: "#/definitions/pluginDescription"
      }
    }

  },
  required: { $data: "0/plugins/#" }, // current obj > plugins > all props?
  additionalProperties: false
};

var validate = ajv.compile(schema);

test({
  plugins: {
    plugins: { version: 'def' },
    proxies: { version: 'abc' }
  }
  // Sic! No `proxies` prop, but must be.
});

function test(data) {
  var valid = validate(data);
  if (valid) console.log('Valid!');
  else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}
4

1 に答える 1