@untemps/utils 3.2.1 → 4.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/async/debounce.cjs +1 -0
  2. package/dist/async/debounce.d.ts +25 -0
  3. package/dist/async/debounce.d.ts.map +1 -0
  4. package/dist/async/debounce.js +13 -0
  5. package/dist/async/throttle.cjs +1 -0
  6. package/dist/async/throttle.d.ts +23 -0
  7. package/dist/async/throttle.d.ts.map +1 -0
  8. package/dist/async/throttle.js +17 -0
  9. package/dist/dom/createElement.cjs +1 -1
  10. package/dist/dom/createElement.d.ts.map +1 -1
  11. package/dist/dom/createElement.js +14 -1
  12. package/dist/dom/modifyElement.cjs +1 -1
  13. package/dist/dom/modifyElement.js +1 -1
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.d.ts +5 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +25 -22
  18. package/dist/object/deepClone.cjs +1 -0
  19. package/dist/object/deepClone.d.ts +18 -0
  20. package/dist/object/deepClone.d.ts.map +1 -0
  21. package/dist/object/deepClone.js +4 -0
  22. package/dist/object/deepMerge.cjs +1 -1
  23. package/dist/object/deepMerge.d.ts +3 -2
  24. package/dist/object/deepMerge.d.ts.map +1 -1
  25. package/dist/object/deepMerge.js +8 -3
  26. package/dist/string/generateText.cjs +1 -1
  27. package/dist/string/generateText.d.ts.map +1 -1
  28. package/dist/string/generateText.js +1 -0
  29. package/dist/string/interpolate.cjs +1 -1
  30. package/dist/string/interpolate.d.ts.map +1 -1
  31. package/dist/string/interpolate.js +1 -4
  32. package/dist/string/interpolateLiteral.cjs +1 -1
  33. package/dist/string/interpolateLiteral.d.ts +2 -2
  34. package/dist/string/interpolateLiteral.d.ts.map +1 -1
  35. package/dist/string/interpolateLiteral.js +4 -1
  36. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t)=>{let n=null,r=((...r)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)});return r.cancel=()=>{n!==null&&(clearTimeout(n),n=null)},r};exports.debounce=e;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @module async/debounce
