From b8d5490675a8fa9f71ad0bd151227a162f00f1ad Mon Sep 17 00:00:00 2001 From: Scott Christley Date: Mon, 12 Feb 2024 21:21:04 -0600 Subject: [PATCH] merge allOfs as dereference does not --- lang/js/airr.js | 13 +++++++++++++ lang/js/package.json | 1 + 2 files changed, 14 insertions(+) diff --git a/lang/js/airr.js b/lang/js/airr.js index e34fdeae0..09857b531 100644 --- a/lang/js/airr.js +++ b/lang/js/airr.js @@ -17,6 +17,7 @@ var yaml = require('js-yaml'); var path = require('path'); var fs = require('fs'); const $RefParser = require("@apidevtools/json-schema-ref-parser"); +const merge = require('allof-merge'); var airr = {}; module.exports = airr; @@ -30,6 +31,12 @@ airr.load_schema = async function() { // dereference all $ref objects var spec = await $RefParser.dereference(doc); + // merge allOfs + for (let obj in spec) { + if (spec[obj]['type'] || spec[obj]['allOf']) { + spec[obj] = merge.merge(spec[obj]); + } + } var schema = require('./schema')(airr, spec); var io = require('./io')(airr); @@ -45,6 +52,12 @@ airr.load_custom_schema = async function(obj, filename) { // dereference all $ref objects var spec = await $RefParser.dereference(doc); + // merge allOfs + for (let obj in spec) { + if (spec[obj]['type'] || spec[obj]['allOf']) { + spec[obj] = merge.merge(spec[obj]); + } + } var schema = require('./schema')(obj, spec); return Promise.resolve(spec); diff --git a/lang/js/package.json b/lang/js/package.json index 29b889986..e80c567d4 100644 --- a/lang/js/package.json +++ b/lang/js/package.json @@ -25,6 +25,7 @@ "@apidevtools/json-schema-ref-parser": "^10.1.0", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", + "allof-merge": "^0.6.5", "csv-parser": "^2.3.2", "js-yaml": "^3.10.0" },