@e280/strata 0.2.0-3 → 0.2.0-5

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 +85 -48
  2. package/package.json +2 -2
  3. package/s/signals/derive.ts +25 -1
  4. package/s/signals/lazy.ts +24 -1
  5. package/s/signals/porcelain.ts +3 -6
  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 -1
  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 +3 -7
  19. package/x/signals/porcelain.js +3 -4
  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 +10 -1
  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
@@ -1,7 +1,9 @@
1
1
 
2
2
  ![](https://i.imgur.com/h7FohWa.jpeg)
3
3
 
4
- <br/>
4
+
5
+
6
+ <br/><br/>
5
7
 
6
8
  # ⛏️ strata
7
9
 
@@ -9,14 +11,16 @@
9
11
  📦 `npm install @e280/strata`
10
12
  🧙‍♂️ probably my tenth state management library, lol
11
13
  💁 it's all about rerendering ui when data changes
12
- 🦝 used by our view library [@e280/sly](https://github.com/e280/sly)
14
+ 🦝 powers reactivity in our view library [@e280/sly](https://github.com/e280/sly)
13
15
  🧑‍💻 a project by https://e280.org/
14
16
 
15
17
  🚦 **signals** — ephemeral view-level state
16
18
  🌳 **tree** — persistent app-level state
17
19
  🪄 **tracker** — reactivity integration hub
18
20
 
19
- <br/>
21
+
22
+
23
+ <br/><br/>
20
24
 
21
25
  ## 🚦 strata signals
22
26
  > *ephemeral view-level state*
@@ -28,85 +32,71 @@ import {signal, effect} from "@e280/strata"
28
32
  ### 🚦 each signal holds a value
29
33
  - **create a signal**
30
34
  ```ts
31
- const count = signal(0)
35
+ const $count = signal(0)
32
36
  ```
37
+ - maybe you like the `$` prefix convention for signals
33
38
  - **read a signal**
34
39
  ```ts
35
- count.get() // 0
40
+ $count() // 0
36
41
  ```
37
42
  - **set a signal**
38
43
  ```ts
39
- count.set(1)
44
+ $count(1)
40
45
  ```
41
- - **set a signal, and await effect propagation**
46
+ - **set a signal, and await all downstream effects**
42
47
  ```ts
43
- await count.set(2)
48
+ await $count(2)
44
49
  ```
45
50
 
46
51
  ### 🚦 pick your poison
52
+ - **signal hipster syntax**
53
+ ```ts
54
+ $count() // get
55
+ await $count(2) // set
56
+ ```
47
57
  - **signal get/set syntax**
48
58
  ```ts
49
- count.get() // get
50
- await count.set(2) // set
59
+ $count.get() // get
60
+ await $count.set(2) // set
51
61
  ```
52
62
  - **signal .value accessor syntax**
53
63
  ```ts
54
- count.value // get
55
- count.value = 2 // set
64
+ $count.value // get
65
+ $count.value = 2 // set
56
66
  ```
57
67
  value pattern is nice for these vibes
58
68
  ```ts
59
- count.value++
60
- count.value += 1
69
+ $count.value++
70
+ $count.value += 1
61
71
  ```
62
- - **signal hipster fn syntax**
63
- - turn a signal into a hipster fn
64
- ```ts
65
- const count = signal.fn(1)
66
- ```
67
- - now you can directly invoke it
68
- ```ts
69
- count() // get
70
- await count(2) // set
71
- ```
72
- - it has all the stuff that a signal has
73
- ```ts
74
- count.get()
75
- await count.publish(5)
76
- count.on(x => console.log(x))
77
- ```
78
- - mint a fresh new signal fn
79
- ```ts
80
- const count = signal.fn(1)
81
- ```
82
72
 
83
73
  ### 🚦 effects
84
74
  - **effects run when the relevant signals change**
85
75
  ```ts
86
- effect(() => console.log(count.get()))
76
+ effect(() => console.log($count()))
87
77
  // 1
88
- // the system detects 'count' is relevant
78
+ // the system detects '$count' is relevant
89
79
 
90
- count.value++
80
+ $count.value++
91
81
  // 2
92
- // when count is changed, the effect fn is run
82
+ // when $count is changed, the effect fn is run
93
83
  ```
94
84
 
95
85
  ### 🚦 `signal.derive` and `signal.lazy` are computed signals
96
86
  - **signal.derive**
97
87
  is for combining signals
98
88
  ```ts
99
- const a = signal(1)
100
- const b = signal(10)
101
- const product = signal.derive(() => a.get() * b.get())
89
+ const $a = signal(1)
90
+ const $b = signal(10)
91
+ const $product = signal.derive(() => $a() * $b())
102
92
 
103
- product.get() // 10
93
+ $product() // 10
104
94
 
105
95
  // change a dependency,
106
96
  // and the derived signal is automatically updated
107
- await a.set(2)
97
+ await $a(2)
108
98
 
109
- product.get() // 20
99
+ $product() // 20
110
100
  ```
111
101
  - **signal.lazy**
112
102
  is for making special optimizations.
@@ -114,7 +104,50 @@ import {signal, effect} from "@e280/strata"
114
104
  because it's so lazy it only computes the value on read, and only when necessary.
115
105
  > *i repeat: lazy signals cannot trigger effects!*
116
106
 
117
- <br/>
107
+ ### 🚦 core primitive classes
108
+ - **the hipster syntax has a slight performance cost**
109
+ - **you can instead use the core primitive classes**
110
+ ```ts
111
+ const $count = new Signal(1)
112
+ ```
113
+ core signals work mostly the same
114
+ ```ts
115
+ // ✅ legal
116
+ $count.get()
117
+ $count.set(2)
118
+ ```
119
+ except you cannot directly invoke them
120
+ ```ts
121
+ // ⛔ illegal on core primitives
122
+ $count()
123
+ $count(2)
124
+ ```
125
+ - **same thing for derive/lazy**
126
+ ```ts
127
+ const $product = new Derive(() => $a() * $b())
128
+ ```
129
+ ```ts
130
+ const $product = new Lazy(() => $a() * $b())
131
+ ```
132
+ - **conversions**
133
+ - all core primitives (signal/derive/lazy) have a convert-to-hipster-fn method
134
+ ```ts
135
+ new Signal(1).fn() // SignalFn<number>, hipster-fn
136
+ ```
137
+ - and all hipster fns (signal/derive/lazy) have a `.core` property to get the primitive
138
+ ```ts
139
+ signal(0).core // Signal<number>, primitive instance
140
+ ```
141
+
142
+ ### 🚦 types
143
+ - **`Signaly<V>`** — can be `Signal<V>` or `Derive<V>` or `Lazy<V>`
144
+ - these are types for the core primitive classes
145
+ - **`SignalyFn<V>`** — can be `SignalFn<V>` or `DeriveFn<V>` or `LazyFn<V>`
146
+ - these `*Fn` types are for the hipster-syntax enabled variants
147
+
148
+
149
+
150
+ <br/><br/>
118
151
 
119
152
  ## 🌳 strata trees
120
153
  > *persistent app-level state*
@@ -249,7 +282,9 @@ import {Trunk} from "@e280/strata"
249
282
  - chronobranch can have its own branches — all their mutations advance history
250
283
  - plz pinky-swear right now, that you won't create a chronobranch under a branch under another chronobranch 💀
251
284
 
252
- <br/>
285
+
286
+
287
+ <br/><br/>
253
288
 
254
289
  ## 🪄 strata tracker
255
290
  > *reactivity integration hub*
@@ -324,9 +359,11 @@ note, the *items* that the tracker tracks can be any object, or symbol.. the tra
324
359
  }
325
360
  ```
326
361
 
327
- <br/>
328
362
 
329
- ## 🧑‍💻 an e280 project
363
+
364
+ <br/><br/>
365
+
366
+ ## 🧑‍💻 strata is by e280
330
367
  free and open source by https://e280.org/
331
368
  join us if you're cool and good at dev
332
369
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/strata",
3
- "version": "0.2.0-3",
3
+ "version": "0.2.0-5",
4
4
  "description": "state management",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@e280/science": "^0.1.2",
36
- "@types/node": "^24.3.0",
36
+ "@types/node": "^24.3.1",
37
37
  "npm-run-all": "^4.1.5",
38
38
  "typescript": "^5.9.2"
39
39
  },
@@ -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.core = 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.core = 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
 
@@ -8,26 +8,23 @@ export function lazy<V>(
8
8
  formula: () => V,
9
9
  options?: Partial<SignalOptions>,
10
10
  ) {
11
- return new Lazy<V>(formula, options)
11
+ return new Lazy<V>(formula, options).fn()
12
12
  }
13
13
 
14
14
  export function derive<V>(
15
15
  formula: () => V,
16
16
  options?: Partial<SignalOptions>,
17
17
  ) {
18
- return new Derive<V>(formula, options)
18
+ return new Derive<V>(formula, options).fn()
19
19
  }
20
20
 
21
21
  export function signal<V>(
22
22
  value: V,
23
23
  options?: Partial<SignalOptions>,
24
24
  ) {
25
- return new Signal<V>(value, options)
25
+ return new Signal<V>(value, options).fn()
26
26
  }
27
27
 
28
28
  signal.lazy = lazy
29
29
  signal.derive = derive
30
- signal.fn = <V>(value: V, options?: Partial<SignalOptions>) => (
31
- new Signal(value, options).fn()
32
- )
33
30
 
@@ -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.core = 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(1)
102
+ const b = signal(10)
103
+ const product = derive(() => 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(2)
52
+ const b = signal(3)
53
+ const sum = lazy(() => 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 syntax": Science.suite({
64
+ "get and set": test(async() => {
65
+ const count = signal(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(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(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(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
 
@@ -4,6 +4,7 @@ import {Signal} from "./signal.js"
4
4
  import {Derive} from "./derive.js"
5
5
 
6
6
  export type Signaly<V> = Signal<V> | Derive<V> | Lazy<V>
7
+ export type SignalyFn<V> = SignalFn<V> | DeriveFn<V> | LazyFn<V>
7
8
 
8
9
  export type SignalOptions = {
9
10
  compare: (a: any, b: any) => boolean
@@ -14,6 +15,16 @@ export type SignalFn<V> = {
14
15
  (v: V): Promise<V>
15
16
  (v?: V): V | Promise<V>
16
17
 
17
- signal: Signal<V>
18
+ core: Signal<V>
18
19
  } & Signal<V>
19
20
 
21
+ export type LazyFn<V> = {
22
+ (): V
23
+ core: Lazy<V>
24
+ } & Lazy<V>
25
+
26
+ export type DeriveFn<V> = {
27
+ (): V
28
+ core: Derive<V>
29
+ } & Derive<V>
30
+
@@ -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.core = 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,IAAI,GAAG,IAAI,CAAA;QACb,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.core = 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"}
@@ -1,12 +1,8 @@
1
- import { Lazy } from "./lazy.js";
2
- import { Signal } from "./signal.js";
3
- import { Derive } from "./derive.js";
4
1
  import { SignalOptions } from "./types.js";
5
- export declare function lazy<V>(formula: () => V, options?: Partial<SignalOptions>): Lazy<V>;
6
- export declare function derive<V>(formula: () => V, options?: Partial<SignalOptions>): Derive<V>;
7
- export declare function signal<V>(value: V, options?: Partial<SignalOptions>): Signal<V>;
2
+ export declare function lazy<V>(formula: () => V, options?: Partial<SignalOptions>): import("./types.js").LazyFn<V>;
3
+ export declare function derive<V>(formula: () => V, options?: Partial<SignalOptions>): import("./types.js").DeriveFn<V>;
4
+ export declare function signal<V>(value: V, options?: Partial<SignalOptions>): import("./types.js").SignalFn<V>;
8
5
  export declare namespace signal {
9
6
  var lazy: typeof import("./porcelain.js").lazy;
10
7
  var derive: typeof import("./porcelain.js").derive;
11
- var fn: <V>(value: V, options?: Partial<SignalOptions>) => import("./types.js").SignalFn<V>;
12
8
  }
@@ -2,15 +2,14 @@ import { Lazy } from "./lazy.js";
2
2
  import { Signal } from "./signal.js";
3
3
  import { Derive } from "./derive.js";
4
4
  export function lazy(formula, options) {
5
- return new Lazy(formula, options);
5
+ return new Lazy(formula, options).fn();
6
6
  }
7
7
  export function derive(formula, options) {
8
- return new Derive(formula, options);
8
+ return new Derive(formula, options).fn();
9
9
  }
10
10
  export function signal(value, options) {
11
- return new Signal(value, options);
11
+ return new Signal(value, options).fn();
12
12
  }
13
13
  signal.lazy = lazy;
14
14
  signal.derive = derive;
15
- signal.fn = (value, options) => (new Signal(value, options).fn());
16
15
  //# 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,OAAgC,EAAE,EAAE,CAAC,CAC9D,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAC/B,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,CAAC,EAAE,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,OAAgB,EAChB,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,KAAQ,EACR,OAAgC;IAEjC,OAAO,IAAI,MAAM,CAAI,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;AAClB,MAAM,CAAC,MAAM,GAAG,MAAM,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.core = 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 syntax": {
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(1);
83
+ const b = signal(10);
84
+ const product = derive(() => 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(2);
41
+ const b = signal(3);
42
+ const sum = lazy(() => 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 syntax": {
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 syntax": Science.suite({
54
+ "get and set": test(async () => {
55
+ const count = signal(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(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(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(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":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,eAAe,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC,CAAC;IAEF,+BAA+B,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC;IAEF,gBAAgB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC,CAAC;IAEF,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;QACnB,qBAAqB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YAC3B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAC;QAEF,yBAAyB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YAC3B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAC;QAEF,0BAA0B,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,KAAK,CAAC,EAAE,CAAC,KAAK,IAAG,EAAE;gBAClB,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACnB,IAAI,EAAE,CAAA;YACP,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,IAAG,EAAE;gBAChB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACnB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YAChB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAC;KACF,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"signal.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal.test.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Lazy } from "./lazy.js";
2
2
  import { Signal } from "./signal.js";
3
3
  import { Derive } from "./derive.js";
4
4
  export type Signaly<V> = Signal<V> | Derive<V> | Lazy<V>;
5
+ export type SignalyFn<V> = SignalFn<V> | DeriveFn<V> | LazyFn<V>;
5
6
  export type SignalOptions = {
6
7
  compare: (a: any, b: any) => boolean;
7
8
  };
@@ -9,5 +10,13 @@ export type SignalFn<V> = {
9
10
  (): V;
10
11
  (v: V): Promise<V>;
11
12
  (v?: V): V | Promise<V>;
12
- signal: Signal<V>;
13
+ core: Signal<V>;
13
14
  } & Signal<V>;
15
+ export type LazyFn<V> = {
16
+ (): V;
17
+ core: Lazy<V>;
18
+ } & Lazy<V>;
19
+ export type DeriveFn<V> = {
20
+ (): V;
21
+ core: Derive<V>;
22
+ } & 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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"}