3
+ */
4
+ export interface DebouncedFunction<T extends (...args: never[]) => void> {
5
+ (...args: Parameters<T>): void;
6
+ cancel(): void;
7
+ }
8
+ /**
9
+ * @function
10
+ * @example
11
+ * import { debounce } from '@untemps/utils/async/debounce'
12
+ *
13
+ * const handler = debounce((value: string) => console.log(value), 300)
14
+ * handler('a')
15
+ * handler('b')
16
+ * handler('c') // Only 'c' is logged after 300ms
17
+ *
18
+ * handler.cancel() // Cancel any pending invocation
19
+ *
20
+ * @param fn - The function to debounce.
21
+ * @param delay - The debounce delay in milliseconds.
22
+ * @returns A debounced version of the function with a `.cancel()` method.
23
+ */
24
+ export declare const debounce: <T extends (...args: never[]) => void>(fn: T, delay: number) => DebouncedFunction<T>;
25
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/async/debounce.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI;IACtE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAC9B,MAAM,IAAI,IAAI,CAAA;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,MAAM,KAAG,iBAAiB,CAAC,CAAC,CAqBxG,CAAA"}
@@ -0,0 +1,13 @@
1
+ //#region src/async/debounce.ts
2
+ var e = (e, t) => {
3
+ let n = null, r = ((...r) => {
4
+ n !== null && clearTimeout(n), n = setTimeout(() => {
5
+ n = null, e(...r);
6
+ }, t);
7
+ });
8
+ return r.cancel = () => {
9
+ n !== null && (clearTimeout(n), n = null);
10
+ }, r;
11
+ };
12
+ //#endregion
13
+ export { e as debounce };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t)=>{let n=-1/0,r=null,i=null,a=((...a)=>{let o=Date.now(),s=t-(o-n);i=a,s<=0?(r!==null&&(clearTimeout(r),r=null),n=o,i=null,e(...a)):r===null&&(r=setTimeout(()=>{if(n=Date.now(),r=null,i!==null){let t=i;i=null,e(...t)}},s))});return a.cancel=()=>{r!==null&&(clearTimeout(r),r=null),i=null,n=-1/0},a};exports.throttle=e;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @module async/throttle
3
+ */
4
+ export interface ThrottledFunction<T extends (...args: never[]) => void> {
5
+ (...args: Parameters<T>): void;
6
+ cancel(): void;
7
+ }
8
+ /**
9
+ * @function
10
+ * @example
11
+ * import { throttle } from '@untemps/utils/async/throttle'
12
+ *
13
+ * const handler = throttle((event: MouseEvent) => console.log(event), 200)
14
+ * window.addEventListener('scroll', handler)
15
+ *
16
+ * handler.cancel() // Cancel any pending trailing invocation
17
+ *
18
+ * @param fn - The function to throttle.
19
+ * @param interval - The minimum interval between invocations in milliseconds.
20
+ * @returns A throttled version of the function with a `.cancel()` method.
21
+ */
22
+ export declare const throttle: <T extends (...args: never[]) => void>(fn: T, interval: number) => ThrottledFunction<T>;
23
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/async/throttle.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI;IACtE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAC9B,MAAM,IAAI,IAAI,CAAA;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,MAAM,KAAG,iBAAiB,CAAC,CAAC,CA0C3G,CAAA"}
@@ -0,0 +1,17 @@
1
+ //#region src/async/throttle.ts
2
+ var e = (e, t) => {
3
+ let n = -Infinity, r = null, i = null, a = ((...a) => {
4
+ let o = Date.now(), s = t - (o - n);
5
+ i = a, s <= 0 ? (r !== null && (clearTimeout(r), r = null), n = o, i = null, e(...a)) : r === null && (r = setTimeout(() => {
6
+ if (n = Date.now(), r = null, i !== null) {
7
+ let t = i;
8
+ i = null, e(...t);
9
+ }
10
+ }, s));
11
+ });
12
+ return a.cancel = () => {
13
+ r !== null && (clearTimeout(r), r = null), i = null, n = -Infinity;
14
+ }, a;
15
+ };
16
+ //#endregion
17
+ export { e as throttle };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=({tag:e=`div`,attributes:t={},content:n=null,textContent:r=null,parent:i=null,parentSelector:a=null,boundingClientRect:o=null}={})=>{let s=document.createElement(e);if(t)for(let[e,n]of Object.entries(t))s.setAttribute(e,n);n&&s.appendChild(n),r&&!s.hasChildNodes()&&s.appendChild(document.createTextNode(r));let c=i||document.querySelector(a);return c&&c.appendChild(s),o&&(s.getBoundingClientRect=()=>o),s};exports.createElement=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=({tag:e=`div`,attributes:t={},content:n=null,textContent:r=null,parent:i=null,parentSelector:a=null,boundingClientRect:o=null}={})=>{let s=document.createElement(e);if(t)for(let[e,n]of Object.entries(t))s.setAttribute(e,n);n&&s.appendChild(n),r&&!s.hasChildNodes()&&s.appendChild(document.createTextNode(r));let c=i||document.querySelector(a);if(c&&c.appendChild(s),o){let{x:e,y:t,top:n,right:r,bottom:i,left:a,width:c,height:l}=o,u=e??a??0,d=t??n??0,f=a??u,p=n??d,m=c??(r===void 0?0:r-f),h=l??(i===void 0?0:i-p),g={x:u,y:d,width:m,height:h,top:p,right:r??u+m,bottom:i??d+h,left:f},_=Object.defineProperty({...g},`toJSON`,{value:()=>({...g})});s.getBoundingClientRect=()=>_}return s};exports.createElement=e;
@@ -1 +1 @@
1
- {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../src/dom/createElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAC1C,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;CAClD;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GAAI,yFAQ3B,mBAAwB,KAAG,WAqB7B,CAAA"}
1
+ {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../src/dom/createElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAC1C,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;CAClD;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GAAI,yFAQ3B,mBAAwB,KAAG,WAuC7B,CAAA"}
@@ -4,7 +4,20 @@ var e = ({ tag: e = "div", attributes: t = {}, content: n = null, textContent: r
4
4
  if (t) for (let [e, n] of Object.entries(t)) s.setAttribute(e, n);
5
5
  n && s.appendChild(n), r && !s.hasChildNodes() && s.appendChild(document.createTextNode(r));
6
6
  let c = i || document.querySelector(a);
7
- return c && c.appendChild(s), o && (s.getBoundingClientRect = () => o), s;
7
+ if (c && c.appendChild(s), o) {
8
+ let { x: e, y: t, top: n, right: r, bottom: i, left: a, width: c, height: l } = o, u = e ?? a ?? 0, d = t ?? n ?? 0, f = a ?? u, p = n ?? d, m = c ?? (r === void 0 ? 0 : r - f), h = l ?? (i === void 0 ? 0 : i - p), g = {
9
+ x: u,
10
+ y: d,
11
+ width: m,
12
+ height: h,
13
+ top: p,
14
+ right: r ?? u + m,
15
+ bottom: i ?? d + h,
16
+ left: f
17
+ }, _ = Object.defineProperty({ ...g }, "toJSON", { value: () => ({ ...g }) });
18
+ s.getBoundingClientRect = () => _;
19
+ }
20
+ return s;
8
21
  };
9
22
  //#endregion
10
23
  export { e as createElement };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../string/isString.cjs`);var t=(t,n={})=>{let r=e.isString(t)?document.querySelector(t):t;for(let e in n)n[e]===void 0||n[e]===null?r?.removeAttribute(e):r?.setAttribute(e,n[e]);return r};exports.modifyElement=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../string/isString.cjs`);var t=(t,n={})=>{let r=e.isString(t)?document.querySelector(t):t;for(let[e,t]of Object.entries(n))t==null?r?.removeAttribute(e):r?.setAttribute(e,t);return r};exports.modifyElement=t;
@@ -2,7 +2,7 @@ import { isString as e } from "../string/isString.js";
2
2
  //#region src/dom/modifyElement.ts
3
3
  var t = (t, n = {}) => {
4
4
  let r = e(t) ? document.querySelector(t) : t;
5
- for (let e in n) n[e] === void 0 || n[e] === null ? r?.removeAttribute(e) : r?.setAttribute(e, n[e]);
5
+ for (let [e, t] of Object.entries(n)) t == null ? r?.removeAttribute(e) : r?.setAttribute(e, t);
6
6
  return r;
7
7
  };
8
8
  //#endregion
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./array/extractByIndices.cjs`),t=require(`./async/standby.cjs`),n=require(`./dom/createElement.cjs`),r=require(`./dom/doElementsOverlap.cjs`),i=require(`./dom/getCSSDeclaration.cjs`),a=require(`./dom/getElement.cjs`),o=require(`./dom/isElement.cjs`),s=require(`./string/isString.cjs`),c=require(`./dom/modifyElement.cjs`),l=require(`./dom/removeElement.cjs`),u=require(`./dom/resolveClassName.cjs`),d=require(`./function/isFunction.cjs`),f=require(`./lang/isNil.cjs`),p=require(`./number/normalizeMinMax.cjs`),m=require(`./number/clamp.cjs`),h=require(`./number/getRandomInteger.cjs`),g=require(`./object/isObject.cjs`),_=require(`./object/deepMerge.cjs`),v=require(`./string/generateText.cjs`),y=require(`./string/generateTokenizedText.cjs`),b=require(`./string/interpolate.cjs`),x=require(`./string/interpolateLiteral.cjs`);exports.clamp=m.clamp,exports.createElement=n.createElement,exports.deepMerge=_.deepMerge,exports.doElementsOverlap=r.doElementsOverlap,exports.extractByIndices=e.extractByIndices,exports.generateText=v.generateText,exports.generateTokenizedText=y.generateTokenizedText,exports.getCSSDeclaration=i.getCSSDeclaration,exports.getElement=a.getElement,exports.getRandomInteger=h.getRandomInteger,exports.interpolate=b.interpolate,exports.interpolateLiteral=x.interpolateLiteral,exports.isElement=o.isElement,exports.isFunction=d.isFunction,exports.isNil=f.isNil,exports.isObject=g.isObject,exports.isString=s.isString,exports.modifyElement=c.modifyElement,exports.normalizeMinMax=p.normalizeMinMax,exports.removeElement=l.removeElement,exports.resolveClassName=u.resolveClassName,exports.standby=t.standby;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./array/extractByIndices.cjs`),t=require(`./async/debounce.cjs`),n=require(`./async/standby.cjs`),r=require(`./async/throttle.cjs`),i=require(`./dom/createElement.cjs`),a=require(`./dom/doElementsOverlap.cjs`),o=require(`./dom/getCSSDeclaration.cjs`),s=require(`./dom/getElement.cjs`),c=require(`./dom/isElement.cjs`),l=require(`./string/isString.cjs`),u=require(`./dom/modifyElement.cjs`),d=require(`./dom/removeElement.cjs`),f=require(`./dom/resolveClassName.cjs`),p=require(`./function/isFunction.cjs`),m=require(`./lang/isNil.cjs`),h=require(`./number/normalizeMinMax.cjs`),g=require(`./number/clamp.cjs`),_=require(`./number/getRandomInteger.cjs`),v=require(`./object/deepClone.cjs`),y=require(`./object/isObject.cjs`),b=require(`./object/deepMerge.cjs`),x=require(`./string/generateText.cjs`),S=require(`./string/generateTokenizedText.cjs`),C=require(`./string/interpolate.cjs`),w=require(`./string/interpolateLiteral.cjs`);exports.clamp=g.clamp,exports.createElement=i.createElement,exports.debounce=t.debounce,exports.deepClone=v.deepClone,exports.deepMerge=b.deepMerge,exports.doElementsOverlap=a.doElementsOverlap,exports.extractByIndices=e.extractByIndices,exports.generateText=x.generateText,exports.generateTokenizedText=S.generateTokenizedText,exports.getCSSDeclaration=o.getCSSDeclaration,exports.getElement=s.getElement,exports.getRandomInteger=_.getRandomInteger,exports.interpolate=C.interpolate,exports.interpolateLiteral=w.interpolateLiteral,exports.isElement=c.isElement,exports.isFunction=p.isFunction,exports.isNil=m.isNil,exports.isObject=y.isObject,exports.isString=l.isString,exports.modifyElement=u.modifyElement,exports.normalizeMinMax=h.normalizeMinMax,exports.removeElement=d.removeElement,exports.resolveClassName=f.resolveClassName,exports.standby=n.standby,exports.throttle=r.throttle;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  export { extractByIndices } from './array/extractByIndices';
2
+ export { debounce } from './async/debounce';
3
+ export type { DebouncedFunction } from './async/debounce';
2
4
  export { standby } from './async/standby';
5
+ export { throttle } from './async/throttle';
6
+ export type { ThrottledFunction } from './async/throttle';
3
7
  export { createElement } from './dom/createElement';
4
8
  export type { BoundingClientRectInit, CreateElementConfig } from './dom/createElement';
5
9
  export { doElementsOverlap } from './dom/doElementsOverlap';
@@ -15,6 +19,7 @@ export { isNil } from './lang/isNil';
15
19
  export { clamp } from './number/clamp';
16
20
  export { getRandomInteger } from './number/getRandomInteger';
17
21
  export { normalizeMinMax } from './number/normalizeMinMax';
22
+ export { deepClone } from './object/deepClone';
18
23
  export { deepMerge } from './object/deepMerge';
19
24
  export { isObject } from './object/isObject';
20
25
  export { generateText } from './string/generateText';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,YAAY,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,YAAY,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -1,23 +1,26 @@
1
1
  import { extractByIndices as e } from "./array/extractByIndices.js";
2
- import { standby as t } from "./async/standby.js";
3
- import { createElement as n } from "./dom/createElement.js";
4
- import { doElementsOverlap as r } from "./dom/doElementsOverlap.js";
5
- import { getCSSDeclaration as i } from "./dom/getCSSDeclaration.js";
6
- import { getElement as a } from "./dom/getElement.js";
7
- import { isElement as o } from "./dom/isElement.js";
8
- import { isString as s } from "./string/isString.js";
9
- import { modifyElement as c } from "./dom/modifyElement.js";
10
- import { removeElement as l } from "./dom/removeElement.js";
11
- import { resolveClassName as u } from "./dom/resolveClassName.js";
12
- import { isFunction as d } from "./function/isFunction.js";
13
- import { isNil as f } from "./lang/isNil.js";
14
- import { normalizeMinMax as p } from "./number/normalizeMinMax.js";
15
- import { clamp as m } from "./number/clamp.js";
16
- import { getRandomInteger as h } from "./number/getRandomInteger.js";
17
- import { isObject as g } from "./object/isObject.js";
18
- import { deepMerge as _ } from "./object/deepMerge.js";
19
- import { generateText as v } from "./string/generateText.js";
20
- import { generateTokenizedText as y } from "./string/generateTokenizedText.js";
21
- import { interpolate as b } from "./string/interpolate.js";
22
- import { interpolateLiteral as x } from "./string/interpolateLiteral.js";
23
- export { m as clamp, n as createElement, _ as deepMerge, r as doElementsOverlap, e as extractByIndices, v as generateText, y as generateTokenizedText, i as getCSSDeclaration, a as getElement, h as getRandomInteger, b as interpolate, x as interpolateLiteral, o as isElement, d as isFunction, f as isNil, g as isObject, s as isString, c as modifyElement, p as normalizeMinMax, l as removeElement, u as resolveClassName, t as standby };
2
+ import { debounce as t } from "./async/debounce.js";
3
+ import { standby as n } from "./async/standby.js";
4
+ import { throttle as r } from "./async/throttle.js";
5
+ import { createElement as i } from "./dom/createElement.js";
6
+ import { doElementsOverlap as a } from "./dom/doElementsOverlap.js";
7
+ import { getCSSDeclaration as o } from "./dom/getCSSDeclaration.js";
8
+ import { getElement as s } from "./dom/getElement.js";
9
+ import { isElement as c } from "./dom/isElement.js";
10
+ import { isString as l } from "./string/isString.js";
11
+ import { modifyElement as u } from "./dom/modifyElement.js";
12
+ import { removeElement as d } from "./dom/removeElement.js";
13
+ import { resolveClassName as f } from "./dom/resolveClassName.js";
14
+ import { isFunction as p } from "./function/isFunction.js";
15
+ import { isNil as m } from "./lang/isNil.js";
16
+ import { normalizeMinMax as h } from "./number/normalizeMinMax.js";
17
+ import { clamp as g } from "./number/clamp.js";
18
+ import { getRandomInteger as _ } from "./number/getRandomInteger.js";
19
+ import { deepClone as v } from "./object/deepClone.js";
20
+ import { isObject as y } from "./object/isObject.js";
21
+ import { deepMerge as b } from "./object/deepMerge.js";
22
+ import { generateText as x } from "./string/generateText.js";
23
+ import { generateTokenizedText as S } from "./string/generateTokenizedText.js";
24
+ import { interpolate as C } from "./string/interpolate.js";
25
+ import { interpolateLiteral as w } from "./string/interpolateLiteral.js";
26
+ export { g as clamp, i as createElement, t as debounce, v as deepClone, b as deepMerge, a as doElementsOverlap, e as extractByIndices, x as generateText, S as generateTokenizedText, o as getCSSDeclaration, s as getElement, _ as getRandomInteger, C as interpolate, w as interpolateLiteral, c as isElement, p as isFunction, m as isNil, y as isObject, l as isString, u as modifyElement, h as normalizeMinMax, d as removeElement, f as resolveClassName, n as standby, r as throttle };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=e=>structuredClone(e);exports.deepClone=e;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @module object/deepClone
3
+ */
4
+ /**
5
+ * @function
6
+ * @example
7
+ * import { deepClone } from '@untemps/utils/object/deepClone'
8
+ *
9
+ * const original = { a: 1, b: { c: [2, 3] } }
10
+ * const clone = deepClone(original)
11
+ * clone.b.c.push(4)
12
+ * console.log(original.b.c) // [2, 3]
13
+ *
14
+ * @param value - The value to deep clone. Must be serialisable by the structured clone algorithm (functions and DOM nodes are not supported).
15
+ * @returns A deep clone of the value.
16
+ */
17
+ export declare const deepClone: <T>(value: T) => T;
18
+ //# sourceMappingURL=deepClone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepClone.d.ts","sourceRoot":"","sources":["../../src/object/deepClone.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAA2B,CAAA"}
@@ -0,0 +1,4 @@
1
+ //#region src/object/deepClone.ts
2
+ var e = (e) => structuredClone(e);
3
+ //#endregion
4
+ export { e as deepClone };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./isObject.cjs`);var t=(n,r)=>{for(let i of Object.keys(n))e.isObject(n[i])&&i in r&&Object.assign(n[i],t(n[i],r[i]));return Object.assign(r||{},n),r};exports.deepMerge=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./isObject.cjs`);var t=(n,r,i=!1)=>{let a=i?r:structuredClone(r);for(let r of Object.keys(n))if(r in a&&e.isObject(n[r])&&e.isObject(a[r]))a[r]=t(n[r],a[r],i);else{let e=n[r];a[r]=typeof e==`object`&&e?structuredClone(e):e}return a};exports.deepMerge=t;
@@ -12,7 +12,8 @@
12
12
  *
