@e280/strata 0.2.0-2 → 0.2.0-4

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 (44) hide show
  1. package/README.md +42 -32
  2. package/package.json +1 -1
  3. package/s/signals/derive.ts +25 -1
  4. package/s/signals/lazy.ts +24 -1
  5. package/s/signals/porcelain.ts +13 -1
  6. package/s/signals/signal.ts +33 -6
  7. package/s/signals/signals.test.ts +5 -6
  8. package/s/signals/tests/derive.test.ts +22 -0
  9. package/s/signals/tests/lazy.test.ts +15 -0
  10. package/s/signals/tests/signal.test.ts +52 -0
  11. package/s/signals/types.ts +12 -0
  12. package/x/signals/derive.d.ts +2 -1
  13. package/x/signals/derive.js +18 -0
  14. package/x/signals/derive.js.map +1 -1
  15. package/x/signals/lazy.d.ts +2 -1
  16. package/x/signals/lazy.js +17 -0
  17. package/x/signals/lazy.js.map +1 -1
  18. package/x/signals/porcelain.d.ts +7 -1
  19. package/x/signals/porcelain.js +3 -1
  20. package/x/signals/porcelain.js.map +1 -1
  21. package/x/signals/signal.d.ts +2 -2
  22. package/x/signals/signal.js +24 -4
  23. package/x/signals/signal.js.map +1 -1
  24. package/x/signals/signals.test.d.ts +26 -19
  25. package/x/signals/signals.test.js +4 -6
  26. package/x/signals/signals.test.js.map +1 -1
  27. package/x/signals/tests/derive.test.d.ts +4 -0
  28. package/x/signals/tests/derive.test.js +18 -0
  29. package/x/signals/tests/derive.test.js.map +1 -1
  30. package/x/signals/tests/lazy.test.d.ts +3 -0
  31. package/x/signals/tests/lazy.test.js +12 -0
  32. package/x/signals/tests/lazy.test.js.map +1 -1
  33. package/x/signals/tests/signal.test.d.ts +6 -0
  34. package/x/signals/tests/signal.test.js +40 -0
  35. package/x/signals/tests/signal.test.js.map +1 -1
  36. package/x/signals/types.d.ts +8 -0
  37. package/s/signals/parts/hipster.ts +0 -35
  38. package/s/signals/tests/signal-fn.test.ts +0 -56
  39. package/x/signals/parts/hipster.d.ts +0 -3
  40. package/x/signals/parts/hipster.js +0 -24
  41. package/x/signals/parts/hipster.js.map +0 -1
  42. package/x/signals/tests/signal-fn.test.d.ts +0 -8
  43. package/x/signals/tests/signal-fn.test.js +0 -43
  44. package/x/signals/tests/signal-fn.test.js.map +0 -1
package/README.md CHANGED
@@ -28,91 +28,101 @@ import {signal, effect} from "@e280/strata"
28
28
  ### 🚦 each signal holds a value
29
29
  - **create a signal**
30
30
  ```ts
31
- const count = signal(0)
31
+ const $count = signal(0)
32
32
  ```
33
+ - maybe you like the `$` prefix convention for signals
33
34
  - **read a signal**
34
35
  ```ts
35
- count.get() // 0
36
+ $count.get() // 0
36
37
  ```
37
38
  - **set a signal**
38
39
  ```ts
39
- count.set(1)
40
+ $count.set(1)
40
41
  ```
41
- - **set a signal, and await effect propagation**
42
+ - **set a signal, and await all downstream effects**
42
43
  ```ts
43
- await count.set(2)
44
+ await $count.set(2)
44
45
  ```
45
46
 
46
47
  ### 🚦 pick your poison
47
48
  - **signal get/set syntax**
48
49
  ```ts
49
- count.get() // get
50
- await count.set(2) // set
50
+ $count.get() // get
51
+ await $count.set(2) // set
51
52
  ```
52
53
  - **signal .value accessor syntax**
53
54
  ```ts
54
- count.value // get
55
- count.value = 2 // set
55
+ $count.value // get
56
+ $count.value = 2 // set
56
57
  ```
57
58
  value pattern is nice for these vibes
58
59
  ```ts
59
- count.value++
60
- count.value += 1
60
+ $count.value++
61
+ $count.value += 1
61
62
  ```
62
63
  - **signal hipster fn syntax**
63
- - turn a signal into a hipster fn
64
+ - mint a fresh new signal fn
64
65
  ```ts
65
- const count = signal.fn(1)
66
+ const $count = signal.fn(1)
66
67
  ```
67
- - now you can directly invoke it
68
+ - or turn any existing signal into a hipster fn
68
69
  ```ts
69
- count() // get
70
- await count(2) // set
70
+ const $count = signal.fn(1)
71
71
  ```
72
- - it has all the stuff that a signal has
72
+ - now you can directly invoke it
73
73
  ```ts
74
- count.get()
75
- await count.publish(5)
76
- count.on(x => console.log(x))
74
+ $count() // get
75
+ await $count(2) // set
77
76
  ```
78
- - mint a fresh new signal fn
77
+ - it has all the stuff that a signal has
79
78
  ```ts
80
- const count = signal.fn(1)
79
+ $count.get()
80
+ await $count.publish(5)
81
+ $count.on(x => console.log(x))
81
82
  ```
82
83
 
83
84
  ### 🚦 effects
84
85
  - **effects run when the relevant signals change**
85
86
  ```ts
86
- effect(() => console.log(count.get()))
87
+ effect(() => console.log($count.get()))
87
88
  // 1
88
- // the system detects 'count' is relevant
89
+ // the system detects '$count' is relevant
89
90
 
90
- count.value++
91
+ $count.value++
91
92
  // 2
92
- // when count is changed, the effect fn is run
93
+ // when $count is changed, the effect fn is run
93
94
  ```
94
95
 
95
96
  ### 🚦 `signal.derive` and `signal.lazy` are computed signals
96
97
  - **signal.derive**
