From ddaeb41f96a837909548a4c80dd4413646da1bfb Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Tue, 26 Mar 2019 06:00:10 -0400 Subject: [PATCH] Include related virtualAttributes in toJSON --- lib/model/modelToJson.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/model/modelToJson.js b/lib/model/modelToJson.js index adf71b945..c5d9a9b18 100644 --- a/lib/model/modelToJson.js +++ b/lib/model/modelToJson.js @@ -8,7 +8,7 @@ function toJson(model, optIn) { const modelClass = model.constructor; const opt = { - virtuals: getVirtuals(optIn, modelClass), + virtuals: getVirtuals(optIn), shallow: isShallow(optIn), omit: getOmit(optIn, modelClass), pick: null, @@ -40,13 +40,13 @@ function toDatabaseJson(model, builder) { return mergeQueryProps(model, json, opt.omitFromJson, builder); } -function getVirtuals(opt, modelClass) { +function getVirtuals(opt) { if (!opt) { - return modelClass.getVirtualAttributes(); + return true; } else if (Array.isArray(opt.virtuals)) { return opt.virtuals; } else if (opt.virtuals) { - return modelClass.getVirtualAttributes(); + return true; } else { return null; } @@ -68,6 +68,7 @@ function getPick(modelClass) { function toExternalJsonImpl(model, opt) { const json = {}; const keys = Object.keys(model); + const vAttr = model.constructor.getVirtualAttributes(); for (let i = 0, l = keys.length; i < l; ++i) { const key = keys[i]; @@ -76,8 +77,10 @@ function toExternalJsonImpl(model, opt) { assignJsonValue(json, key, value, opt); } - if (opt.virtuals !== null) { + if (Array.isArray(opt.virtuals)) { assignVirtualAttributes(json, model, opt.virtuals, opt); + } else if (vAttr && opt.virtuals === true) { + assignVirtualAttributes(json, model, vAttr, opt); } return json;