structured-elements
Version:
A TypeScript package for modelling and validating data
57 lines • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isReferenceContainer = void 0;
const constants_1 = require("../constants");
const array_1 = require("./array");
const expectation_1 = require("./expectation");
const record_1 = require("./record");
const string_1 = require("./string");
const structureOption_1 = require("./structureOption");
const isReferenceContainer = (api, subject) => {
if (!(0, record_1.isRecord)(subject)) {
return false;
}
const reference = subject[constants_1.referenceToken];
if (!reference) {
return false;
}
if (!(0, structureOption_1.isStructureOption)(reference.structure)) {
if (api.debugEnabled()) {
api.privateFunctions.debug(`StructuredElements#isReferenceContainer found invalid structure:`, {
subject,
structure: reference.structure,
});
}
return false;
}
if ((0, string_1.isString)(reference.target)) {
return true;
}
if ((0, array_1.isArray)(reference.target)) {
const failures = reference.target.map((target, index) => {
if (!(0, expectation_1.isExpectation)(api, target)) {
return { index, target };
}
});
if (failures.length === 0) {
return true;
}
if (api.debugEnabled()) {
api.privateFunctions.debug(`StructuredElements#isReferenceContainer found invalid target array:`, {
subject,
failures,
});
}
}
if (typeof reference.target === `function`) {
return true;
}
if (api.debugEnabled()) {
api.privateFunctions.debug(`StructuredElements#isReferenceContainer found invalid target:`, {
subject,
});
}
return false;
};
exports.isReferenceContainer = isReferenceContainer;
//# sourceMappingURL=referenceContainer.js.map