UNPKG

3.68 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/db/sanitize-node.js"],"names":["_","require","sanitizeNode","data","isNode","path","Set","isPlainObject","isArray","has","add","returnData","anyFieldChanged","each","o","key","omitUndefined","isTypeSupported","undefined","pickBy","p","filter","type","isSupported","Date","module","exports"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAE,QAAF,CAAjB;AAEA;;;;;;;;AAMA,MAAMC,YAAY,GAAG,CAACC,IAAD,EAAOC,MAAM,GAAG,IAAhB,EAAsBC,IAAI,GAAG,IAAIC,GAAJ,EAA7B,KAA2C;AAC9D,QAAMC,aAAa,GAAGP,CAAC,CAACO,aAAF,CAAgBJ,IAAhB,CAAtB;;AAEA,MAAII,aAAa,IAAIP,CAAC,CAACQ,OAAF,CAAUL,IAAV,CAArB,EAAsC;AACpC,QAAIE,IAAI,CAACI,GAAL,CAASN,IAAT,CAAJ,EAAoB,OAAOA,IAAP;AACpBE,IAAAA,IAAI,CAACK,GAAL,CAASP,IAAT;AAEA,UAAMQ,UAAU,GAAGJ,aAAa,GAAG,EAAH,GAAQ,EAAxC;AACA,QAAIK,eAAe,GAAG,KAAtB;;AACAZ,IAAAA,CAAC,CAACa,IAAF,CAAOV,IAAP,EAAa,CAACW,CAAD,EAAIC,GAAJ,KAAY;AACvB,UAAIX,MAAM,IAAIW,GAAG,KAAM,UAAvB,EAAkC;AAChCJ,QAAAA,UAAU,CAACI,GAAD,CAAV,GAAkBD,CAAlB;AACA;AACD;;AACDH,MAAAA,UAAU,CAACI,GAAD,CAAV,GAAkBb,YAAY,CAACY,CAAD,EAAI,KAAJ,EAAWT,IAAX,CAA9B;;AAEA,UAAIM,UAAU,CAACI,GAAD,CAAV,KAAoBD,CAAxB,EAA2B;AACzBF,QAAAA,eAAe,GAAG,IAAlB;AACD;AACF,KAVD;;AAYA,QAAIA,eAAJ,EAAqB;AACnBT,MAAAA,IAAI,GAAGa,aAAa,CAACL,UAAD,CAApB;AACD,KApBmC,CAsBpC;;;AACA,WAAOR,IAAP;AACD;;AAED,MAAI,CAACc,eAAe,CAACd,IAAD,CAApB,EAA4B;AAC1B,WAAOe,SAAP;AACD,GAFD,MAEO;AACL,WAAOf,IAAP;AACD;AACF,CAlCD;AAoCA;;;;;;AAIA,MAAMa,aAAa,GAAGb,IAAI,IAAI;AAC5B,QAAMI,aAAa,GAAGP,CAAC,CAACO,aAAF,CAAgBJ,IAAhB,CAAtB;;AACA,MAAII,aAAJ,EAAmB;AACjB,WAAOP,CAAC,CAACmB,MAAF,CAAShB,IAAT,EAAeiB,CAAC,IAAIA,CAAC,KAAKF,SAA1B,CAAP;AACD;;AAED,SAAOf,IAAI,CAACkB,MAAL,CAAYD,CAAC,IAAIA,CAAC,KAAKF,SAAvB,CAAP;AACD,CAPD;AASA;;;;;;AAIA,MAAMD,eAAe,GAAGd,IAAI,IAAI;AAC9B,MAAIA,IAAI,KAAK,IAAb,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,QAAMmB,IAAI,GAAG,OAAOnB,IAApB;AACA,QAAMoB,WAAW,GACfD,IAAI,KAAM,QAAV,IACAA,IAAI,KAAM,QADV,IAEAA,IAAI,KAAM,SAFV,IAGAnB,IAAI,YAAYqB,IAJlB;AAMA,SAAOD,WAAP;AACD,CAbD;;AAeAE,MAAM,CAACC,OAAP,GAAiBxB,YAAjB","sourcesContent":["const _ = require(`lodash`)\n\n/**\n * Make data serializable\n * @param {(Object|Array)} data to sanitize\n * @param {boolean} isNode = true\n * @param {Set<string>} path = new Set\n */\nconst sanitizeNode = (data, isNode = true, path = new Set()) => {\n const isPlainObject = _.isPlainObject(data)\n\n if (isPlainObject || _.isArray(data)) {\n if (path.has(data)) return data\n path.add(data)\n\n const returnData = isPlainObject ? {} : []\n let anyFieldChanged = false\n _.each(data, (o, key) => {\n if (isNode && key === `internal`) {\n returnData[key] = o\n return\n }\n returnData[key] = sanitizeNode(o, false, path)\n\n if (returnData[key] !== o) {\n anyFieldChanged = true\n }\n })\n\n if (anyFieldChanged) {\n data = omitUndefined(returnData)\n }\n\n // arrays and plain objects are supported - no need to to sanitize\n return data\n }\n\n if (!isTypeSupported(data)) {\n return undefined\n } else {\n return data\n }\n}\n\n/**\n * @param {Object|Array} data\n * @returns {Object|Array} data without undefined values\n */\nconst omitUndefined = data => {\n const isPlainObject = _.isPlainObject(data)\n if (isPlainObject) {\n return _.pickBy(data, p => p !== undefined)\n }\n\n return data.filter(p => p !== undefined)\n}\n\n/**\n * @param {*} data\n * @return {boolean}\n */\nconst isTypeSupported = data => {\n if (data === null) {\n return true\n }\n\n const type = typeof data\n const isSupported =\n type === `number` ||\n type === `string` ||\n type === `boolean` ||\n data instanceof Date\n\n return isSupported\n}\n\nmodule.exports = sanitizeNode\n"],"file":"sanitize-node.js"}
\No newline at end of file