97
98
  is for combining signals
98
99
  ```ts
99
- const a = signal(1)
100
- const b = signal(10)
101
- const product = signal.derive(() => a.get() * b.get())
100
+ const $a = signal(1)
101
+ const $b = signal(10)
102
+ const $product = signal.derive(() => $a.get() * $b.get())
102
103
 
103
- product.get() // 10
104
+ $product.get() // 10
104
105
 
105
106
  // change a dependency,
106
107
  // and the derived signal is automatically updated
107
- await a.set(2)
108
+ await $a.set(2)
108
109
 
109
- product.get() // 20
110
+ $product.get() // 20
110
111
  ```
111
112
  - **signal.lazy**
112
113
  is for making special optimizations.
113
114
  it's like derive, except it cannot trigger effects,
114
115
  because it's so lazy it only computes the value on read, and only when necessary.
115
116
  > *i repeat: lazy signals cannot trigger effects!*
117
+ - **hipster syntax**
118
+ derive and lazy have hipster syntax just like signals.
119
+ ```ts
120
+ const $a = signal.fn(1)
121
+ const $b = signal.fn(10)
122
+ const $product = signal.derive.fn(() => $a() * $b())
123
+
124
+ $product() // 10
125
+ ```
116
126
 
117
127
  <br/>
118
128
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/strata",
3
- "version": "0.2.0-2",
3
+ "version": "0.2.0-4",
4
4
  "description": "state management",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -1,8 +1,8 @@
1
1
 
2
- import {SignalOptions} from "./types.js"
3
2
  import {collectorEffect} from "./effect.js"
4
3
  import {Reactive} from "./parts/reactive.js"
5
4
  import {tracker} from "../tracker/tracker.js"
5
+ import {DeriveFn, SignalOptions} from "./types.js"
6
6
  import {defaultCompare} from "./utils/default-compare.js"
7
7
 
8
8
  export class Derive<V> extends Reactive<V> {
@@ -29,5 +29,29 @@ export class Derive<V> extends Reactive<V> {
29
29
  super.dispose()
30
30
  this.#dispose()
31
31
  }
32
+
33
+ fn() {
34
+ const that = this as Derive<V>
35
+
36
+ function f(): V {
37
+ return that.get()
38
+ }
39
+
40
+ f.derive = that
41
+ f.get = that.get.bind(that)
42
+ f.on = that.on
43
+ f.dispose = that.dispose.bind(that)
44
+ f.fn = that.fn.bind(that)
45
+
46
+ Object.defineProperty(f, "value", {
47
+ get: () => that.value,
48
+ })
49
+
50
+ Object.defineProperty(f, "sneak", {
51
+ get: () => that.sneak,
52
+ })
53
+
54
+ return f as DeriveFn<V>
55
+ }
32
56
  }
33
57
 
package/s/signals/lazy.ts CHANGED
@@ -1,8 +1,8 @@
1
1
 
2
- import {SignalOptions} from "./types.js"
3
2
  import {collectorEffect} from "./effect.js"
4
3
  import {Readable} from "./parts/readable.js"
5
4
  import {tracker} from "../tracker/tracker.js"
5
+ import {LazyFn, SignalOptions} from "./types.js"
6
6
  import {defaultCompare} from "./utils/default-compare.js"
7
7
 
