From 5a23034fd89e65b136365dd5af12475143d48c2a Mon Sep 17 00:00:00 2001 From: Dmitry Nagibin <19asdek91@gmail.com> Date: Thu, 22 Oct 2020 22:35:43 +0300 Subject: [PATCH] chore: added resolving of reference for json schema --- packages/ncform-common/src/ncform-utils.js | 37 +++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/ncform-common/src/ncform-utils.js b/packages/ncform-common/src/ncform-utils.js index fdcf732..3d65bda 100755 --- a/packages/ncform-common/src/ncform-utils.js +++ b/packages/ncform-common/src/ncform-utils.js @@ -169,7 +169,42 @@ const ncformUtils = { return newFieldVal; } - return completionField("$root", returnSchema); + function fixReference(root, obj = root) { + function getValue(p) { + let value = {}; + const path = p.split("/"); + if (path[0] === "#") { + value = root; + } + path.slice(1).forEach(key => { + value = value.hasOwnProperty(key) ? value[key] : {}; + }); + return value; + } + + for (let property in obj) { + if (obj.hasOwnProperty(property)) { + if (typeof obj[property] === "object") { + fixReference(root, obj[property]); + } + else { + if (property === "$ref" && typeof obj[property] === "string") { + Object.entries(getValue(obj[property])) + .forEach(([key, value]) => { + obj[key] = value; + }); + delete obj["$ref"]; + fixReference(root, obj); + break; + } + } + } + } + + return obj; + } + + return fixReference(completionField("$root", returnSchema)); }, /**