text: // Copyright (c) 2021, João Paulo Carreiro
  //
  // Permission to use, copy, modify, and/or distribute this software 
  // for any purpose with or without fee is hereby granted, provided 
  // that the above copyright notice and this permission notice appear 
  // in all copies.
  // 
  // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 
  // WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 
  // WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL 
  // THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR 
  // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
  // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 
  // NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 
  // WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  
  'use strict';
  const prelude = require('../prelude');
  
  const mappv = (value, property, fn) => {
      let out = value
      if (value) {
          if (prelude.is.array(value)) {
              out = value.map(v => mappv(v, property, fn))
          }
          else if (prelude.is.object(value)) {
              out = Object.keys(value).reduce((ac, key) => ({ ...ac, [key]: key == property ? fn(value[key]) : mappv(value[key], property, fn) }), {})
          }
      }
      return out
  }
  
  module.exports.has = prelude.has
  module.exports.get = prelude.get
  module.exports.add = prelude.add
  module.exports.addp = prelude.addp
  module.exports.clone = prelude.clone
  module.exports.mappv = mappv
  module.exports.validate = prelude.validate
  module.exports.stringify = prelude.stringify
  