mutts 1.0.0 → 1.0.2

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 (85) hide show
  1. package/README.md +24 -2
  2. package/dist/chunks/_tslib-C-cuVLvZ.js +73 -0
  3. package/dist/chunks/_tslib-C-cuVLvZ.js.map +1 -0
  4. package/dist/chunks/_tslib-CMEnd0VE.esm.js +68 -0
  5. package/dist/chunks/_tslib-CMEnd0VE.esm.js.map +1 -0
  6. package/dist/chunks/{decorator-BXsign4Z.js → decorator-D4DU97Zg.js} +70 -4
  7. package/dist/chunks/decorator-D4DU97Zg.js.map +1 -0
  8. package/dist/chunks/{decorator-CPbZNnsX.esm.js → decorator-GnHw1Az7.esm.js} +67 -5
  9. package/dist/chunks/decorator-GnHw1Az7.esm.js.map +1 -0
  10. package/dist/chunks/index-DBScoeCX.esm.js +1960 -0
  11. package/dist/chunks/index-DBScoeCX.esm.js.map +1 -0
  12. package/dist/chunks/index-DOTmXL89.js +1983 -0
  13. package/dist/chunks/index-DOTmXL89.js.map +1 -0
  14. package/dist/decorator.d.ts +58 -1
  15. package/dist/decorator.esm.js +1 -1
  16. package/dist/decorator.js +1 -1
  17. package/dist/destroyable.d.ts +42 -0
  18. package/dist/destroyable.esm.js +19 -1
  19. package/dist/destroyable.esm.js.map +1 -1
  20. package/dist/destroyable.js +19 -1
  21. package/dist/destroyable.js.map +1 -1
  22. package/dist/eventful.d.ts +10 -1
  23. package/dist/eventful.esm.js +5 -27
  24. package/dist/eventful.esm.js.map +1 -1
  25. package/dist/eventful.js +15 -37
  26. package/dist/eventful.js.map +1 -1
  27. package/dist/index.d.ts +52 -3
  28. package/dist/index.esm.js +3 -2
  29. package/dist/index.esm.js.map +1 -1
  30. package/dist/index.js +18 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/indexable.d.ts +26 -0
  33. package/dist/indexable.esm.js +6 -0
  34. package/dist/indexable.esm.js.map +1 -1
  35. package/dist/indexable.js +6 -0
  36. package/dist/indexable.js.map +1 -1
  37. package/dist/mutts.umd.js +1 -1
  38. package/dist/mutts.umd.js.map +1 -1
  39. package/dist/mutts.umd.min.js +1 -1
  40. package/dist/mutts.umd.min.js.map +1 -1
  41. package/dist/promiseChain.d.ts +10 -0
  42. package/dist/promiseChain.esm.js +6 -0
  43. package/dist/promiseChain.esm.js.map +1 -1
  44. package/dist/promiseChain.js +6 -0
  45. package/dist/promiseChain.js.map +1 -1
  46. package/dist/reactive.d.ts +258 -20
  47. package/dist/reactive.esm.js +4 -1454
  48. package/dist/reactive.esm.js.map +1 -1
  49. package/dist/reactive.js +29 -1466
  50. package/dist/reactive.js.map +1 -1
  51. package/dist/std-decorators.d.ts +35 -0
  52. package/dist/std-decorators.esm.js +36 -1
  53. package/dist/std-decorators.esm.js.map +1 -1
  54. package/dist/std-decorators.js +36 -1
  55. package/dist/std-decorators.js.map +1 -1
  56. package/docs/mixin.md +229 -0
  57. package/docs/reactive.md +7931 -458
  58. package/package.json +1 -2
  59. package/dist/chunks/decorator-BXsign4Z.js.map +0 -1
  60. package/dist/chunks/decorator-CPbZNnsX.esm.js.map +0 -1
  61. package/src/decorator.test.ts +0 -495
  62. package/src/decorator.ts +0 -205
  63. package/src/destroyable.test.ts +0 -155
  64. package/src/destroyable.ts +0 -158
  65. package/src/eventful.test.ts +0 -380
  66. package/src/eventful.ts +0 -69
  67. package/src/index.ts +0 -7
  68. package/src/indexable.test.ts +0 -388
  69. package/src/indexable.ts +0 -124
  70. package/src/promiseChain.test.ts +0 -201
  71. package/src/promiseChain.ts +0 -99
  72. package/src/reactive/array.test.ts +0 -923
  73. package/src/reactive/array.ts +0 -352
  74. package/src/reactive/core.test.ts +0 -1663
  75. package/src/reactive/core.ts +0 -866
  76. package/src/reactive/index.ts +0 -28
  77. package/src/reactive/interface.test.ts +0 -1477
  78. package/src/reactive/interface.ts +0 -231
  79. package/src/reactive/map.test.ts +0 -866
  80. package/src/reactive/map.ts +0 -162
  81. package/src/reactive/set.test.ts +0 -289
  82. package/src/reactive/set.ts +0 -142
  83. package/src/std-decorators.test.ts +0 -679
  84. package/src/std-decorators.ts +0 -182
  85. package/src/utils.ts +0 -52
