mixin.js 396 B

1234567891011121314151617181920212223
  1. const { flatten } = require('./objectUtils');
  2. function mixin() {
  3. const args = flatten(arguments);
  4. const mixins = args.slice(1);
  5. return mixins.reduce((Class, mixinFunc) => {
  6. return mixinFunc(Class);
  7. }, args[0]);
  8. }
  9. function compose() {
  10. const mixins = flatten(arguments);
  11. return function(Class) {
  12. return mixin(Class, mixins);
  13. };
  14. }
  15. module.exports = {
  16. compose,
  17. mixin
  18. };