8
8
  export class Lazy<V> extends Readable<V> {
@@ -43,5 +43,28 @@ export class Lazy<V> extends Readable<V> {
43
43
  if (this.#effect)
44
44
  this.#effect()
45
45
  }
46
+
47
+ fn() {
48
+ const that = this as Lazy<V>
49
+
50
+ function f(): V {
51
+ return that.get()
52
+ }
53
+
54
+ f.lazy = that
55
+ f.get = that.get.bind(that)
56
+ f.dispose = that.dispose.bind(that)
57
+ f.fn = that.fn.bind(that)
58
+
59
+ Object.defineProperty(f, "value", {
60
+ get: () => that.value,
61
+ })
62
+
63
+ Object.defineProperty(f, "sneak", {
64
+ get: () => that.sneak,
65
+ })
66
+
67
+ return f as LazyFn<V>
68
+ }
46
69
  }
47
70
 
@@ -11,6 +11,11 @@ export function lazy<V>(
11
11
  return new Lazy<V>(formula, options)
12
12
  }
13
13
 
14
+ lazy.fn = <V>(
15
+ formula: () => V,
16
+ options?: Partial<SignalOptions>,
17
+ ) => lazy(formula, options).fn()
18
+
14
19
  export function derive<V>(
15
20
  formula: () => V,
16
21
  options?: Partial<SignalOptions>,
@@ -18,6 +23,11 @@ export function derive<V>(
18
23
  return new Derive<V>(formula, options)
19
24
  }
20
25
 
26
+ derive.fn = <V>(
27
+ formula: () => V,
28
+ options?: Partial<SignalOptions>,
29
+ ) => derive(formula, options).fn()
30
+
21
31
  export function signal<V>(
22
32
  value: V,
23
33
  options?: Partial<SignalOptions>,
@@ -27,5 +37,7 @@ export function signal<V>(
27
37
 
28
38
  signal.lazy = lazy
29
39
  signal.derive = derive
30
- signal.fn = <V>(value: V) => signal(value).fn()
40
+ signal.fn = <V>(value: V, options?: Partial<SignalOptions>) => (
41
+ new Signal(value, options).fn()
42
+ )
31
43
 
@@ -1,8 +1,7 @@
1
1
 
2
- import {SignalOptions} from "./types.js"
3
- import {hipster} from "./parts/hipster.js"
4
2
  import {Reactive} from "./parts/reactive.js"
5
3
  import {tracker} from "../tracker/tracker.js"
4
+ import {SignalFn, SignalOptions} from "./types.js"
6
5
  import {defaultCompare} from "./utils/default-compare.js"
7
6
 
8
7
  export class Signal<V> extends Reactive<V> {
@@ -14,10 +13,6 @@ export class Signal<V> extends Reactive<V> {
14
13
  this.#compare = options?.compare ?? defaultCompare
15
14
  }
16
15
 
17
- fn() {
18
- return hipster(this)
19
- }
20
-
21
16
  async set(v: V) {
22
17
  const isChanged = !this.#compare(this.sneak, v)
23
18
  if (isChanged) await this.publish(v)
@@ -58,5 +53,37 @@ export class Signal<V> extends Reactive<V> {
58
53
  await promise
59
54
  return v
60
55
  }
56
+
57
+ fn() {
58
+ const that = this as Signal<V>
59
+
60
+ function f(): V
61
+ function f(v: V): Promise<V>
62
+ function f(_v?: V): V | Promise<V> {
63
+ return (arguments.length === 0)
64
+ ? that.get()
65
+ : that.set(arguments[0])
66
+ }
67
+
68
+ f.signal = that
69
+ f.get = that.get.bind(that)
70
+ f.set = that.set.bind(that)
71
+ f.on = that.on
72
+ f.dispose = that.dispose.bind(that)
73
+ f.publish = that.publish.bind(that)
74
+ f.fn = that.fn.bind(that)
75
+
76
+ Object.defineProperty(f, "value", {
77
+ get: () => that.value,
78
+ set: (v) => that.value = v,
79
+ })
80
+
81
+ Object.defineProperty(f, "sneak", {
82
+ get: () => that.sneak,
83
+ set: (v) => that.sneak = v,
84
+ })
85
+
86
+ return f as SignalFn<V>
87
+ }
61
88
  }
62
89
 
@@ -1,16 +1,15 @@
1
1
 
2
2
  import {Science} from "@e280/science"
3
- import signalTest from "./tests/signal.test.js"
4
- import signalFnTest from "./tests/signal-fn.test.js"
3
+
5
4
  import effectTest from "./tests/effect.test.js"
6
- import lazyTest from "./tests/lazy.test.js"
5
+ import signalTest from "./tests/signal.test.js"
7
6
  import deriveTest from "./tests/derive.test.js"
7
+ import lazyTest from "./tests/lazy.test.js"
8
8
 
9
9
  export default Science.suite({
10
- "signal": signalTest,
11
- "signal.fn": signalFnTest,
12
10
  "effect": effectTest,
13
- "lazy": lazyTest,
11
+ "signal": signalTest,
14
12
  "derive": deriveTest,
13
+ "lazy": lazyTest,
15
14
  })
16
15
 
@@ -4,6 +4,16 @@ import {effect} from "../effect.js"
4
4
  import {derive, signal} from "../porcelain.js"
5
5
 
6
6
  export default Science.suite({
7
+ "basic": test(async() => {
8
+ const a = signal(1)
9
+ const b = signal(10)
10
+ const product = derive(() => a.get() * b.get())
11
+ expect(product.get()).is(10)
12
+
13
+ await a.set(2)
14
+ expect(product.get()).is(20)
15
+ }),
16
+
7
17
  "effect reacts to derived changes": test(async() => {
8
18
  const a = signal(1)
9
19
  const b = signal(10)
@@ -85,5 +95,17 @@ export default Science.suite({
85
95
  expect(product.value).is(20)
86
96
  expect(mole.spy.calls.length).is(1)
87
97
  }),
98
+
99
+ "hipster fns": Science.suite({
100
+ "basic": test(async() => {
101
+ const a = signal.fn(1)
102
+ const b = signal.fn(10)
103
+ const product = derive.fn(() => a() * b())
104
+ expect(product()).is(10)
105
+
106
+ await a(2)
107
+ expect(product()).is(20)
108
+ }),
109
+ }),
88
110
  })
89
111
 
@@ -45,5 +45,20 @@ export default Science.suite({
45
45
  expect(sum.value).is(8)
46
46
  expect(sum.get()).is(8)
47
47
  }),
48
+
49
+ "hipster fns": Science.suite({
50
+ "lazy values": test(async() => {
51
+ const a = signal.fn(2)
52
+ const b = signal.fn(3)
53
+ const sum = lazy.fn(() => a() + b())
54
+ expect(sum()).is(5)
55
+
56
+ await a(5)
57
+ expect(sum()).is(8)
58
+
59
+ await b(7)
60
+ expect(sum()).is(12)
61
+ }),
62
+ }),
48
63
  })
49
64
 
@@ -59,5 +59,57 @@ export default Science.suite({
59
59
  expect(runs).is(0)
60
60
  }),
61
61
  }),
62
+
63
+ "hipster fns": Science.suite({
64
+ "get and set": test(async() => {
65
+ const count = signal.fn(0)
66
+ expect(count()).is(0)
67
+
68
+ count(count() + 1)
69
+ expect(count()).is(1)
70
+ }),
71
+
72
+ "old get and set still work": test(async() => {
73
+ const count = signal.fn(0)
74
+ expect(count.get()).is(0)
75
+
76
+ count.set(count.get() + 1)
77
+ expect(count.get()).is(1)
78
+ }),
79
+
80
+ "interop": test(async() => {
81
+ const count = signal.fn(0)
82
+
83
+ count(1)
84
+ expect(count()).is(1)
85
+ expect(count.get()).is(1)
86
+ expect(count.value).is(1)
87
+
88
+ count.set(2)
89
+ expect(count()).is(2)
90
+ expect(count.get()).is(2)
91
+ expect(count.value).is(2)
92
+
93
+ count.value = 3
94
+ expect(count()).is(3)
95
+ expect(count.get()).is(3)
96
+ expect(count.value).is(3)
97
+ }),
98
+
99
+ ".on 'this' interrogation": test(async() => {
100
+ const count = signal.fn(0)
101
+ expect(count()).is(0)
102
+
103
+ let reported = count()
104
+ count.on(x => {reported = x})
105
+
106
+ count(1)
107
+ expect(reported).is(1)
108
+
109
+ count.on.clear()
110
+ count(2)
111
+ expect(reported).is(1)
112
+ }),
113
+ }),
62
114
  })
63
115
 
@@ -9,6 +9,8 @@ export type SignalOptions = {
9
9
  compare: (a: any, b: any) => boolean
10
10
  }
11
11
 
12
+ // hipster syntax types
13
+
12
14
  export type SignalFn<V> = {
13
15
  (): V
14
16
  (v: V): Promise<V>
@@ -17,3 +19,13 @@ export type SignalFn<V> = {
17
19
  signal: Signal<V>
18
20
  } & Signal<V>
19
21
 
22
+ export type LazyFn<V> = {
23
+ (): V
24
+ lazy: Lazy<V>
25
+ } & Lazy<V>
26
+
27
+ export type DeriveFn<V> = {
28
+ (): V
29
+ derive: Derive<V>
30
+ } & Derive<V>
31
+
@@ -1,7 +1,8 @@
1
- import { SignalOptions } from "./types.js";
2
1
  import { Reactive } from "./parts/reactive.js";
2
+ import { DeriveFn, SignalOptions } from "./types.js";
3
3
  export declare class Derive<V> extends Reactive<V> {
4
4
  #private;
5
5
  constructor(formula: () => V, options?: Partial<SignalOptions>);
6
6
  dispose(): void;
7
+ fn(): DeriveFn<V>;
7
8
  }
@@ -24,5 +24,23 @@ export class Derive extends Reactive {
24
24
  super.dispose();
25
25
  this.#dispose();
26
26
  }
27
+ fn() {
28
+ const that = this;
29
+ function f() {
30
+ return that.get();
31
+ }
32
+ f.derive = that;
33
+ f.get = that.get.bind(that);
34
+ f.on = that.on;
35
+ f.dispose = that.dispose.bind(that);
36
+ f.fn = that.fn.bind(that);
37
+ Object.defineProperty(f, "value", {
38
+ get: () => that.value,
39
+ });
40
+ Object.defineProperty(f, "sneak", {
41
+ get: () => that.sneak,
42
+ });
43
+ return f;
44
+ }
27
45
  }
28
46
  //# sourceMappingURL=derive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../s/signals/derive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,MAAM,OAAO,MAAU,SAAQ,QAAW;IACzC,QAAQ,CAAY;IAEpB,YAAY,OAAgB,EAAE,OAAgC;QAC7D,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;QAClD,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,IAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,OAAO,EAAE,CAAA;YACvB,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC7C,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClB,MAAM,OAAO,CAAC,GAAG,CAAC;oBACjB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;oBACzB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;iBAClB,CAAC,CAAA;YACH,CAAC;QACF,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,OAAO;QACN,KAAK,CAAC,OAAO,EAAE,CAAA;QACf,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChB,CAAC;CACD"}
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../s/signals/derive.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAE7C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,MAAM,OAAO,MAAU,SAAQ,QAAW;IACzC,QAAQ,CAAY;IAEpB,YAAY,OAAgB,EAAE,OAAgC;QAC7D,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;QAClD,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,IAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,OAAO,EAAE,CAAA;YACvB,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC7C,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClB,MAAM,OAAO,CAAC,GAAG,CAAC;oBACjB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;oBACzB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;iBAClB,CAAC,CAAA;YACH,CAAC;QACF,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,OAAO;QACN,KAAK,CAAC,OAAO,EAAE,CAAA;QACf,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChB,CAAC;IAED,EAAE;QACD,MAAM,IAAI,GAAG,IAAiB,CAAA;QAE9B,SAAS,CAAC;YACT,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QAED,CAAC,CAAC,MAAM,GAAG,IAAI,CAAA;QACf,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACd,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;SACrB,CAAC,CAAA;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;SACrB,CAAC,CAAA;QAEF,OAAO,CAAgB,CAAA;IACxB,CAAC;CACD"}
@@ -1,8 +1,9 @@
1
- import { SignalOptions } from "./types.js";
2
1
  import { Readable } from "./parts/readable.js";
2
+ import { LazyFn, SignalOptions } from "./types.js";
3
3
  export declare class Lazy<V> extends Readable<V> {
4
4
  #private;
5
5
  constructor(formula: () => V, options?: Partial<SignalOptions>);
6
6
  get(): V;
7
7
  dispose(): void;
8
+ fn(): LazyFn<V>;
8
9
  }
package/x/signals/lazy.js CHANGED
@@ -33,5 +33,22 @@ export class Lazy extends Readable {
33
33
  if (this.#effect)
34
34
  this.#effect();
35
35
  }
36
+ fn() {
37
+ const that = this;
38
+ function f() {
39
+ return that.get();
40
+ }
41
+ f.lazy = that;
42
+ f.get = that.get.bind(that);
43
+ f.dispose = that.dispose.bind(that);
44
+ f.fn = that.fn.bind(that);
45
+ Object.defineProperty(f, "value", {
46
+ get: () => that.value,
47
+ });
48
+ Object.defineProperty(f, "sneak", {
49
+ get: () => that.sneak,
50
+ });
51
+ return f;
52
+ }
36
53
  }
37
54
  //# sourceMappingURL=lazy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../s/signals/lazy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,MAAM,OAAO,IAAQ,SAAQ,QAAW;IACvC,QAAQ,CAAS;IACjB,QAAQ,CAA6B;IACrC,MAAM,GAAG,KAAK,CAAA;IACd,OAAO,CAA0B;IAEjC,YAAY,OAAgB,EAAE,OAAgC;QAC7D,KAAK,CAAC,SAAgB,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;IACnD,CAAC;IAED,GAAG;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,eAAe,CACxC,IAAI,CAAC,QAAQ,EACb,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CACxB,CAAA;YACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;YAEnB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACzB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;gBACd,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,OAAO;YACf,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;CACD"}
1
+ {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../s/signals/lazy.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAE7C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,MAAM,OAAO,IAAQ,SAAQ,QAAW;IACvC,QAAQ,CAAS;IACjB,QAAQ,CAA6B;IACrC,MAAM,GAAG,KAAK,CAAA;IACd,OAAO,CAA0B;IAEjC,YAAY,OAAgB,EAAE,OAAgC;QAC7D,KAAK,CAAC,SAAgB,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;IACnD,CAAC;IAED,GAAG;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,eAAe,CACxC,IAAI,CAAC,QAAQ,EACb,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CACxB,CAAA;YACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;YAEnB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACzB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;gBACd,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,OAAO;YACf,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,EAAE;QACD,MAAM,IAAI,GAAG,IAAe,CAAA;QAE5B,SAAS,CAAC;YACT,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QAED,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;QACb,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;SACrB,CAAC,CAAA;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;SACrB,CAAC,CAAA;QAEF,OAAO,CAAc,CAAA;IACtB,CAAC;CACD"}
@@ -3,10 +3,16 @@ import { Signal } from "./signal.js";
3
3
  import { Derive } from "./derive.js";
4
4
  import { SignalOptions } from "./types.js";
5
5
  export declare function lazy<V>(formula: () => V, options?: Partial<SignalOptions>): Lazy<V>;
6
+ export declare namespace lazy {
7
+ var fn: <V>(formula: () => V, options?: Partial<SignalOptions>) => import("./types.js").LazyFn<V>;
8
+ }
6
9
  export declare function derive<V>(formula: () => V, options?: Partial<SignalOptions>): Derive<V>;
10
+ export declare namespace derive {
11
+ var fn: <V>(formula: () => V, options?: Partial<SignalOptions>) => import("./types.js").DeriveFn<V>;
12
+ }
7
13
  export declare function signal<V>(value: V, options?: Partial<SignalOptions>): Signal<V>;
8
14
  export declare namespace signal {
9
15
  var lazy: typeof import("./porcelain.js").lazy;
10
16
  var derive: typeof import("./porcelain.js").derive;
11
- var fn: <V>(value: V) => import("./types.js").SignalFn<V>;
17
+ var fn: <V>(value: V, options?: Partial<SignalOptions>) => import("./types.js").SignalFn<V>;
12
18
  }
@@ -4,13 +4,15 @@ import { Derive } from "./derive.js";
4
4
  export function lazy(formula, options) {
5
5
  return new Lazy(formula, options);
6
6
  }
7
+ lazy.fn = (formula, options) => lazy(formula, options).fn();
7
8
  export function derive(formula, options) {
8
9
  return new Derive(formula, options);
9
10
  }
11
+ derive.fn = (formula, options) => derive(formula, options).fn();
10
12
  export function signal(value, options) {
11
13
  return new Signal(value, options);
12
14
  }
13
15
  signal.lazy = lazy;
14
16
  signal.derive = derive;
15
- signal.fn = (value) => signal(value).fn();
17
+ signal.fn = (value, options) => (new Signal(value, options).fn());
16
18
  //# sourceMappingURL=porcelain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"porcelain.js","sourceRoot":"","sources":["../../s/signals/porcelain.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAGlC,MAAM,UAAU,IAAI,CAClB,OAAgB,EAChB,OAAgC;IAEjC,OAAO,IAAI,IAAI,CAAI,OAAO,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,OAAgB,EAChB,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,OAAO,EAAE,OAAO,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,KAAQ,EACR,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,KAAK,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;AAClB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;AACtB,MAAM,CAAC,EAAE,GAAG,CAAI,KAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAA"}
1
+ {"version":3,"file":"porcelain.js","sourceRoot":"","sources":["../../s/signals/porcelain.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAGlC,MAAM,UAAU,IAAI,CAClB,OAAgB,EAChB,OAAgC;IAEjC,OAAO,IAAI,IAAI,CAAI,OAAO,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,IAAI,CAAC,EAAE,GAAG,CACT,OAAgB,EAChB,OAAgC,EAC/B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAA;AAEhC,MAAM,UAAU,MAAM,CACpB,OAAgB,EAChB,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,OAAO,EAAE,OAAO,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,CAAC,EAAE,GAAG,CACX,OAAgB,EAChB,OAAgC,EAC/B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAA;AAElC,MAAM,UAAU,MAAM,CACpB,KAAQ,EACR,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,KAAK,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;AAClB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;AACtB,MAAM,CAAC,EAAE,GAAG,CAAI,KAAQ,EAAE,OAAgC,EAAE,EAAE,CAAC,CAC9D,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAA"}
@@ -1,11 +1,11 @@
1
- import { SignalOptions } from "./types.js";
2
1
  import { Reactive } from "./parts/reactive.js";
2
+ import { SignalFn, SignalOptions } from "./types.js";
3
3
  export declare class Signal<V> extends Reactive<V> {
4
4
  #private;
5
5
  constructor(value: V, options?: Partial<SignalOptions>);
6
- fn(): import("./types.js").SignalFn<V>;
7
6
  set(v: V): Promise<V>;
8
7
  get value(): V;
9
8
  set value(v: V);
10
9
  publish(v?: V): Promise<V>;
10
+ fn(): SignalFn<V>;
11
11
  }
@@ -1,4 +1,3 @@
1
- import { hipster } from "./parts/hipster.js";
2
1
  import { Reactive } from "./parts/reactive.js";
3
2
  import { tracker } from "../tracker/tracker.js";
4
3
  import { defaultCompare } from "./utils/default-compare.js";
@@ -9,9 +8,6 @@ export class Signal extends Reactive {
9
8
  super(value);
10
9
  this.#compare = options?.compare ?? defaultCompare;
11
10
  }
12
- fn() {
13
- return hipster(this);
14
- }
15
11
  async set(v) {
16
12
  const isChanged = !this.#compare(this.sneak, v);
17
13
  if (isChanged)
@@ -46,5 +42,29 @@ export class Signal extends Reactive {
46
42
  await promise;
47
43
  return v;
48
44
  }
45
+ fn() {
46
+ const that = this;
47
+ function f(_v) {
48
+ return (arguments.length === 0)
49
+ ? that.get()
50
+ : that.set(arguments[0]);
51
+ }
52
+ f.signal = that;
53
+ f.get = that.get.bind(that);
54
+ f.set = that.set.bind(that);
55
+ f.on = that.on;
56
+ f.dispose = that.dispose.bind(that);
57
+ f.publish = that.publish.bind(that);
58
+ f.fn = that.fn.bind(that);
59
+ Object.defineProperty(f, "value", {
60
+ get: () => that.value,
61
+ set: (v) => that.value = v,
62
+ });
63
+ Object.defineProperty(f, "sneak", {
64
+ get: () => that.sneak,
65
+ set: (v) => that.sneak = v,
66
+ });
67
+ return f;
68
+ }
49
69
  }
50
70
  //# sourceMappingURL=signal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../s/signals/signal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,MAAM,OAAO,MAAU,SAAQ,QAAW;IACzC,KAAK,GAAG,KAAK,CAAA;IACb,QAAQ,CAA6B;IAErC,YAAY,KAAQ,EAAE,OAAgC;QACrD,KAAK,CAAC,KAAK,CAAC,CAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;IACnD,CAAC;IAED,EAAE;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,CAAI;QACb,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC/C,IAAI,SAAS;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpC,OAAO,CAAC,CAAA;IACT,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,CAAI;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;QAC3B,8CAA8C;QAC9C,iCAAiC;QACjC,mCAAmC;QACnC,uHAAuH;QAEvH,IAAI,IAAI,CAAC,KAAK;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAEtC,IAAI,OAAO,GAAiB,OAAO,CAAC,OAAO,EAAE,CAAA;QAE7C,IAAI,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;YACd,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;gBACrB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;aAClB,CAAC,CAAA;QACH,CAAC;gBACO,CAAC;YACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACnB,CAAC;QAED,MAAM,OAAO,CAAA;QACb,OAAO,CAAC,CAAA;IACT,CAAC;CACD"}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../s/signals/signal.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
1
  import { Science } from "@e280/science";
2
2
  declare const _default: {
3
+ effect: {
4
+ "tracks signal changes": Science.Test;
5
+ "is only called when signal actually changes": Science.Test;
6
+ debounced: Science.Test;
7
+ "can be disposed": Science.Test;
8
+ "signal set promise waits for effects": Science.Test;
9
+ "only runs on change": Science.Test;
10
+ };
3
11
  signal: {
4
12
  "get/set value": Science.Test;
5
13
  "set and publish returns value": Science.Test;
@@ -9,31 +17,30 @@ declare const _default: {
9
17
  "on only fires on change": Science.Test;
10
18
  "on circularity forbidden": Science.Test;
11
19
  };
12
- };
13
- "signal.fn": {
14
- "get and set": Science.Test;
15
- "old get and set still work": Science.Test;
16
- interop: Science.Test;
17
- ".on 'this' interrogation": Science.Test;
18
- };
19
- effect: {
20
- "tracks signal changes": Science.Test;
21
- "is only called when signal actually changes": Science.Test;
22
- debounced: Science.Test;
23
- "can be disposed": Science.Test;
24
- "signal set promise waits for effects": Science.Test;
25
- "only runs on change": Science.Test;
26
- };
27
- lazy: {
28
- "lazy values": Science.Test;
29
- "lazy is lazy": Science.Test;
30
- "lazy syntax": Science.Test;
20
+ "hipster fns": {
21
+ "get and set": Science.Test;
22
+ "old get and set still work": Science.Test;
23
+ interop: Science.Test;
24
+ ".on 'this' interrogation": Science.Test;
25
+ };
31
26
  };
32
27
  derive: {
28
+ basic: Science.Test;
33
29
  "effect reacts to derived changes": Science.Test;
34
30
  "effect doesn't overreact to derived": Science.Test;
35
31
  "derived.on": Science.Test;
36
32
  "derived.on not called if result doesn't change": Science.Test;
33
+ "hipster fns": {
34
+ basic: Science.Test;
35
+ };
36
+ };
37
+ lazy: {
38
+ "lazy values": Science.Test;
39
+ "lazy is lazy": Science.Test;
40
+ "lazy syntax": Science.Test;
41
+ "hipster fns": {
42
+ "lazy values": Science.Test;
43
+ };
37
44
  };
38
45
  };
39
46
  export default _default;
@@ -1,14 +1,12 @@
1
1
  import { Science } from "@e280/science";
2
- import signalTest from "./tests/signal.test.js";
3
- import signalFnTest from "./tests/signal-fn.test.js";
4
2
  import effectTest from "./tests/effect.test.js";
5
- import lazyTest from "./tests/lazy.test.js";
3
+ import signalTest from "./tests/signal.test.js";
6
4
  import deriveTest from "./tests/derive.test.js";
5
+ import lazyTest from "./tests/lazy.test.js";
7
6
  export default Science.suite({
8
- "signal": signalTest,
9
- "signal.fn": signalFnTest,
10
7
  "effect": effectTest,
11
- "lazy": lazyTest,
8
+ "signal": signalTest,
12
9
  "derive": deriveTest,
10
+ "lazy": lazyTest,
13
11
  });
14
12
  //# sourceMappingURL=signals.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.test.js","sourceRoot":"","sources":["../../s/signals/signals.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,YAAY,MAAM,2BAA2B,CAAA;AACpD,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,QAAQ,MAAM,sBAAsB,CAAA;AAC3C,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAE/C,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACpB,CAAC,CAAA"}
1
+ {"version":3,"file":"signals.test.js","sourceRoot":"","sources":["../../s/signals/signals.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AAErC,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,QAAQ,MAAM,sBAAsB,CAAA;AAE3C,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CAChB,CAAC,CAAA"}
@@ -1,8 +1,12 @@
1
1
  import { Science } from "@e280/science";
2
2
  declare const _default: {
3
+ basic: Science.Test;
3
4
  "effect reacts to derived changes": Science.Test;
4
5
  "effect doesn't overreact to derived": Science.Test;
5
6
  "derived.on": Science.Test;
6
7
  "derived.on not called if result doesn't change": Science.Test;
8
+ "hipster fns": {
9
+ basic: Science.Test;
10
+ };
7
11
  };
8
12
  export default _default;
@@ -2,6 +2,14 @@ import { Science, test, expect, spy } from "@e280/science";
2
2
  import { effect } from "../effect.js";
3
3
  import { derive, signal } from "../porcelain.js";
4
4
  export default Science.suite({
5
+ "basic": test(async () => {
6
+ const a = signal(1);
7
+ const b = signal(10);
8
+ const product = derive(() => a.get() * b.get());
9
+ expect(product.get()).is(10);
10
+ await a.set(2);
11
+ expect(product.get()).is(20);
12
+ }),
5
13
  "effect reacts to derived changes": test(async () => {
6
14
  const a = signal(1);
7
15
  const b = signal(10);
@@ -69,5 +77,15 @@ export default Science.suite({
69
77
  expect(product.value).is(20);
70
78
  expect(mole.spy.calls.length).is(1);
71
79
  }),
80
+ "hipster fns": Science.suite({
81
+ "basic": test(async () => {
82
+ const a = signal.fn(1);
83
+ const b = signal.fn(10);
84
+ const product = derive.fn(() => a() * b());
85
+ expect(product()).is(10);
86
+ await a(2);
87
+ expect(product()).is(20);
88
+ }),
89
+ }),
72
90
  });
73
91
  //# sourceMappingURL=derive.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"derive.test.js","sourceRoot":"","sources":["../../../s/signals/tests/derive.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derive.test.js","sourceRoot":"","sources":["../../../s/signals/tests/derive.test.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,8 @@ declare const _default: {
3
3
  "lazy values": Science.Test;
4
4
  "lazy is lazy": Science.Test;
5
5
  "lazy syntax": Science.Test;
6
+ "hipster fns": {
7
+ "lazy values": Science.Test;
8
+ };
6
9
  };
7
10
  export default _default;
@@ -35,5 +35,17 @@ export default Science.suite({
35
35
  expect(sum.value).is(8);
36
36
  expect(sum.get()).is(8);
37
37
  }),
38
+ "hipster fns": Science.suite({
39
+ "lazy values": test(async () => {
40
+ const a = signal.fn(2);
41
+ const b = signal.fn(3);
42
+ const sum = lazy.fn(() => a() + b());
43
+ expect(sum()).is(5);
44
+ await a(5);
45
+ expect(sum()).is(8);
46
+ await b(7);
47
+ expect(sum()).is(12);
48
+ }),
49
+ }),
38
50
  });
39
51
  //# sourceMappingURL=lazy.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.test.js","sourceRoot":"","sources":["../../../s/signals/tests/lazy.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAE5C,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,aAAa,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC;IAEF,cAAc,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,EAAE,CAAA;YACN,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAElB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,CAAC;IAEF,aAAa,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"lazy.test.js","sourceRoot":"","sources":["../../../s/signals/tests/lazy.test.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,11 @@ declare const _default: {
8
8
  "on only fires on change": Science.Test;
9
9
  "on circularity forbidden": Science.Test;
10
10
  };
11
+ "hipster fns": {
12
+ "get and set": Science.Test;
13
+ "old get and set still work": Science.Test;
14
+ interop: Science.Test;
15
+ ".on 'this' interrogation": Science.Test;
16
+ };
11
17
  };
12
18
  export default _default;
@@ -50,5 +50,45 @@ export default Science.suite({
50
50
  expect(runs).is(0);
51
51
  }),
52
52
  }),
