@tunnel-cast/tunnel-cast
Version:
<br>
35 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.castEngine = exports.cast = void 0;
const constants_1 = require("../../constants");
const execute_cast_procedures_1 = require("./execute-cast-procedures");
function cast(model, target, options = {}) {
const modelPrototype = model.prototype;
const projectedContext = {};
const decoratedModelFieldsSet = Reflect.getMetadata(constants_1.CAST_DECORATED_FIELDS_LIST, modelPrototype);
const orderedDecoratedFields = Array.from((decoratedModelFieldsSet === null || decoratedModelFieldsSet === void 0 ? void 0 : decoratedModelFieldsSet.entries()) || [])
.sort(([, v1], [, v2]) => v1 - v2)
.map(([v]) => v);
const castProceduresListEntries = orderedDecoratedFields.map((field) => {
const faList = Reflect.getMetadata(constants_1.CAST_FIELD_METADATA, modelPrototype, field);
return [field, faList];
});
const allCastResult = castEngine(castProceduresListEntries, target, projectedContext, options);
const messages = allCastResult.flat().map(({ message }) => message);
const resolvedValue = messages.length ? undefined : Object.assign(new model(), projectedContext);
return { resolvedValue, messages };
}
exports.cast = cast;
function castEngine(castProceduresListEntries, target, projectedContext, options) {
const messagesLists = castProceduresListEntries.map(([field, proceduresList]) => {
const proceduresListGroups = proceduresList.reduce((gr, procedure) => {
gr[procedure.fieldProcedureType] = [...(gr[procedure.fieldProcedureType] || []), procedure];
return gr;
}, {});
const proceduresExecutionResult = execute_cast_procedures_1.executeCastProcedures(field, proceduresListGroups, target, projectedContext, options);
return proceduresExecutionResult;
});
return messagesLists;
}
exports.castEngine = castEngine;
//# sourceMappingURL=cast.js.map