13
13
  * @param source - The object to merge into the target.
14
14
  * @param target - The target object where source will be merged.
15
- * @returns The target object containing both source and target keys with source precedence.
15
+ * @param mutate - If true, merges directly into target without cloning. Defaults to false.
16
+ * @returns The merged object — a new object when mutate is false, target itself when mutate is true.
16
17
  */
17
- export declare const deepMerge: (source: Record<string, unknown>, target: Record<string, unknown>) => Record<string, unknown>;
18
+ export declare const deepMerge: (source: Record<string, unknown>, target: Record<string, unknown>, mutate?: boolean) => Record<string, unknown>;
18
19
  //# sourceMappingURL=deepMerge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/object/deepMerge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,GACrB,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAWxB,CAAA"}
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/object/deepMerge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,GACrB,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,gBAAc,KACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAexB,CAAA"}
@@ -1,8 +1,13 @@
1
1
  import { isObject as e } from "./isObject.js";
2
2
  //#region src/object/deepMerge.ts
3
- var t = (n, r) => {
4
- for (let i of Object.keys(n)) e(n[i]) && i in r && Object.assign(n[i], t(n[i], r[i]));
5
- return Object.assign(r || {}, n), r;
3
+ var t = (n, r, i = !1) => {
4
+ let a = i ? r : structuredClone(r);
5
+ for (let r of Object.keys(n)) if (r in a && e(n[r]) && e(a[r])) a[r] = t(n[r], a[r], i);
6
+ else {
7
+ let e = n[r];
8
+ a[r] = typeof e == "object" && e ? structuredClone(e) : e;
9
+ }
10
+ return a;
6
11
  };
7
12
  //#endregion
8
13
  export { t as deepMerge };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../number/normalizeMinMax.cjs`),t=require(`../number/getRandomInteger.cjs`);var n=`year.learn.key.cook.crosswalk.script.chief.plan.meat.vague.demonstrator.dictionary.visible.bomber.variation.leader.channel.litigation.royalty.impulse.package.oppose.privilege.begin.operation.herd.hemisphere.incongruous.horror.pipe.start.vertical.worry.reform.unlike.exhibition.disagree.allow.patrol.combine.impress.invisible.cage.log.snow.undertake.division.ethics.damage.responsible`.split(`.`),r=(t,n)=>{let{min:r,max:i}=e.normalizeMinMax(Math.abs(t),Math.abs(n)),a=Math.max(r,1);return{min:a,max:Math.max(i,a)}},i=({minWords:e=10,maxWords:i=50,dictionary:a=n}={})=>{let o=``,{min:s,max:c}=r(e,i),l=t.getRandomInteger(s,c);for(let e=0;e<l;e++){let t=a[Math.floor(Math.random()*a.length)];o+=`${e>0?` `:``}${t}`}return o};exports.generateText=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../number/normalizeMinMax.cjs`),t=require(`../number/getRandomInteger.cjs`);var n=`year.learn.key.cook.crosswalk.script.chief.plan.meat.vague.demonstrator.dictionary.visible.bomber.variation.leader.channel.litigation.royalty.impulse.package.oppose.privilege.begin.operation.herd.hemisphere.incongruous.horror.pipe.start.vertical.worry.reform.unlike.exhibition.disagree.allow.patrol.combine.impress.invisible.cage.log.snow.undertake.division.ethics.damage.responsible`.split(`.`),r=(t,n)=>{let{min:r,max:i}=e.normalizeMinMax(Math.abs(t),Math.abs(n)),a=Math.max(r,1);return{min:a,max:Math.max(i,a)}},i=({minWords:e=10,maxWords:i=50,dictionary:a=n}={})=>{if(!a?.length)throw RangeError(`dictionary must not be empty`);let o=``,{min:s,max:c}=r(e,i),l=t.getRandomInteger(s,c);for(let e=0;e<l;e++){let t=a[Math.floor(Math.random()*a.length)];o+=`${e>0?` `:``}${t}`}return o};exports.generateText=i;
