benjaminvr

StringBasedPropertyAccessor with array handling and value operators (1 implemented)

Mar 26th, 2022
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const lodash = require("lodash");
  2.  
  3. const resolveAsError = (object, propPath, valueOperation, isError) => {
  4.     if(isError){
  5.         console.error("Could not determine value using path and valueOperation.", object, propPath, valueOperation);
  6.         return undefined; // = falsy
  7.     } else {
  8.         console.log("Warning: null was encountered & empty string returned by StringBasedPropertyAccessor.", object, propPath, valueOperation);
  9.         return "   "; // = truthy
  10.     }
  11. }
  12.  
  13. export const ProvideValue = (object, propPath) => {
  14.     if (!propPath){
  15.         resolveAsError(object, propPath, propPath, true);
  16.     }
  17.  
  18.     let partiallyDeconstructedAccessor = propPath.split(":::");
  19.     let valueOperation = null;
  20.  
  21.     if(partiallyDeconstructedAccessor?.length > 1){
  22.         [propPath, valueOperation] = partiallyDeconstructedAccessor;
  23.     }
  24.  
  25.     let keys = propPath.split('.');
  26.     let arrayEncountered = false;
  27.     let exportObject = "";
  28.  
  29.     for (const key of keys) {
  30.         if(arrayEncountered){
  31.             return exportObject;
  32.         }
  33.  
  34.         let newlyDetectedValue = lodash.cloneDeep(object[key]);
  35.  
  36.         let withOutcome =   newlyDetectedValue === undefined ?
  37.                             resolveAsError(object, propPath, valueOperation, true)
  38.                             : newlyDetectedValue === null ?
  39.                             resolveAsError(object, propPath, valueOperation, false)
  40.                             : true;
  41.        
  42.         if(!withOutcome) { return withOutcome; }
  43.  
  44.         if(Array.isArray(newlyDetectedValue)){
  45.             arrayEncountered = true;
  46.  
  47.             let results = [];
  48.             const relevantSelector = keys[keys.length - 1];
  49.             for(const idx in newlyDetectedValue){
  50.                 let valueObject = newlyDetectedValue[idx];
  51.                 let _ = valueObject[relevantSelector] ?? false ? results.push(valueObject[relevantSelector]) : console.log("Skipping a value in detected array due to it being falsy.");
  52.             }
  53.  
  54.             if(valueOperation === "concat"){
  55.                 exportObject = results.join(", ");
  56.             } else {
  57.                 // Not implemented
  58.                 resolveAsError(object, propPath, valueOperation, true);
  59.             }
  60.         } else {
  61.             object = newlyDetectedValue;
  62.         }
  63.     }
  64.  
  65.     return object;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment