mutts 1.0.2 → 1.0.3

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 (104) hide show
  1. package/README.md +14 -6
  2. package/dist/chunks/{_tslib-C-cuVLvZ.js → _tslib-BgjropY9.js} +9 -1
  3. package/dist/chunks/_tslib-BgjropY9.js.map +1 -0
  4. package/dist/chunks/{_tslib-CMEnd0VE.esm.js → _tslib-Mzh1rNsX.esm.js} +9 -2
  5. package/dist/chunks/_tslib-Mzh1rNsX.esm.js.map +1 -0
  6. package/dist/chunks/{decorator-D4DU97Zg.js → decorator-DLvrD0UF.js} +42 -19
  7. package/dist/chunks/decorator-DLvrD0UF.js.map +1 -0
  8. package/dist/chunks/{decorator-GnHw1Az7.esm.js → decorator-DqiszP7i.esm.js} +42 -19
  9. package/dist/chunks/decorator-DqiszP7i.esm.js.map +1 -0
  10. package/dist/chunks/index-DzUDtFc7.esm.js +4841 -0
  11. package/dist/chunks/index-DzUDtFc7.esm.js.map +1 -0
  12. package/dist/chunks/index-HNVqPzjz.js +4891 -0
  13. package/dist/chunks/index-HNVqPzjz.js.map +1 -0
  14. package/dist/decorator.esm.js +1 -1
  15. package/dist/decorator.js +1 -1
  16. package/dist/destroyable.d.ts +1 -1
  17. package/dist/destroyable.esm.js +1 -1
  18. package/dist/destroyable.esm.js.map +1 -1
  19. package/dist/destroyable.js +1 -1
  20. package/dist/destroyable.js.map +1 -1
  21. package/dist/devtools/devtools.html +9 -0
  22. package/dist/devtools/devtools.js +5 -0
  23. package/dist/devtools/devtools.js.map +1 -0
  24. package/dist/devtools/manifest.json +8 -0
  25. package/dist/devtools/panel.css +72 -0
  26. package/dist/devtools/panel.html +31 -0
  27. package/dist/devtools/panel.js +13048 -0
  28. package/dist/devtools/panel.js.map +1 -0
  29. package/dist/eventful.esm.js +1 -1
  30. package/dist/eventful.js +1 -1
  31. package/dist/index.d.ts +18 -63
  32. package/dist/index.esm.js +4 -4
  33. package/dist/index.js +36 -11
  34. package/dist/index.js.map +1 -1
  35. package/dist/indexable.d.ts +187 -1
  36. package/dist/indexable.esm.js +197 -3
  37. package/dist/indexable.esm.js.map +1 -1
  38. package/dist/indexable.js +198 -2
  39. package/dist/indexable.js.map +1 -1
  40. package/dist/mutts.umd.js +1 -1
  41. package/dist/mutts.umd.js.map +1 -1
  42. package/dist/mutts.umd.min.js +1 -1
  43. package/dist/mutts.umd.min.js.map +1 -1
  44. package/dist/promiseChain.esm.js.map +1 -1
  45. package/dist/promiseChain.js.map +1 -1
  46. package/dist/reactive.d.ts +601 -97
  47. package/dist/reactive.esm.js +3 -3
  48. package/dist/reactive.js +31 -10
  49. package/dist/reactive.js.map +1 -1
  50. package/dist/std-decorators.esm.js +1 -1
  51. package/dist/std-decorators.js +1 -1
  52. package/docs/ai/api-reference.md +133 -0
  53. package/docs/ai/manual.md +105 -0
  54. package/docs/iterableWeak.md +646 -0
  55. package/docs/reactive/advanced.md +1280 -0
  56. package/docs/reactive/collections.md +767 -0
  57. package/docs/reactive/core.md +973 -0
  58. package/docs/reactive.md +21 -9545
  59. package/package.json +18 -5
  60. package/src/decorator.ts +266 -0
  61. package/src/destroyable.ts +199 -0
  62. package/src/eventful.ts +77 -0
  63. package/src/index.d.ts +9 -0
  64. package/src/index.ts +9 -0
  65. package/src/indexable.ts +484 -0
  66. package/src/introspection.ts +59 -0
  67. package/src/iterableWeak.ts +233 -0
  68. package/src/mixins.ts +123 -0
  69. package/src/promiseChain.ts +110 -0
  70. package/src/reactive/array.ts +414 -0
  71. package/src/reactive/change.ts +134 -0
  72. package/src/reactive/debug.ts +517 -0
  73. package/src/reactive/deep-touch.ts +268 -0
  74. package/src/reactive/deep-watch-state.ts +82 -0
  75. package/src/reactive/deep-watch.ts +168 -0
  76. package/src/reactive/effect-context.ts +94 -0
  77. package/src/reactive/effects.ts +1333 -0
  78. package/src/reactive/index.ts +75 -0
  79. package/src/reactive/interface.ts +223 -0
  80. package/src/reactive/map.ts +171 -0
  81. package/src/reactive/mapped.ts +130 -0
  82. package/src/reactive/memoize.ts +107 -0
  83. package/src/reactive/non-reactive-state.ts +49 -0
  84. package/src/reactive/non-reactive.ts +43 -0
  85. package/src/reactive/project.project.md +93 -0
  86. package/src/reactive/project.ts +335 -0
  87. package/src/reactive/proxy-state.ts +27 -0
  88. package/src/reactive/proxy.ts +285 -0
  89. package/src/reactive/record.ts +196 -0
  90. package/src/reactive/register.ts +421 -0
  91. package/src/reactive/set.ts +144 -0
  92. package/src/reactive/tracking.ts +101 -0
  93. package/src/reactive/types.ts +358 -0
  94. package/src/reactive/zone.ts +208 -0
  95. package/src/std-decorators.ts +217 -0
  96. package/src/utils.ts +117 -0
  97. package/dist/chunks/_tslib-C-cuVLvZ.js.map +0 -1
  98. package/dist/chunks/_tslib-CMEnd0VE.esm.js.map +0 -1
  99. package/dist/chunks/decorator-D4DU97Zg.js.map +0 -1
  100. package/dist/chunks/decorator-GnHw1Az7.esm.js.map +0 -1
  101. package/dist/chunks/index-DBScoeCX.esm.js +0 -1960
  102. package/dist/chunks/index-DBScoeCX.esm.js.map +0 -1
  103. package/dist/chunks/index-DOTmXL89.js +0 -1983
  104. package/dist/chunks/index-DOTmXL89.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"promiseChain.esm.js","sources":["../src/promiseChain.ts"],"sourcesContent":["type Resolved<T> = T extends Promise<infer U>\n\t? Resolved<U>\n\t: T extends (...args: infer Args) => infer R\n\t\t? (...args: Args) => Resolved<R>\n\t\t: T extends object\n\t\t\t? {\n\t\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>\n\t\t\t\t}\n\t\t\t: T\ntype PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>\n/**\n * Type that transforms promises into chainable objects\n * Allows calling methods directly on promise results without awaiting them first\n */\nexport type PromiseChain<T> = T extends (...args: infer Args) => infer R\n\t? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>>\n\t: T extends object\n\t\t? PromiseAnd<{\n\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>\n\t\t\t}>\n\t\t: Promise<Resolved<T>>\n\nconst forward =\n\t(name: string, target: any) =>\n\t(...args: any[]) => {\n\t\treturn target[name](...args)\n\t}\n\nconst alreadyChained = new WeakMap<any, PromiseChain<any>>()\nconst originals = new WeakMap<Promise<any>, any>()\n\nfunction cache(target: any, rv: PromiseChain<any>) {\n\toriginals.set(rv, target)\n\talreadyChained.set(target, rv)\n}\n\ntype ChainedFunction<T> = ((...args: any[]) => PromiseChain<T>) & {\n\tthen: Promise<T>['then']\n\tcatch: Promise<T>['catch']\n\tfinally: Promise<T>['finally']\n}\n\nconst promiseProxyHandler: ProxyHandler<ChainedFunction<any>> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain function',\n\tget(target, prop) {\n\t\tif (prop === Symbol.toStringTag) return 'PromiseProxy'\n\t\tif (typeof prop === 'string' && ['then', 'catch', 'finally'].includes(prop))\n\t\t\treturn target[prop as keyof typeof target]\n\t\treturn chainPromise(target.then((r) => r[prop as keyof typeof r]))\n\t},\n}\nconst promiseForward = (target: any) => ({\n\t// biome-ignore lint/suspicious/noThenProperty: This one is the whole point\n\tthen: forward('then', target),\n\tcatch: forward('catch', target),\n\tfinally: forward('finally', target),\n})\nconst objectProxyHandler: ProxyHandler<any> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain object',\n\tget(target, prop, receiver) {\n\t\tconst getter = Object.getOwnPropertyDescriptor(target, prop)?.get\n\t\tconst rv = getter ? getter.call(receiver) : target[prop]\n\t\t// Allows fct.call or fct.apply to bypass the chain system\n\t\tif (typeof target === 'function') return rv\n\t\treturn chainPromise(rv)\n\t},\n\tapply(target, thisArg, args) {\n\t\treturn chainPromise(target.apply(thisArg, args))\n\t},\n}\nfunction chainObject<T extends object | Function>(given: T): PromiseChain<T> {\n\tconst rv = new Proxy(given, objectProxyHandler) as PromiseChain<T>\n\tcache(given, rv)\n\treturn rv\n}\n\nfunction chainable(x: any): x is object | Function {\n\treturn x && ['function', 'object'].includes(typeof x)\n}\n/**\n * Transforms a promise or value into a chainable object\n * Allows calling methods directly on promise results without awaiting them first\n * @param given - The promise or value to make chainable\n * @returns A chainable version of the input\n */\nexport function chainPromise<T>(given: Promise<T> | T): PromiseChain<T> {\n\tif (!chainable(given)) return given as PromiseChain<T>\n\tif (alreadyChained.has(given)) return alreadyChained.get(given) as PromiseChain<T>\n\tif (!(given instanceof Promise)) return chainObject(given)\n\t// @ts-expect-error It's ok as we check if it's an object above\n\tgiven = given.then((r) => (chainable(r) ? chainObject(r) : r))\n\tconst target = Object.assign(function (this: any, ...args: any[]) {\n\t\treturn chainPromise(\n\t\t\tgiven.then((r) => {\n\t\t\t\treturn this?.then\n\t\t\t\t\t? this.then((t: any) => (r as any).apply(t, args))\n\t\t\t\t\t: (r as any).apply(this, args)\n\t\t\t})\n\t\t)\n\t}, promiseForward(given)) as ChainedFunction<T>\n\tconst chained = new Proxy(\n\t\ttarget,\n\t\tpromiseProxyHandler as ProxyHandler<ChainedFunction<T>>\n\t) as PromiseChain<T>\n\tcache(given, chained as PromiseChain<any>)\n\treturn chained\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promiseChain.esm.js","sources":["../src/promiseChain.ts"],"sourcesContent":["type Resolved<T> =\n\tT extends Promise<infer U>\n\t\t? Resolved<U>\n\t\t: T extends (...args: infer Args) => infer R\n\t\t\t? (...args: Args) => Resolved<R>\n\t\t\t: T extends object\n\t\t\t\t? {\n\t\t\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>\n\t\t\t\t\t}\n\t\t\t\t: T\ntype PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>\n/**\n * Type that transforms promises into chainable objects\n * Allows calling methods directly on promise results without awaiting them first\n */\nexport type PromiseChain<T> = T extends (...args: infer Args) => infer R\n\t? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>>\n\t: T extends object\n\t\t? PromiseAnd<{\n\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>\n\t\t\t}>\n\t\t: Promise<Resolved<T>>\n\nconst forward =\n\t(name: string, target: any) =>\n\t(...args: any[]) => {\n\t\treturn target[name](...args)\n\t}\n\nconst alreadyChained = new WeakMap<any, PromiseChain<any>>()\nconst originals = new WeakMap<Promise<any>, any>()\n\nfunction cache(target: any, rv: PromiseChain<any>) {\n\toriginals.set(rv, target)\n\talreadyChained.set(target, rv)\n}\n\ntype ChainedFunction<T> = ((...args: any[]) => PromiseChain<T>) & {\n\tthen: Promise<T>['then']\n\tcatch: Promise<T>['catch']\n\tfinally: Promise<T>['finally']\n}\n\nconst promiseProxyHandler: ProxyHandler<ChainedFunction<any>> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain function',\n\tget(target, prop) {\n\t\tif (prop === Symbol.toStringTag) return 'PromiseProxy'\n\t\tif (typeof prop === 'string' && ['then', 'catch', 'finally'].includes(prop))\n\t\t\treturn target[prop as keyof typeof target]\n\t\treturn chainPromise(target.then((r) => r[prop as keyof typeof r]))\n\t},\n}\nconst promiseForward = (target: any) => ({\n\t// biome-ignore lint/suspicious/noThenProperty: This one is the whole point\n\tthen: forward('then', target),\n\tcatch: forward('catch', target),\n\tfinally: forward('finally', target),\n})\nconst objectProxyHandler: ProxyHandler<any> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain object',\n\tget(target, prop, receiver) {\n\t\tconst getter = Object.getOwnPropertyDescriptor(target, prop)?.get\n\t\tconst rv = getter ? getter.call(receiver) : target[prop]\n\t\t// Allows fct.call or fct.apply to bypass the chain system\n\t\tif (typeof target === 'function') return rv\n\t\treturn chainPromise(rv)\n\t},\n\tapply(target, thisArg, args) {\n\t\treturn chainPromise(target.apply(thisArg, args))\n\t},\n}\nfunction chainObject<T extends object | Function>(given: T): PromiseChain<T> {\n\tconst rv = new Proxy(given, objectProxyHandler) as PromiseChain<T>\n\tcache(given, rv)\n\treturn rv\n}\n\nfunction chainable(x: any): x is object | Function {\n\treturn x && ['function', 'object'].includes(typeof x)\n}\n/**\n * Transforms a promise or value into a chainable object\n * Allows calling methods directly on promise results without awaiting them first\n * @param given - The promise or value to make chainable\n * @returns A chainable version of the input\n */\nexport function chainPromise<T>(given: Promise<T> | T): PromiseChain<T> {\n\tif (!chainable(given)) return given as PromiseChain<T>\n\tif (alreadyChained.has(given)) return alreadyChained.get(given) as PromiseChain<T>\n\tif (!(given instanceof Promise)) return chainObject(given)\n\t// @ts-expect-error It's ok as we check if it's an object above\n\tgiven = given.then((r) => (chainable(r) ? chainObject(r) : r))\n\tconst target = Object.assign(function (this: any, ...args: any[]) {\n\t\treturn chainPromise(\n\t\t\tgiven.then((r) => {\n\t\t\t\treturn this?.then\n\t\t\t\t\t? this.then((t: any) => (r as any).apply(t, args))\n\t\t\t\t\t: (r as any).apply(this, args)\n\t\t\t})\n\t\t)\n\t}, promiseForward(given)) as ChainedFunction<T>\n\tconst chained = new Proxy(\n\t\ttarget,\n\t\tpromiseProxyHandler as ProxyHandler<ChainedFunction<T>>\n\t) as PromiseChain<T>\n\tcache(given, chained as PromiseChain<any>)\n\treturn chained\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"promiseChain.js","sources":["../src/promiseChain.ts"],"sourcesContent":["type Resolved<T> = T extends Promise<infer U>\n\t? Resolved<U>\n\t: T extends (...args: infer Args) => infer R\n\t\t? (...args: Args) => Resolved<R>\n\t\t: T extends object\n\t\t\t? {\n\t\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>\n\t\t\t\t}\n\t\t\t: T\ntype PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>\n/**\n * Type that transforms promises into chainable objects\n * Allows calling methods directly on promise results without awaiting them first\n */\nexport type PromiseChain<T> = T extends (...args: infer Args) => infer R\n\t? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>>\n\t: T extends object\n\t\t? PromiseAnd<{\n\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>\n\t\t\t}>\n\t\t: Promise<Resolved<T>>\n\nconst forward =\n\t(name: string, target: any) =>\n\t(...args: any[]) => {\n\t\treturn target[name](...args)\n\t}\n\nconst alreadyChained = new WeakMap<any, PromiseChain<any>>()\nconst originals = new WeakMap<Promise<any>, any>()\n\nfunction cache(target: any, rv: PromiseChain<any>) {\n\toriginals.set(rv, target)\n\talreadyChained.set(target, rv)\n}\n\ntype ChainedFunction<T> = ((...args: any[]) => PromiseChain<T>) & {\n\tthen: Promise<T>['then']\n\tcatch: Promise<T>['catch']\n\tfinally: Promise<T>['finally']\n}\n\nconst promiseProxyHandler: ProxyHandler<ChainedFunction<any>> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain function',\n\tget(target, prop) {\n\t\tif (prop === Symbol.toStringTag) return 'PromiseProxy'\n\t\tif (typeof prop === 'string' && ['then', 'catch', 'finally'].includes(prop))\n\t\t\treturn target[prop as keyof typeof target]\n\t\treturn chainPromise(target.then((r) => r[prop as keyof typeof r]))\n\t},\n}\nconst promiseForward = (target: any) => ({\n\t// biome-ignore lint/suspicious/noThenProperty: This one is the whole point\n\tthen: forward('then', target),\n\tcatch: forward('catch', target),\n\tfinally: forward('finally', target),\n})\nconst objectProxyHandler: ProxyHandler<any> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain object',\n\tget(target, prop, receiver) {\n\t\tconst getter = Object.getOwnPropertyDescriptor(target, prop)?.get\n\t\tconst rv = getter ? getter.call(receiver) : target[prop]\n\t\t// Allows fct.call or fct.apply to bypass the chain system\n\t\tif (typeof target === 'function') return rv\n\t\treturn chainPromise(rv)\n\t},\n\tapply(target, thisArg, args) {\n\t\treturn chainPromise(target.apply(thisArg, args))\n\t},\n}\nfunction chainObject<T extends object | Function>(given: T): PromiseChain<T> {\n\tconst rv = new Proxy(given, objectProxyHandler) as PromiseChain<T>\n\tcache(given, rv)\n\treturn rv\n}\n\nfunction chainable(x: any): x is object | Function {\n\treturn x && ['function', 'object'].includes(typeof x)\n}\n/**\n * Transforms a promise or value into a chainable object\n * Allows calling methods directly on promise results without awaiting them first\n * @param given - The promise or value to make chainable\n * @returns A chainable version of the input\n */\nexport function chainPromise<T>(given: Promise<T> | T): PromiseChain<T> {\n\tif (!chainable(given)) return given as PromiseChain<T>\n\tif (alreadyChained.has(given)) return alreadyChained.get(given) as PromiseChain<T>\n\tif (!(given instanceof Promise)) return chainObject(given)\n\t// @ts-expect-error It's ok as we check if it's an object above\n\tgiven = given.then((r) => (chainable(r) ? chainObject(r) : r))\n\tconst target = Object.assign(function (this: any, ...args: any[]) {\n\t\treturn chainPromise(\n\t\t\tgiven.then((r) => {\n\t\t\t\treturn this?.then\n\t\t\t\t\t? this.then((t: any) => (r as any).apply(t, args))\n\t\t\t\t\t: (r as any).apply(this, args)\n\t\t\t})\n\t\t)\n\t}, promiseForward(given)) as ChainedFunction<T>\n\tconst chained = new Proxy(\n\t\ttarget,\n\t\tpromiseProxyHandler as ProxyHandler<ChainedFunction<T>>\n\t) as PromiseChain<T>\n\tcache(given, chained as PromiseChain<any>)\n\treturn chained\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promiseChain.js","sources":["../src/promiseChain.ts"],"sourcesContent":["type Resolved<T> =\n\tT extends Promise<infer U>\n\t\t? Resolved<U>\n\t\t: T extends (...args: infer Args) => infer R\n\t\t\t? (...args: Args) => Resolved<R>\n\t\t\t: T extends object\n\t\t\t\t? {\n\t\t\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>\n\t\t\t\t\t}\n\t\t\t\t: T\ntype PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>\n/**\n * Type that transforms promises into chainable objects\n * Allows calling methods directly on promise results without awaiting them first\n */\nexport type PromiseChain<T> = T extends (...args: infer Args) => infer R\n\t? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>>\n\t: T extends object\n\t\t? PromiseAnd<{\n\t\t\t\t[k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>\n\t\t\t}>\n\t\t: Promise<Resolved<T>>\n\nconst forward =\n\t(name: string, target: any) =>\n\t(...args: any[]) => {\n\t\treturn target[name](...args)\n\t}\n\nconst alreadyChained = new WeakMap<any, PromiseChain<any>>()\nconst originals = new WeakMap<Promise<any>, any>()\n\nfunction cache(target: any, rv: PromiseChain<any>) {\n\toriginals.set(rv, target)\n\talreadyChained.set(target, rv)\n}\n\ntype ChainedFunction<T> = ((...args: any[]) => PromiseChain<T>) & {\n\tthen: Promise<T>['then']\n\tcatch: Promise<T>['catch']\n\tfinally: Promise<T>['finally']\n}\n\nconst promiseProxyHandler: ProxyHandler<ChainedFunction<any>> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain function',\n\tget(target, prop) {\n\t\tif (prop === Symbol.toStringTag) return 'PromiseProxy'\n\t\tif (typeof prop === 'string' && ['then', 'catch', 'finally'].includes(prop))\n\t\t\treturn target[prop as keyof typeof target]\n\t\treturn chainPromise(target.then((r) => r[prop as keyof typeof r]))\n\t},\n}\nconst promiseForward = (target: any) => ({\n\t// biome-ignore lint/suspicious/noThenProperty: This one is the whole point\n\tthen: forward('then', target),\n\tcatch: forward('catch', target),\n\tfinally: forward('finally', target),\n})\nconst objectProxyHandler: ProxyHandler<any> = {\n\t//@ts-expect-error\n\t[Symbol.toStringTag]: 'MutTs PromiseChain object',\n\tget(target, prop, receiver) {\n\t\tconst getter = Object.getOwnPropertyDescriptor(target, prop)?.get\n\t\tconst rv = getter ? getter.call(receiver) : target[prop]\n\t\t// Allows fct.call or fct.apply to bypass the chain system\n\t\tif (typeof target === 'function') return rv\n\t\treturn chainPromise(rv)\n\t},\n\tapply(target, thisArg, args) {\n\t\treturn chainPromise(target.apply(thisArg, args))\n\t},\n}\nfunction chainObject<T extends object | Function>(given: T): PromiseChain<T> {\n\tconst rv = new Proxy(given, objectProxyHandler) as PromiseChain<T>\n\tcache(given, rv)\n\treturn rv\n}\n\nfunction chainable(x: any): x is object | Function {\n\treturn x && ['function', 'object'].includes(typeof x)\n}\n/**\n * Transforms a promise or value into a chainable object\n * Allows calling methods directly on promise results without awaiting them first\n * @param given - The promise or value to make chainable\n * @returns A chainable version of the input\n */\nexport function chainPromise<T>(given: Promise<T> | T): PromiseChain<T> {\n\tif (!chainable(given)) return given as PromiseChain<T>\n\tif (alreadyChained.has(given)) return alreadyChained.get(given) as PromiseChain<T>\n\tif (!(given instanceof Promise)) return chainObject(given)\n\t// @ts-expect-error It's ok as we check if it's an object above\n\tgiven = given.then((r) => (chainable(r) ? chainObject(r) : r))\n\tconst target = Object.assign(function (this: any, ...args: any[]) {\n\t\treturn chainPromise(\n\t\t\tgiven.then((r) => {\n\t\t\t\treturn this?.then\n\t\t\t\t\t? this.then((t: any) => (r as any).apply(t, args))\n\t\t\t\t\t: (r as any).apply(this, args)\n\t\t\t})\n\t\t)\n\t}, promiseForward(given)) as ChainedFunction<T>\n\tconst chained = new Proxy(\n\t\ttarget,\n\t\tpromiseProxyHandler as ProxyHandler<ChainedFunction<T>>\n\t) as PromiseChain<T>\n\tcache(given, chained as PromiseChain<any>)\n\treturn chained\n}\n"],"names":[],"mappings":";;AAuBA,MAAM,OAAO,GACZ,CAAC,IAAY,EAAE,MAAW,KAC1B,CAAC,GAAG,IAAW,KAAI;IAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7B,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,OAAO,EAA0B;AAC5D,MAAM,SAAS,GAAG,IAAI,OAAO,EAAqB;AAElD,SAAS,KAAK,CAAC,MAAW,EAAE,EAAqB,EAAA;AAChD,IAAA,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AACzB,IAAA,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;AAC/B;AAQA,MAAM,mBAAmB,GAAuC;;AAE/D,IAAA,CAAC,MAAM,CAAC,WAAW,GAAG,6BAA6B;IACnD,GAAG,CAAC,MAAM,EAAE,IAAI,EAAA;AACf,QAAA,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW;AAAE,YAAA,OAAO,cAAc;AACtD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1E,YAAA,OAAO,MAAM,CAAC,IAA2B,CAAC;AAC3C,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAsB,CAAC,CAAC,CAAC;IACnE,CAAC;CACD;AACD,MAAM,cAAc,GAAG,CAAC,MAAW,MAAM;;AAExC,IAAA,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7B,IAAA,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/B,IAAA,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;AACnC,CAAA,CAAC;AACF,MAAM,kBAAkB,GAAsB;;AAE7C,IAAA,CAAC,MAAM,CAAC,WAAW,GAAG,2BAA2B;AACjD,IAAA,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;AACjE,QAAA,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;;QAExD,IAAI,OAAO,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,EAAE;AAC3C,QAAA,OAAO,YAAY,CAAC,EAAE,CAAC;IACxB,CAAC;AACD,IAAA,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAA;QAC1B,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACD;AACD,SAAS,WAAW,CAA8B,KAAQ,EAAA;IACzD,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAoB;AAClE,IAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAChB,IAAA,OAAO,EAAE;AACV;AAEA,SAAS,SAAS,CAAC,CAAM,EAAA;AACxB,IAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtD;AACA;;;;;AAKG;AACG,SAAU,YAAY,CAAI,KAAqB,EAAA;AACpD,IAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAwB;AACtD,IAAA,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAoB;AAClF,IAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC;AAAE,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC;;AAE1D,IAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAqB,GAAG,IAAW,EAAA;QAC/D,OAAO,YAAY,CAClB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;YAChB,OAAO,IAAI,EAAE;AACZ,kBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,KAAM,CAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;kBAC9C,CAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QAChC,CAAC,CAAC,CACF;AACF,IAAA,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAuB;IAC/C,MAAM,OAAO,GAAG,IAAI,KAAK,CACxB,MAAM,EACN,mBAAuD,CACpC;AACpB,IAAA,KAAK,CAAC,KAAK,EAAE,OAA4B,CAAC;AAC1C,IAAA,OAAO,OAAO;AACf;;;;"}