UNPKG

@tunnel-cast/tunnel-cast

Version:

<br>

35 lines 1.97 kB
"use strict"; 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