版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

90 строки
2.8 KiB

  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  14. Object.defineProperty(o, "default", { enumerable: true, value: v });
  15. }) : function(o, v) {
  16. o["default"] = v;
  17. });
  18. var __importStar = (this && this.__importStar) || function (mod) {
  19. if (mod && mod.__esModule) return mod;
  20. var result = {};
  21. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  22. __setModuleDefault(result, mod);
  23. return result;
  24. };
  25. Object.defineProperty(exports, "__esModule", { value: true });
  26. exports.evolve = exports.getAssignSemigroup = void 0;
  27. /**
  28. * @since 2.10.0
  29. */
  30. var _ = __importStar(require("./internal"));
  31. // -------------------------------------------------------------------------------------
  32. // instances
  33. // -------------------------------------------------------------------------------------
  34. /**
  35. * Return a semigroup which works like `Object.assign`.
  36. *
  37. * @example
  38. * import { getAssignSemigroup } from 'fp-ts/struct'
  39. *
  40. * interface Person {
  41. * readonly name: string
  42. * readonly age: number
  43. * }
  44. *
  45. * const S = getAssignSemigroup<Person>()
  46. * assert.deepStrictEqual(S.concat({ name: 'name', age: 23 }, { name: 'name', age: 24 }), { name: 'name', age: 24 })
  47. *
  48. * @category instances
  49. * @since 2.10.0
  50. */
  51. var getAssignSemigroup = function () { return ({
  52. concat: function (first, second) { return Object.assign({}, first, second); }
  53. }); };
  54. exports.getAssignSemigroup = getAssignSemigroup;
  55. // -------------------------------------------------------------------------------------
  56. // utils
  57. // -------------------------------------------------------------------------------------
  58. /**
  59. * Creates a new object by recursively evolving a shallow copy of `a`, according to the `transformation` functions.
  60. *
  61. * @example
  62. * import { pipe } from 'fp-ts/function'
  63. * import { evolve } from 'fp-ts/struct'
  64. *
  65. * assert.deepStrictEqual(
  66. * pipe(
  67. * { a: 'a', b: 1 },
  68. * evolve({
  69. * a: (a) => a.length,
  70. * b: (b) => b * 2
  71. * })
  72. * ),
  73. * { a: 1, b: 2 }
  74. * )
  75. *
  76. * @since 2.11.0
  77. */
  78. var evolve = function (transformations) {
  79. return function (a) {
  80. var out = {};
  81. for (var k in a) {
  82. if (_.has.call(a, k)) {
  83. out[k] = transformations[k](a[k]);
  84. }
  85. }
  86. return out;
  87. };
  88. };
  89. exports.evolve = evolve;