helper.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  4. return new (P || (P = Promise))(function (resolve, reject) {
  5. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  6. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  7. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  8. step((generator = generator.apply(thisArg, _arguments || [])).next());
  9. });
  10. };
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. exports.isUnset = exports.isStrictObject = exports.maybePercentage = exports.omitPrefixObject = exports.filterPrefixObject = exports.prefixObject = exports.maybeSubObject = exports.subObject = exports.appendTransform = exports.useMemo = exports.random = exports.defined = exports.copyAttributes = exports.error = exports.capitalizeFirst = exports.composeAsync = exports.compose = exports.identity = void 0;
  13. const util_1 = require("@antv/util");
  14. function identity(x) {
  15. return x;
  16. }
  17. exports.identity = identity;
  18. /**
  19. * Composes functions from left to right.
  20. */
  21. function compose(fns) {
  22. return fns.reduce((composed, fn) => (x, ...args) => fn(composed(x, ...args), ...args), identity);
  23. }
  24. exports.compose = compose;
  25. /**
  26. * Composes single-argument async functions from left to right.
  27. */
  28. function composeAsync(fns) {
  29. return fns.reduce((composed, fn) => (x) => __awaiter(this, void 0, void 0, function* () {
  30. const value = yield composed(x);
  31. return fn(value);
  32. }), identity);
  33. }
  34. exports.composeAsync = composeAsync;
  35. function capitalizeFirst(str) {
  36. return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
  37. }
  38. exports.capitalizeFirst = capitalizeFirst;
  39. function error(message = '') {
  40. throw new Error(message);
  41. }
  42. exports.error = error;
  43. function copyAttributes(target, source) {
  44. const { attributes } = source;
  45. const exclude = new Set(['id', 'className']);
  46. for (const [key, value] of Object.entries(attributes)) {
  47. if (!exclude.has(key))
  48. target.attr(key, value);
  49. }
  50. }
  51. exports.copyAttributes = copyAttributes;
  52. function defined(x) {
  53. return x !== undefined && x !== null && !Number.isNaN(x);
  54. }
  55. exports.defined = defined;
  56. function random(a, b) {
  57. return a + (b - a) * Math.random();
  58. }
  59. exports.random = random;
  60. function useMemo(compute) {
  61. const map = new Map();
  62. return (key) => {
  63. if (map.has(key))
  64. return map.get(key);
  65. const value = compute(key);
  66. map.set(key, value);
  67. return value;
  68. };
  69. }
  70. exports.useMemo = useMemo;
  71. function appendTransform(node, transform) {
  72. const { transform: preTransform } = node.style;
  73. const unset = (d) => d === 'none' || d === undefined;
  74. const prefix = unset(preTransform) ? '' : preTransform;
  75. node.style.transform = `${prefix} ${transform}`.trimStart();
  76. }
  77. exports.appendTransform = appendTransform;
  78. function subObject(obj, prefix) {
  79. return maybeSubObject(obj, prefix) || {};
  80. }
  81. exports.subObject = subObject;
  82. function maybeSubObject(obj, prefix) {
  83. const entries = Object.entries(obj || {})
  84. .filter(([key]) => key.startsWith(prefix))
  85. .map(([key, value]) => [(0, util_1.lowerFirst)(key.replace(prefix, '').trim()), value])
  86. .filter(([key]) => !!key);
  87. return entries.length === 0 ? null : Object.fromEntries(entries);
  88. }
  89. exports.maybeSubObject = maybeSubObject;
  90. function prefixObject(obj, prefix) {
  91. return Object.fromEntries(Object.entries(obj).map(([key, value]) => {
  92. return [`${prefix}${(0, util_1.upperFirst)(key)}`, value];
  93. }));
  94. }
  95. exports.prefixObject = prefixObject;
  96. function filterPrefixObject(obj, prefix) {
  97. return Object.fromEntries(Object.entries(obj).filter(([key]) => prefix.find((p) => key.startsWith(p))));
  98. }
  99. exports.filterPrefixObject = filterPrefixObject;
  100. function omitPrefixObject(obj, ...prefixes) {
  101. return Object.fromEntries(Object.entries(obj).filter(([key]) => prefixes.every((prefix) => !key.startsWith(prefix))));
  102. }
  103. exports.omitPrefixObject = omitPrefixObject;
  104. function maybePercentage(x, size) {
  105. if (x === undefined)
  106. return null;
  107. if (typeof x === 'number')
  108. return x;
  109. const px = +x.replace('%', '');
  110. return Number.isNaN(px) ? null : (px / 100) * size;
  111. }
  112. exports.maybePercentage = maybePercentage;
  113. function isStrictObject(d) {
  114. return (typeof d === 'object' &&
  115. !(d instanceof Date) &&
  116. d !== null &&
  117. !Array.isArray(d));
  118. }
  119. exports.isStrictObject = isStrictObject;
  120. function isUnset(value) {
  121. return value === null || value === false;
  122. }
  123. exports.isUnset = isUnset;
  124. //# sourceMappingURL=helper.js.map