schyma
Version:
JSON Schemas Visualizer React component
120 lines • 4.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.arrayToProps = exports.getCompositionType = void 0;
exports.resolveRef = resolveRef;
exports.nameFromRef = nameFromRef;
exports.propMerge = propMerge;
exports.removeElementsByParent = removeElementsByParent;
exports.removeEdgesByParent = removeEdgesByParent;
exports.retrieveObj = retrieveObj;
const tslib_1 = require("tslib");
const reference_resolver_1 = tslib_1.__importDefault(require("@json-schema-tools/reference-resolver"));
const conditions_1 = require("../helpers/conditions");
const compositions_1 = require("./compositions");
// Re-export for backwards compatibility
var compositions_2 = require("./compositions");
Object.defineProperty(exports, "getCompositionType", { enumerable: true, get: function () { return compositions_2.getCompositionType; } });
Object.defineProperty(exports, "arrayToProps", { enumerable: true, get: function () { return compositions_2.arrayToProps; } });
const memoizedNameFromRef = {};
function resolveRef(ref, schema) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const resolver = yield reference_resolver_1.default.resolve(ref, schema);
return resolver;
});
}
function nameFromRef(ref) {
if (memoizedNameFromRef[ref]) {
return memoizedNameFromRef[ref];
}
const match = ref.match(/[^/]+$/);
const name = match ? match[0].split('.')[0] : '';
memoizedNameFromRef[ref] = name;
return name;
}
function propMerge(schema, label) {
let mergedProps = {};
const { properties, patternProperties, additionalProperties, items, oneOf, allOf, anyOf, not, if: ifSchema } = schema;
const compositions = oneOf || anyOf || not || allOf;
const conditions = ifSchema;
if (conditions) {
(0, conditions_1.handleConditions)(schema, mergedProps);
}
if (patternProperties) {
Object.assign(mergedProps, patternProperties);
}
if (properties) {
Object.assign(mergedProps, properties);
}
if (items) {
const itemsComposition = (0, compositions_1.getCompositionType)(items);
const itemsProps = propMerge(items, label);
Object.assign(mergedProps, itemsProps);
// Propagate composition type from items to parent
if (itemsComposition) {
mergedProps._nestedComposition = itemsComposition;
}
}
if (additionalProperties && typeof additionalProperties === 'object') {
const additionalComposition = (0, compositions_1.getCompositionType)(additionalProperties);
const additionalProps = propMerge(additionalProperties, label);
Object.assign(mergedProps, additionalProps);
// Propagate composition type from additionalProperties to parent
if (additionalComposition && !mergedProps._nestedComposition) {
mergedProps._nestedComposition = additionalComposition;
}
}
if (compositions) {
(0, compositions_1.handleCompositions)(schema, mergedProps, label);
}
return mergedProps;
}
function removeElementsByParent(nodes, id) {
const result = nodes.filter((node) => {
const relations = node.data.relations;
if (relations) {
if (relations.hasOwnProperty(id)) {
return;
}
else {
return node;
}
}
return node;
});
return result;
}
function removeEdgesByParent(edges, id) {
const result = edges.filter((edge) => {
if (edge.source === id) {
return false;
}
return true;
});
return result;
}
function retrieveObj(theObject, key) {
var result = null;
if (theObject instanceof Array) {
for (var i = 0; i < theObject.length; i++) {
result = retrieveObj(theObject[i], key);
if (result) {
break;
}
}
}
else {
for (var prop in theObject) {
if (prop == key) {
return theObject[prop];
}
if (theObject[prop] instanceof Object || theObject[prop] instanceof Array) {
result = retrieveObj(theObject[prop], key);
if (result) {
break;
}
}
}
}
return result;
}
//# sourceMappingURL=reusables.js.map