_stepCat.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import _objectAssign from "./_objectAssign.js";
  2. import _identity from "./_identity.js";
  3. import _isArrayLike from "./_isArrayLike.js";
  4. import _isTransformer from "./_isTransformer.js";
  5. import objOf from "../objOf.js";
  6. var _stepCatArray = {
  7. '@@transducer/init': Array,
  8. '@@transducer/step': function (xs, x) {
  9. xs.push(x);
  10. return xs;
  11. },
  12. '@@transducer/result': _identity
  13. };
  14. var _stepCatString = {
  15. '@@transducer/init': String,
  16. '@@transducer/step': function (a, b) {
  17. return a + b;
  18. },
  19. '@@transducer/result': _identity
  20. };
  21. var _stepCatObject = {
  22. '@@transducer/init': Object,
  23. '@@transducer/step': function (result, input) {
  24. return _objectAssign(result, _isArrayLike(input) ? objOf(input[0], input[1]) : input);
  25. },
  26. '@@transducer/result': _identity
  27. };
  28. export default function _stepCat(obj) {
  29. if (_isTransformer(obj)) {
  30. return obj;
  31. }
  32. if (_isArrayLike(obj)) {
  33. return _stepCatArray;
  34. }
  35. if (typeof obj === 'string') {
  36. return _stepCatString;
  37. }
  38. if (typeof obj === 'object') {
  39. return _stepCatObject;
  40. }
  41. throw new Error('Cannot create transformer for ' + obj);
  42. }