Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const lodash = require("lodash");
- const resolveAsError = (object, propPath, valueOperation, isError) => {
- if(isError){
- console.error("Could not determine value using path and valueOperation.", object, propPath, valueOperation);
- return undefined; // = falsy
- } else {
- console.log("Warning: null was encountered & empty string returned by StringBasedPropertyAccessor.", object, propPath, valueOperation);
- return " "; // = truthy
- }
- }
- export const ProvideValue = (object, propPath) => {
- if (!propPath){
- resolveAsError(object, propPath, propPath, true);
- }
- let partiallyDeconstructedAccessor = propPath.split(":::");
- let valueOperation = null;
- if(partiallyDeconstructedAccessor?.length > 1){
- [propPath, valueOperation] = partiallyDeconstructedAccessor;
- }
- let keys = propPath.split('.');
- let arrayEncountered = false;
- let exportObject = "";
- for (const key of keys) {
- if(arrayEncountered){
- return exportObject;
- }
- let newlyDetectedValue = lodash.cloneDeep(object[key]);
- let withOutcome = newlyDetectedValue === undefined ?
- resolveAsError(object, propPath, valueOperation, true)
- : newlyDetectedValue === null ?
- resolveAsError(object, propPath, valueOperation, false)
- : true;
- if(!withOutcome) { return withOutcome; }
- if(Array.isArray(newlyDetectedValue)){
- arrayEncountered = true;
- let results = [];
- const relevantSelector = keys[keys.length - 1];
- for(const idx in newlyDetectedValue){
- let valueObject = newlyDetectedValue[idx];
- let _ = valueObject[relevantSelector] ?? false ? results.push(valueObject[relevantSelector]) : console.log("Skipping a value in detected array due to it being falsy.");
- }
- if(valueOperation === "concat"){
- exportObject = results.join(", ");
- } else {
- // Not implemented
- resolveAsError(object, propPath, valueOperation, true);
- }
- } else {
- object = newlyDetectedValue;
- }
- }
- return object;
- }
Advertisement
Add Comment
Please, Sign In to add comment