53
+ "hipster fns": Science.suite({
54
+ "get and set": test(async () => {
55
+ const count = signal.fn(0);
56
+ expect(count()).is(0);
57
+ count(count() + 1);
58
+ expect(count()).is(1);
59
+ }),
60
+ "old get and set still work": test(async () => {
61
+ const count = signal.fn(0);
62
+ expect(count.get()).is(0);
63
+ count.set(count.get() + 1);
64
+ expect(count.get()).is(1);
65
+ }),
66
+ "interop": test(async () => {
67
+ const count = signal.fn(0);
68
+ count(1);
69
+ expect(count()).is(1);
70
+ expect(count.get()).is(1);
71
+ expect(count.value).is(1);
72
+ count.set(2);
73
+ expect(count()).is(2);
74
+ expect(count.get()).is(2);
75
+ expect(count.value).is(2);
76
+ count.value = 3;
77
+ expect(count()).is(3);
78
+ expect(count.get()).is(3);
79
+ expect(count.value).is(3);
80
+ }),
81
+ ".on 'this' interrogation": test(async () => {
82
+ const count = signal.fn(0);
83
+ expect(count()).is(0);
84
+ let reported = count();
85
+ count.on(x => { reported = x; });
86
+ count(1);
87
+ expect(reported).is(1);
88
+ count.on.clear();
89
+ count(2);
90
+ expect(reported).is(1);
91
+ }),
92
+ }),
53
93
  });