@@ -1,99 +0,0 @@
1
- type Resolved<T> = T extends Promise<infer U>
2
- ? Resolved<U>
3
- : T extends (...args: infer Args) => infer R
4
- ? (...args: Args) => Resolved<R>
5
- : T extends object
6
- ? {
7
- [k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : Resolved<T[k]>
8
- }
9
- : T
10
- type PromiseAnd<T> = Resolved<T> & Promise<Resolved<T>>
11
- export type PromiseChain<T> = T extends (...args: infer Args) => infer R
12
- ? PromiseAnd<(...args: Args) => PromiseChain<Resolved<R>>>
13
- : T extends object
14
- ? PromiseAnd<{
15
- [k in keyof T]: k extends 'then' | 'catch' | 'finally' ? T[k] : PromiseChain<Resolved<T[k]>>
16
- }>
17
- : Promise<Resolved<T>>
18
-
19
- const forward =
20
- (name: string, target: any) =>
21
- (...args: any[]) => {
22
- return target[name](...args)
23
- }
24
-
25
- const alreadyChained = new WeakMap<any, PromiseChain<any>>()
26
- const originals = new WeakMap<Promise<any>, any>()
27
-
28
- function cache(target: any, rv: PromiseChain<any>) {
29
- originals.set(rv, target)
30
- alreadyChained.set(target, rv)
31
- }
32
-
33
- type ChainedFunction<T> = ((...args: any[]) => PromiseChain<T>) & {
34
- then: Promise<T>['then']
35
- catch: Promise<T>['catch']
36
- finally: Promise<T>['finally']
37
- }
38
-
39
- const promiseProxyHandler: ProxyHandler<ChainedFunction<any>> = {
40
- //@ts-expect-error
41
- [Symbol.toStringTag]: 'MutTs PromiseChain function',
42
- get(target, prop) {
43
- if (prop === Symbol.toStringTag) return 'PromiseProxy'
44
- if (typeof prop === 'string' && ['then', 'catch', 'finally'].includes(prop))
45
- return target[prop as keyof typeof target]
46
- return chainPromise(target.then((r) => r[prop as keyof typeof r]))
47
- },
48
- }
49
- const promiseForward = (target: any) => ({
50
- // biome-ignore lint/suspicious/noThenProperty: This one is the whole point
51
- then: forward('then', target),
52
- catch: forward('catch', target),
53
- finally: forward('finally', target),
54
- })
55
- const objectProxyHandler: ProxyHandler<any> = {
56
- //@ts-expect-error
57
- [Symbol.toStringTag]: 'MutTs PromiseChain object',
58
- get(target, prop, receiver) {
59
- const getter = Object.getOwnPropertyDescriptor(target, prop)?.get
60
- const rv = getter ? getter.call(receiver) : target[prop]
61
- // Allows fct.call or fct.apply to bypass the chain system
62
- if (typeof target === 'function') return rv
63
- return chainPromise(rv)
64
- },
65
- apply(target, thisArg, args) {
66
- return chainPromise(target.apply(thisArg, args))
67
- },
68
- }
69
- function chainObject<T extends object | Function>(given: T): PromiseChain<T> {
70
- const rv = new Proxy(given, objectProxyHandler) as PromiseChain<T>
71
- cache(given, rv)
72
- return rv
73
- }
74
-
75
- function chainable(x: any): x is object | Function {
76
- return x && ['function', 'object'].includes(typeof x)
77
- }
78
- export function chainPromise<T>(given: Promise<T> | T): PromiseChain<T> {
79
- if (!chainable(given)) return given as PromiseChain<T>
80
- if (alreadyChained.has(given)) return alreadyChained.get(given) as PromiseChain<T>
81
- if (!(given instanceof Promise)) return chainObject(given)
82
- // @ts-expect-error It's ok as we check if it's an object above
83
- given = given.then((r) => (chainable(r) ? chainObject(r) : r))
84
- const target = Object.assign(function (this: any, ...args: any[]) {
85
- return chainPromise(
86
- given.then((r) => {
87
- return this?.then
88
- ? this.then((t: any) => (r as any).apply(t, args))
89
- : (r as any).apply(this, args)
90
- })
91
- )
92
- }, promiseForward(given)) as ChainedFunction<T>
93
- const chained = new Proxy(
94
- target,
95
- promiseProxyHandler as ProxyHandler<ChainedFunction<T>>
96
- ) as PromiseChain<T>
97
- cache(given, chained as PromiseChain<any>)
98
- return chained
99
- }