index.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. var __defProp = Object.defineProperty;
  2. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  3. var __getOwnPropNames = Object.getOwnPropertyNames;
  4. var __hasOwnProp = Object.prototype.hasOwnProperty;
  5. var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
  6. var __export = (target, all) => {
  7. for (var name in all)
  8. __defProp(target, name, { get: all[name], enumerable: true });
  9. };
  10. var __reExport = (target, module2, copyDefault, desc) => {
  11. if (module2 && typeof module2 === "object" || typeof module2 === "function") {
  12. for (let key of __getOwnPropNames(module2))
  13. if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
  14. __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
  15. }
  16. return target;
  17. };
  18. var __toCommonJS = /* @__PURE__ */ ((cache) => {
  19. return (module2, temp) => {
  20. return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
  21. };
  22. })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
  23. // src/index.ts
  24. var src_exports = {};
  25. __export(src_exports, {
  26. assert: () => assert,
  27. at: () => at,
  28. batchInvoke: () => batchInvoke,
  29. clamp: () => clamp,
  30. clampArrayRange: () => clampArrayRange,
  31. clearUndefined: () => clearUndefined,
  32. createPromiseLock: () => createPromiseLock,
  33. createSingletonPromise: () => createSingletonPromise,
  34. debounce: () => debounce,
  35. deepMerge: () => deepMerge,
  36. ensurePrefix: () => ensurePrefix,
  37. flattenArrayable: () => flattenArrayable,
  38. hasOwnProperty: () => hasOwnProperty,
  39. invoke: () => invoke,
  40. isBoolean: () => isBoolean,
  41. isBrowser: () => isBrowser,
  42. isDef: () => isDef,
  43. isFunction: () => isFunction,
  44. isKeyOf: () => isKeyOf,
  45. isNumber: () => isNumber,
  46. isObject: () => isObject,
  47. isString: () => isString,
  48. isTruthy: () => isTruthy,
  49. isWindow: () => isWindow,
  50. last: () => last,
  51. mergeArrayable: () => mergeArrayable,
  52. move: () => move,
  53. noNull: () => noNull,
  54. noop: () => noop,
  55. notNullish: () => notNullish,
  56. notUndefined: () => notUndefined,
  57. objectEntries: () => objectEntries,
  58. objectKeys: () => objectKeys,
  59. objectMap: () => objectMap,
  60. objectPick: () => objectPick,
  61. partition: () => partition,
  62. range: () => range,
  63. remove: () => remove,
  64. slash: () => slash,
  65. sleep: () => sleep,
  66. sum: () => sum,
  67. tap: () => tap,
  68. template: () => template,
  69. throttle: () => throttle,
  70. timestamp: () => timestamp,
  71. toArray: () => toArray,
  72. toString: () => toString,
  73. uniq: () => uniq
  74. });
  75. // src/math.ts
  76. function clamp(n, min, max) {
  77. return Math.min(max, Math.max(min, n));
  78. }
  79. function sum(...args) {
  80. return flattenArrayable(args).reduce((a, b) => a + b, 0);
  81. }
  82. // src/array.ts
  83. function toArray(array) {
  84. array = array || [];
  85. if (Array.isArray(array))
  86. return array;
  87. return [array];
  88. }
  89. function flattenArrayable(array) {
  90. return toArray(array).flat(1);
  91. }
  92. function mergeArrayable(...args) {
  93. return args.flatMap((i) => toArray(i));
  94. }
  95. function partition(array, ...filters) {
  96. const result = new Array(filters.length + 1).fill(null).map(() => []);
  97. array.forEach((e, idx, arr) => {
  98. let i = 0;
  99. for (const filter of filters) {
  100. if (filter(e, idx, arr)) {
  101. result[i].push(e);
  102. return;
  103. }
  104. i += 1;
  105. }
  106. result[i].push(e);
  107. });
  108. return result;
  109. }
  110. function uniq(array) {
  111. return Array.from(new Set(array));
  112. }
  113. function last(array) {
  114. return at(array, -1);
  115. }
  116. function remove(array, value) {
  117. if (!array)
  118. return false;
  119. const index = array.indexOf(value);
  120. if (index >= 0) {
  121. array.splice(index, 1);
  122. return true;
  123. }
  124. return false;
  125. }
  126. function at(array, index) {
  127. const len = array.length;
  128. if (!len)
  129. return void 0;
  130. if (index < 0)
  131. index += len;
  132. return array[index];
  133. }
  134. function range(...args) {
  135. let start, stop, step;
  136. if (args.length === 1) {
  137. start = 0;
  138. step = 1;
  139. [stop] = args;
  140. } else {
  141. [start, stop, step = 1] = args;
  142. }
  143. const arr = [];
  144. let current = start;
  145. while (current < stop) {
  146. arr.push(current);
  147. current += step || 1;
  148. }
  149. return arr;
  150. }
  151. function move(arr, from, to) {
  152. arr.splice(to, 0, arr.splice(from, 1)[0]);
  153. return arr;
  154. }
  155. function clampArrayRange(n, arr) {
  156. return clamp(n, 0, arr.length - 1);
  157. }
  158. // src/base.ts
  159. var assert = (condition, message) => {
  160. if (!condition)
  161. throw new Error(message);
  162. };
  163. var toString = (v) => Object.prototype.toString.call(v);
  164. var noop = () => {
  165. };
  166. // src/guards.ts
  167. function notNullish(v) {
  168. return v != null;
  169. }
  170. function noNull(v) {
  171. return v !== null;
  172. }
  173. function notUndefined(v) {
  174. return v !== void 0;
  175. }
  176. function isTruthy(v) {
  177. return Boolean(v);
  178. }
  179. // src/is.ts
  180. var isDef = (val) => typeof val !== "undefined";
  181. var isBoolean = (val) => typeof val === "boolean";
  182. var isFunction = (val) => typeof val === "function";
  183. var isNumber = (val) => typeof val === "number";
  184. var isString = (val) => typeof val === "string";
  185. var isObject = (val) => toString(val) === "[object Object]";
  186. var isWindow = (val) => typeof window !== "undefined" && toString(val) === "[object Window]";
  187. var isBrowser = typeof window !== "undefined";
  188. // src/string.ts
  189. function slash(str) {
  190. return str.replace(/\\/g, "/");
  191. }
  192. function ensurePrefix(prefix, str) {
  193. if (!str.startsWith(prefix))
  194. return prefix + str;
  195. return str;
  196. }
  197. function template(str, ...args) {
  198. return str.replace(/{(\d+)}/g, (match, key) => {
  199. const index = Number(key);
  200. if (Number.isNaN(index))
  201. return match;
  202. return args[index];
  203. });
  204. }
  205. // src/time.ts
  206. var timestamp = () => +Date.now();
  207. // src/function.ts
  208. function batchInvoke(functions) {
  209. functions.forEach((fn) => fn && fn());
  210. }
  211. function invoke(fn) {
  212. return fn();
  213. }
  214. function tap(value, callback) {
  215. callback(value);
  216. return value;
  217. }
  218. // src/object.ts
  219. function objectMap(obj, fn) {
  220. return Object.fromEntries(Object.entries(obj).map(([k, v]) => fn(k, v)).filter(notNullish));
  221. }
  222. function isKeyOf(obj, k) {
  223. return k in obj;
  224. }
  225. function objectKeys(obj) {
  226. return Object.keys(obj);
  227. }
  228. function objectEntries(obj) {
  229. return Object.entries(obj);
  230. }
  231. function deepMerge(target, ...sources) {
  232. if (!sources.length)
  233. return target;
  234. const source = sources.shift();
  235. if (source === void 0)
  236. return target;
  237. if (isMergableObject(target) && isMergableObject(source)) {
  238. objectKeys(source).forEach((key) => {
  239. if (isMergableObject(source[key])) {
  240. if (!target[key])
  241. target[key] = {};
  242. deepMerge(target[key], source[key]);
  243. } else {
  244. target[key] = source[key];
  245. }
  246. });
  247. }
  248. return deepMerge(target, ...sources);
  249. }
  250. function isMergableObject(item) {
  251. return isObject(item) && !Array.isArray(item);
  252. }
  253. function objectPick(obj, keys, omitUndefined = false) {
  254. return keys.reduce((n, k) => {
  255. if (k in obj) {
  256. if (!omitUndefined || !obj[k] === void 0)
  257. n[k] = obj[k];
  258. }
  259. return n;
  260. }, {});
  261. }
  262. function clearUndefined(obj) {
  263. Object.keys(obj).forEach((key) => obj[key] === void 0 ? delete obj[key] : {});
  264. return obj;
  265. }
  266. function hasOwnProperty(obj, v) {
  267. if (obj == null)
  268. return false;
  269. return Object.prototype.hasOwnProperty.call(obj, v);
  270. }
  271. // src/promise.ts
  272. function createSingletonPromise(fn) {
  273. let _promise;
  274. function wrapper() {
  275. if (!_promise)
  276. _promise = fn();
  277. return _promise;
  278. }
  279. wrapper.reset = async () => {
  280. const _prev = _promise;
  281. _promise = void 0;
  282. if (_prev)
  283. await _prev;
  284. };
  285. return wrapper;
  286. }
  287. function sleep(ms, callback) {
  288. return new Promise((resolve) => setTimeout(async () => {
  289. await (callback == null ? void 0 : callback());
  290. resolve();
  291. }, ms));
  292. }
  293. function createPromiseLock() {
  294. const locks = [];
  295. return {
  296. async run(fn) {
  297. const p = fn();
  298. locks.push(p);
  299. try {
  300. return await p;
  301. } finally {
  302. remove(locks, p);
  303. }
  304. },
  305. async wait() {
  306. await Promise.allSettled(locks);
  307. },
  308. isWaiting() {
  309. return Boolean(locks.length);
  310. },
  311. clear() {
  312. locks.length = 0;
  313. }
  314. };
  315. }
  316. // node_modules/.pnpm/throttle-debounce@3.0.1/node_modules/throttle-debounce/esm/index.js
  317. function throttle(delay, noTrailing, callback, debounceMode) {
  318. var timeoutID;
  319. var cancelled = false;
  320. var lastExec = 0;
  321. function clearExistingTimeout() {
  322. if (timeoutID) {
  323. clearTimeout(timeoutID);
  324. }
  325. }
  326. function cancel() {
  327. clearExistingTimeout();
  328. cancelled = true;
  329. }
  330. if (typeof noTrailing !== "boolean") {
  331. debounceMode = callback;
  332. callback = noTrailing;
  333. noTrailing = void 0;
  334. }
  335. function wrapper() {
  336. for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {
  337. arguments_[_key] = arguments[_key];
  338. }
  339. var self = this;
  340. var elapsed = Date.now() - lastExec;
  341. if (cancelled) {
  342. return;
  343. }
  344. function exec() {
  345. lastExec = Date.now();
  346. callback.apply(self, arguments_);
  347. }
  348. function clear() {
  349. timeoutID = void 0;
  350. }
  351. if (debounceMode && !timeoutID) {
  352. exec();
  353. }
  354. clearExistingTimeout();
  355. if (debounceMode === void 0 && elapsed > delay) {
  356. exec();
  357. } else if (noTrailing !== true) {
  358. timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === void 0 ? delay - elapsed : delay);
  359. }
  360. }
  361. wrapper.cancel = cancel;
  362. return wrapper;
  363. }
  364. function debounce(delay, atBegin, callback) {
  365. return callback === void 0 ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);
  366. }
  367. module.exports = __toCommonJS(src_exports);
  368. // Annotate the CommonJS export names for ESM import in node:
  369. 0 && (module.exports = {
  370. assert,
  371. at,
  372. batchInvoke,
  373. clamp,
  374. clampArrayRange,
  375. clearUndefined,
  376. createPromiseLock,
  377. createSingletonPromise,
  378. debounce,
  379. deepMerge,
  380. ensurePrefix,
  381. flattenArrayable,
  382. hasOwnProperty,
  383. invoke,
  384. isBoolean,
  385. isBrowser,
  386. isDef,
  387. isFunction,
  388. isKeyOf,
  389. isNumber,
  390. isObject,
  391. isString,
  392. isTruthy,
  393. isWindow,
  394. last,
  395. mergeArrayable,
  396. move,
  397. noNull,
  398. noop,
  399. notNullish,
  400. notUndefined,
  401. objectEntries,
  402. objectKeys,
  403. objectMap,
  404. objectPick,
  405. partition,
  406. range,
  407. remove,
  408. slash,
  409. sleep,
  410. sum,
  411. tap,
  412. template,
  413. throttle,
  414. timestamp,
  415. toArray,
  416. toString,
  417. uniq
  418. });