UNPKG

lodash-traits

Version:
52 lines (38 loc) 1.21 kB
"use strict"; function _implSymbol(target, sym, value) { Object.defineProperty(target, sym, { value, configurable: true }); return target[sym]; } function _getSymbol(targetSymName, ...traitSets) { let symbol; traitSets.forEach(traitSet => { const sym = traitSet[targetSymName]; if (typeof sym === 'symbol') { if (!!symbol && symbol !== sym) { throw new Error(`Symbol ${targetSymName} offered by multiple trait sets.`); } symbol = sym; } }); if (!symbol) { throw new Error(`No trait set is providing symbol ${targetSymName}.`); } return symbol; } function _testTraitSet(traitSet) { if (!traitSet || typeof traitSet === 'boolean' || typeof traitSet === 'number' || typeof traitSet === 'string') { throw new Error(`${traitSet} cannot be used as a trait set.`); } } const { TraitSet } = require('@straits/utils'); const lodash = require('lodash'); _testTraitSet(TraitSet); const _defineAndImplMemberFreeFunctionsAsTraits = _getSymbol("defineAndImplMemberFreeFunctionsAsTraits", TraitSet); const traits = new TraitSet(); traits[_defineAndImplMemberFreeFunctionsAsTraits](Object.prototype, lodash); module.exports = traits;