interpolate.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.interpolate = exports.objectInterpolate = exports.arrayInterpolate = exports.numberInterpolate = void 0;
  4. var tslib_1 = require("tslib");
  5. var numberInterpolate = function (from, to) {
  6. return function (t) {
  7. return from * (1 - t) + to * t;
  8. };
  9. };
  10. exports.numberInterpolate = numberInterpolate;
  11. function arrayInterpolate(from, to) {
  12. var nb = to ? to.length : 0;
  13. var na = from ? Math.min(nb, from.length) : 0;
  14. return function (t) {
  15. var x = new Array(na);
  16. var c = new Array(nb);
  17. var i = 0;
  18. for (i = 0; i < na; ++i)
  19. x[i] = interpolate(from[i], to[i]);
  20. for (; i < nb; ++i)
  21. c[i] = to[i];
  22. for (i = 0; i < na; ++i)
  23. c[i] = x[i](t);
  24. return c;
  25. };
  26. }
  27. exports.arrayInterpolate = arrayInterpolate;
  28. function objectInterpolate(from, to) {
  29. if (from === void 0) { from = {}; }
  30. if (to === void 0) { to = {}; }
  31. var i = {};
  32. var c = {};
  33. Object.entries(to).forEach(function (_a) {
  34. var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
  35. if (k in from)
  36. i[k] = interpolate(from[k], v);
  37. else
  38. c[k] = v;
  39. });
  40. return function (t) {
  41. Object.entries(i).forEach(function (_a) {
  42. var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
  43. return (c[k] = v(t));
  44. });
  45. return c;
  46. };
  47. }
  48. exports.objectInterpolate = objectInterpolate;
  49. function interpolate(from, to) {
  50. if (typeof from === 'number' && typeof to === 'number') {
  51. // @ts-ignore
  52. return (0, exports.numberInterpolate)(from, to);
  53. }
  54. if (Array.isArray(from) && Array.isArray(to)) {
  55. // @ts-ignore
  56. return arrayInterpolate(from, to);
  57. }
  58. if (typeof from === 'object' && typeof to === 'object') {
  59. // @ts-ignore
  60. return objectInterpolate(from, to);
  61. }
  62. return (function (t) { return from; });
  63. }
  64. exports.interpolate = interpolate;
  65. //# sourceMappingURL=interpolate.js.map