54
94
  //# sourceMappingURL=signal.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal.test.ts"],"names":[],"mappings":"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"}
@@ -11,3 +11,11 @@ export type SignalFn<V> = {
11
11
  (v?: V): V | Promise<V>;
12
12
  signal: Signal<V>;
13
13
  } & Signal<V>;
14
+ export type LazyFn<V> = {
15
+ (): V;
16
+ lazy: Lazy<V>;
17
+ } & Lazy<V>;
18
+ export type DeriveFn<V> = {
19
+ (): V;
20
+ derive: Derive<V>;
21
+ } & Derive<V>;
@@ -1,35 +0,0 @@
1
-
2
- import {Signal} from "../signal.js"
3
- import {SignalFn} from "../types.js"
4
-
5
- export function hipster<V>(sig: Signal<V>) {
6
- function f(): V
7
- function f(v: V): Promise<V>
8
- function f(_v?: V): V | Promise<V> {
9
- return (arguments.length === 0)
10
- ? sig.get()
11
- : sig.set(arguments[0])
12
- }
13
-
14
- f.signal = sig
15
-
16
- f.get = sig.get.bind(sig)
17
- f.set = sig.set.bind(sig)
18
- f.on = sig.on
19
- f.dispose = sig.dispose.bind(sig)
20
- f.publish = sig.publish.bind(sig)
21
- f.fn = sig.fn.bind(sig)
22
-
23
- Object.defineProperty(f, "value", {
24
- get: () => sig.value,
25
- set: (v) => sig.value = v,
26
- })
27
-
28
- Object.defineProperty(f, "sneak", {
29
- get: () => sig.sneak,
30
- set: (v) => sig.sneak = v,
31
- })
32
-
33
- return f as SignalFn<V>
34
- }
35
-
@@ -1,56 +0,0 @@
1
-
2
- import {Science, test, expect} from "@e280/science"
3
- import {signal} from "../porcelain.js"
4
-
5
- export default Science.suite({
6
- "get and set": test(async() => {
7
- const count = signal.fn(0)
8
- expect(count()).is(0)
9
-
10
- count(count() + 1)
11
- expect(count()).is(1)
12
- }),
13
-
14
- "old get and set still work": test(async() => {
15
- const count = signal.fn(0)
16
- expect(count.get()).is(0)
17
-
18
- count.set(count.get() + 1)
19
- expect(count.get()).is(1)
20
- }),
21
-
22
- "interop": test(async() => {
23
- const count = signal.fn(0)
24
-
25
- count(1)
26
- expect(count()).is(1)
27
- expect(count.get()).is(1)
28
- expect(count.value).is(1)
29
-
30
- count.set(2)
31
- expect(count()).is(2)
32
- expect(count.get()).is(2)
33
- expect(count.value).is(2)
34
-
35
- count.value = 3
36
- expect(count()).is(3)
37
- expect(count.get()).is(3)
38
- expect(count.value).is(3)
39
- }),
40
-
41
- ".on 'this' interrogation": test(async() => {
42
- const count = signal.fn(0)
43
- expect(count()).is(0)
44
-
45
- let reported = count()
46
- count.on(x => {reported = x})
47
-
48
- count(1)
49
- expect(reported).is(1)
50
-
51
- count.on.clear()
52
- count(2)
53
- expect(reported).is(1)
54
- }),
55
- })
56
-
@@ -1,3 +0,0 @@
1
- import { Signal } from "../signal.js";
2
- import { SignalFn } from "../types.js";
3
- export declare function hipster<V>(sig: Signal<V>): SignalFn<V>;
@@ -1,24 +0,0 @@
1
- export function hipster(sig) {
2
- function f(_v) {
3
- return (arguments.length === 0)
4
- ? sig.get()
5
- : sig.set(arguments[0]);
6
- }
7
- f.signal = sig;
8
- f.get = sig.get.bind(sig);
9
- f.set = sig.set.bind(sig);
10
- f.on = sig.on;
11
- f.dispose = sig.dispose.bind(sig);
12
- f.publish = sig.publish.bind(sig);
13
- f.fn = sig.fn.bind(sig);
14
- Object.defineProperty(f, "value", {
15
- get: () => sig.value,
16
- set: (v) => sig.value = v,
17
- });
18
- Object.defineProperty(f, "sneak", {
19
- get: () => sig.sneak,
20
- set: (v) => sig.sneak = v,
21
- });
22
- return f;
23
- }
24
- //# sourceMappingURL=hipster.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hipster.js","sourceRoot":"","sources":["../../../s/signals/parts/hipster.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,OAAO,CAAI,GAAc;IAGxC,SAAS,CAAC,CAAC,EAAM;QAChB,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;YACX,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC;IAED,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;IAEd,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;IACb,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;KACzB,CAAC,CAAA;IAEF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;KACzB,CAAC,CAAA;IAEF,OAAO,CAAgB,CAAA;AACxB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { Science } from "@e280/science";
2
- declare const _default: {
3
- "get and set": Science.Test;
4
- "old get and set still work": Science.Test;
5
- interop: Science.Test;
6
- ".on 'this' interrogation": Science.Test;
7
- };
8
- export default _default;
@@ -1,43 +0,0 @@
1
- import { Science, test, expect } from "@e280/science";
2
- import { signal } from "../porcelain.js";
3
- export default Science.suite({
4
- "get and set": test(async () => {
5
- const count = signal.fn(0);
6
- expect(count()).is(0);
7
- count(count() + 1);
8
- expect(count()).is(1);
9
- }),
10
- "old get and set still work": test(async () => {
11
- const count = signal.fn(0);
12
- expect(count.get()).is(0);
13
- count.set(count.get() + 1);
14
- expect(count.get()).is(1);
15
- }),
16
- "interop": test(async () => {
17
- const count = signal.fn(0);
18
- count(1);
19
- expect(count()).is(1);
20
- expect(count.get()).is(1);
21
- expect(count.value).is(1);
22
- count.set(2);
23
- expect(count()).is(2);
24
- expect(count.get()).is(2);
25
- expect(count.value).is(2);
26
- count.value = 3;
27
- expect(count()).is(3);
28
- expect(count.get()).is(3);
29
- expect(count.value).is(3);
30
- }),
31
- ".on 'this' interrogation": test(async () => {
32
- const count = signal.fn(0);
33
- expect(count()).is(0);
34
- let reported = count();
35
- count.on(x => { reported = x; });
36
- count(1);
37
- expect(reported).is(1);
38
- count.on.clear();
39
- count(2);
40
- expect(reported).is(1);
41
- }),
42
- });
43
- //# sourceMappingURL=signal-fn.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signal-fn.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal-fn.test.ts"],"names":[],"mappings":"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"}