@@ -1 +1 @@
1
- {"version":3,"file":"generateText.d.ts","sourceRoot":"","sources":["../../src/string/generateText.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAAI,qCAAsD,kBAAuB,KAAG,MAS5G,CAAA"}
1
+ {"version":3,"file":"generateText.d.ts","sourceRoot":"","sources":["../../src/string/generateText.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAAI,qCAAsD,kBAAuB,KAAG,MAU5G,CAAA"}
@@ -8,6 +8,7 @@ var n = /* @__PURE__ */ "year.learn.key.cook.crosswalk.script.chief.plan.meat.va
8
8
  max: Math.max(i, a)
9
9
  };
10
10
  }, i = ({ minWords: e = 10, maxWords: i = 50, dictionary: a = n } = {}) => {
11
+ if (!a?.length) throw RangeError("dictionary must not be empty");
11
12
  let o = "", { min: s, max: c } = r(e, i), l = t(s, c);
12
13
  for (let e = 0; e < l; e++) {
13
14
  let t = a[Math.floor(Math.random() * a.length)];
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../lang/isNil.cjs`);var t=e=>{let t=RegExp(`([\\[\\^\\$\\.|\\?\\*\\+\\(\\)])+`,`g`);return e.replace(t,e=>e.split(``).map(e=>`\\`+e).join(``))},n=e=>Object.keys(e).reduce((e,t,n)=>`${e}${n>0?`|`:``}${t}`,``),r=(r,i={},a=`%`)=>{let o=t(a),s=n(i),c=RegExp(`${o}(${s})${o}`,`g`);return r.replace(c,(t,n)=>e.isNil(i[n])?n:String(i[n]))};exports.interpolate=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../lang/isNil.cjs`);var t=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),n=e=>Object.keys(e).reduce((e,t,n)=>`${e}${n>0?`|`:``}${t}`,``),r=(r,i={},a=`%`)=>{let o=t(a),s=n(i),c=RegExp(`${o}(${s})${o}`,`g`);return r.replace(c,(t,n)=>e.isNil(i[n])?n:String(i[n]))};exports.interpolate=r;
@@ -1 +1 @@
1
- {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/string/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,gBAAa,KAAG,MAKhG,CAAA"}
1
+ {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/string/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,gBAAa,KAAG,MAKhG,CAAA"}
@@ -1,9 +1,6 @@
1
1
  import { isNil as e } from "../lang/isNil.js";
2
2
  //#region src/string/interpolate.ts
3
- var t = (e) => {
4
- let t = /* @__PURE__ */ RegExp("([\\[\\^\\$\\.|\\?\\*\\+\\(\\)])+", "g");
5
- return e.replace(t, (e) => e.split("").map((e) => "\\" + e).join(""));
6
- }, n = (e) => Object.keys(e).reduce((e, t, n) => `${e}${n > 0 ? "|" : ""}${t}`, ""), r = (r, i = {}, a = "%") => {
3
+ var t = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), n = (e) => Object.keys(e).reduce((e, t, n) => `${e}${n > 0 ? "|" : ""}${t}`, ""), r = (r, i = {}, a = "%") => {
7
4
  let o = t(a), s = n(i), c = RegExp(`${o}(${s})${o}`, "g");
8
5
  return r.replace(c, (t, n) => e(i[n]) ? n : String(i[n]));
9
6
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t)=>Function(...Object.keys(t),`return \`${e}\``)(...Object.values(t));exports.interpolateLiteral=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t={})=>e.replace(/\$\{(\w+)\}/g,(e,n)=>{if(!Object.hasOwn(t,n))throw ReferenceError(`${n} is not defined`);return String(t[n])});exports.interpolateLiteral=e;
@@ -15,8 +15,8 @@
15
15
  * interpolateLiteral(value, tokens) // A bird with 3 "wings" and a lot of dignity
16
16
  *
17
17
  * @param value - The literal-like string value to interpolate.
18
- * @param tokens - An object of key/value pairs to replace the tokens.
18
+ * @param tokens - An object of key/value pairs to replace the tokens. Keys must be valid identifiers (`\w+`). Defaults to `{}`.
19
19
  * @returns The interpolated string.
20
20
  */
21
- export declare const interpolateLiteral: (value: string, tokens: Record<string, unknown>) => string;
21
+ export declare const interpolateLiteral: (value: string, tokens?: Record<string, unknown>) => string;
22
22
  //# sourceMappingURL=interpolateLiteral.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interpolateLiteral.d.ts","sourceRoot":"","sources":["../../src/string/interpolateLiteral.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAGnF,CAAA"}
1
+ {"version":3,"file":"interpolateLiteral.d.ts","sourceRoot":"","sources":["../../src/string/interpolateLiteral.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,KAAG,MAKxF,CAAA"}
@@ -1,4 +1,7 @@
1
1
  //#region src/string/interpolateLiteral.ts
2
- var e = (e, t) => Function(...Object.keys(t), `return \`${e}\``)(...Object.values(t));
2
+ var e = (e, t = {}) => e.replace(/\$\{(\w+)\}/g, (e, n) => {
3
+ if (!Object.hasOwn(t, n)) throw ReferenceError(`${n} is not defined`);
4
+ return String(t[n]);
5
+ });
3
6
  //#endregion
4
7
  export { e as interpolateLiteral };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@untemps/utils",
3
- "version": "3.2.1",
3
+ "version": "4.0.0-beta.10",
4
4
  "description": "Utils for @untemps packages",
5
5
  "repository": "git@github.com:untemps/utils.git",
6
6
  "keywords": [],