ctx-core 4.1.1 → 4.3.0
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.
- package/all/be_r_rmemo_pair/index.d.ts +25 -0
- package/all/{be_rmemo_pair → be_r_rmemo_pair}/index.js +5 -5
- package/all/{be_rmemo_pair → be_r_rmemo_pair}/index.test.ts +20 -20
- package/all/be_rw_rmemo_triple/index.d.ts +26 -0
- package/all/{be_rsig_triple → be_rw_rmemo_triple}/index.js +8 -8
- package/all/{be_rsig_triple → be_rw_rmemo_triple}/index.test.ts +14 -14
- package/all/index.d.ts +2 -2
- package/all/index.js +2 -2
- package/all/rmemo/index.d.ts +17 -21
- package/all/rmemo/index.js +54 -61
- package/all/rmemo/index.test.ts +151 -155
- package/package.json +16 -16
- package/rmemo/index.d.ts +2 -2
- package/rmemo/index.js +2 -2
- package/all/be_rmemo_pair/index.d.ts +0 -25
- package/all/be_rsig_triple/index.d.ts +0 -26
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Be, be__val__new_T, be_config_T, Ctx } from '../be_/index.js'
|
|
2
|
+
import type { r_rmemo_T, rmemo_def_T } from '../rmemo/index.js'
|
|
3
|
+
export declare function be_r_rmemo_pair_<
|
|
4
|
+
val_T,
|
|
5
|
+
_r_rmemo_T extends r_rmemo_T<val_T> = r_rmemo_T<val_T>,
|
|
6
|
+
ctx_T extends Ctx = Ctx
|
|
7
|
+
>(be: Be<_r_rmemo_T, ctx_T>):be_r_rmemo_pair_T<val_T, _r_rmemo_T, ctx_T>
|
|
8
|
+
export declare function be_r_rmemo_pair_<
|
|
9
|
+
val_T,
|
|
10
|
+
_r_rmemo_T extends r_rmemo_T<val_T> = r_rmemo_T<val_T>,
|
|
11
|
+
ctx_T extends Ctx = Ctx
|
|
12
|
+
>(
|
|
13
|
+
rmemo__new:be__val__new_T<val_T>,
|
|
14
|
+
...subscriber_a_THEN_config:
|
|
15
|
+
|[...rmemo_def_T<val_T>[]]
|
|
16
|
+
|[...rmemo_def_T<val_T>[], config:be_config_T]
|
|
17
|
+
):be_r_rmemo_pair_T<val_T, _r_rmemo_T, ctx_T>
|
|
18
|
+
export type be_r_rmemo_pair_T<
|
|
19
|
+
val_T,
|
|
20
|
+
_r_rmemo_T extends r_rmemo_T<val_T> = r_rmemo_T<val_T>,
|
|
21
|
+
ctx_T extends Ctx = Ctx
|
|
22
|
+
> = [
|
|
23
|
+
Be<_r_rmemo_T, ctx_T>,
|
|
24
|
+
(ctx:ctx_T)=>val_T
|
|
25
|
+
]
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { be_ } from '../be_/index.js'
|
|
2
|
-
import {
|
|
2
|
+
import { r_rmemo_ } from '../rmemo/index.js'
|
|
3
3
|
/** @typedef {import('../be_/index.d.ts').Be} */
|
|
4
4
|
/** @typedef {import('../be_/index.d.ts').be__val__new_T} */
|
|
5
5
|
/** @typedef {import('../be_/index.d.ts').be_config_T} */
|
|
6
6
|
/** @typedef {import('../rmemo/index.d.ts').rmemo_subscriber_T} */
|
|
7
|
-
/** @typedef {import('./index.d.ts').
|
|
7
|
+
/** @typedef {import('./index.d.ts').be_r_rmemo_pair_T} */
|
|
8
8
|
/**
|
|
9
9
|
* @param {Be|be__val__new_T<unknown>}be_OR_val__new
|
|
10
10
|
* @param {rmemo_subscriber_T[]|[...rmemo_subscriber_T[], be_config_T]}subscriber_a_THEN_config
|
|
11
|
-
* @returns {
|
|
11
|
+
* @returns {be_r_rmemo_pair_T}
|
|
12
12
|
* @private
|
|
13
13
|
*/
|
|
14
|
-
export function
|
|
14
|
+
export function be_r_rmemo_pair_(
|
|
15
15
|
be_OR_val__new,
|
|
16
16
|
...subscriber_a_THEN_config
|
|
17
17
|
) {
|
|
@@ -24,7 +24,7 @@ export function be_rmemo_pair_(
|
|
|
24
24
|
be_OR_val__new.is_be
|
|
25
25
|
? be_OR_val__new
|
|
26
26
|
: be_(ctx=>
|
|
27
|
-
|
|
27
|
+
r_rmemo_(()=>be_OR_val__new(ctx), ...subscriber_a_THEN_config),
|
|
28
28
|
config)
|
|
29
29
|
return [
|
|
30
30
|
be,
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { test } from 'uvu'
|
|
2
2
|
import { equal } from 'uvu/assert'
|
|
3
3
|
import { be_ } from '../be_/index.js'
|
|
4
|
-
import {
|
|
4
|
+
import { be_rw_rmemo_triple_ } from '../be_rw_rmemo_triple/index.js'
|
|
5
5
|
import { ctx__new } from '../ctx/index.js'
|
|
6
|
-
import type {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
test('
|
|
6
|
+
import type { r_rmemo_T, rw_rmemo_T } from '../rmemo/index.js'
|
|
7
|
+
import { r_rmemo_ } from '../rmemo/index.js'
|
|
8
|
+
import { be_r_rmemo_pair_ } from './index.js'
|
|
9
|
+
test('be_r_rmemo_pair_', ()=>{
|
|
10
10
|
const [
|
|
11
11
|
,
|
|
12
12
|
base_,
|
|
13
13
|
base__set,
|
|
14
|
-
] =
|
|
14
|
+
] = be_rw_rmemo_triple_(()=>1)
|
|
15
15
|
const [
|
|
16
16
|
foobar$_,
|
|
17
17
|
foobar_,
|
|
18
|
-
] =
|
|
18
|
+
] = be_r_rmemo_pair_(ctx=>base_(ctx) + 1)
|
|
19
19
|
const ctx = ctx__new()
|
|
20
20
|
equal(foobar$_(ctx)._, 2)
|
|
21
21
|
equal(foobar_(ctx), 2)
|
|
@@ -23,19 +23,19 @@ test('be_rmemo_pair_', ()=>{
|
|
|
23
23
|
equal(foobar$_(ctx)._, 3)
|
|
24
24
|
equal(foobar_(ctx), 3)
|
|
25
25
|
})
|
|
26
|
-
test('
|
|
26
|
+
test('be_r_rmemo_pair_|+id|+is_source_|+oninit|+subscriber_a', ()=>{
|
|
27
27
|
const ctx = ctx__new()
|
|
28
28
|
let subscriber_count = 0
|
|
29
29
|
const [
|
|
30
30
|
,
|
|
31
31
|
base_,
|
|
32
32
|
base__set,
|
|
33
|
-
] =
|
|
33
|
+
] = be_rw_rmemo_triple_(()=>1,
|
|
34
34
|
{ is_source_: map_ctx=>map_ctx === ctx })
|
|
35
35
|
const [
|
|
36
36
|
foobar$_,
|
|
37
37
|
foobar_,
|
|
38
|
-
] =
|
|
38
|
+
] = be_r_rmemo_pair_(ctx=>base_(ctx) + 1,
|
|
39
39
|
()=>subscriber_count++,
|
|
40
40
|
{
|
|
41
41
|
id: 'foobar',
|
|
@@ -46,34 +46,34 @@ test('be_rmemo_pair_|+id|+is_source_|+oninit|+subscriber_a', ()=>{
|
|
|
46
46
|
equal(foobar_([ctx__new(), ctx]), 2)
|
|
47
47
|
equal(foobar$_(ctx)._, 2)
|
|
48
48
|
equal(foobar_(ctx), 2)
|
|
49
|
-
equal((ctx.get('foobar') as
|
|
49
|
+
equal((ctx.get('foobar') as r_rmemo_T<number>)._, 2)
|
|
50
50
|
equal(subscriber_count, 1)
|
|
51
51
|
base__set(ctx, 2)
|
|
52
52
|
equal(foobar$_([ctx__new(), ctx])._, 3)
|
|
53
53
|
equal(foobar_([ctx__new(), ctx]), 3)
|
|
54
54
|
equal(foobar$_(ctx)._, 3)
|
|
55
55
|
equal(foobar_(ctx), 3)
|
|
56
|
-
equal((ctx.get('foobar') as
|
|
56
|
+
equal((ctx.get('foobar') as r_rmemo_T<number>)._, 3)
|
|
57
57
|
equal(subscriber_count, 1)
|
|
58
58
|
})
|
|
59
|
-
test('
|
|
59
|
+
test('be_r_rmemo_pair_|be', ()=>{
|
|
60
60
|
const ctx = ctx__new()
|
|
61
61
|
let subscriber_count = 0
|
|
62
62
|
const [
|
|
63
63
|
,
|
|
64
64
|
base_,
|
|
65
65
|
base__set,
|
|
66
|
-
] =
|
|
66
|
+
] = be_rw_rmemo_triple_(()=>1,
|
|
67
67
|
{ is_source_: map_ctx=>map_ctx === ctx })
|
|
68
68
|
const [
|
|
69
69
|
foobar$_,
|
|
70
70
|
foobar_,
|
|
71
|
-
] =
|
|
71
|
+
] = be_r_rmemo_pair_<number, custom_r_rmemo_T>(
|
|
72
72
|
be_(_ctx=>{
|
|
73
|
-
const foobar$ =
|
|
73
|
+
const foobar$ = r_rmemo_(
|
|
74
74
|
()=>base_(ctx) + 1,
|
|
75
75
|
()=>subscriber_count++
|
|
76
|
-
) as
|
|
76
|
+
) as custom_r_rmemo_T
|
|
77
77
|
if (Array.isArray(_ctx)) equal(_ctx[1], ctx)
|
|
78
78
|
else equal(_ctx, ctx)
|
|
79
79
|
foobar$.custom = 'custom-val'
|
|
@@ -87,7 +87,7 @@ test('be_rmemo_pair_|be', ()=>{
|
|
|
87
87
|
equal(foobar_([ctx__new(), ctx]), 2)
|
|
88
88
|
equal(foobar$_(ctx)._, 2)
|
|
89
89
|
equal(foobar_(ctx), 2)
|
|
90
|
-
equal((ctx.get('foobar') as
|
|
90
|
+
equal((ctx.get('foobar') as r_rmemo_T<number>)._, 2)
|
|
91
91
|
equal(foobar$_(ctx).custom, 'custom-val')
|
|
92
92
|
equal(subscriber_count, 1)
|
|
93
93
|
base__set(ctx, 2)
|
|
@@ -95,9 +95,9 @@ test('be_rmemo_pair_|be', ()=>{
|
|
|
95
95
|
equal(foobar_([ctx__new(), ctx]), 3)
|
|
96
96
|
equal(foobar$_(ctx)._, 3)
|
|
97
97
|
equal(foobar_(ctx), 3)
|
|
98
|
-
equal((ctx.get('foobar') as
|
|
98
|
+
equal((ctx.get('foobar') as r_rmemo_T<number>)._, 3)
|
|
99
99
|
equal(foobar$_(ctx).custom, 'custom-val')
|
|
100
100
|
equal(subscriber_count, 1)
|
|
101
101
|
})
|
|
102
102
|
test.run()
|
|
103
|
-
type
|
|
103
|
+
type custom_r_rmemo_T = rw_rmemo_T<number>&{ custom:string }
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Be, be__val__new_T, be_config_T, Ctx } from '../be_/index.js'
|
|
2
|
+
import type { rw_rmemo_T, rmemo_def_T } from '../rmemo/index.js'
|
|
3
|
+
export declare function be_rw_rmemo_triple_<
|
|
4
|
+
val_T,
|
|
5
|
+
_rw_rmemo_T extends rw_rmemo_T<val_T> = rw_rmemo_T<val_T>,
|
|
6
|
+
ctx_T extends Ctx = Ctx
|
|
7
|
+
>(be: Be<_rw_rmemo_T, ctx_T>):be_rw_rmemo_triple_T<val_T, _rw_rmemo_T, ctx_T>
|
|
8
|
+
export declare function be_rw_rmemo_triple_<
|
|
9
|
+
val_T,
|
|
10
|
+
_rw_rmemo_T extends rw_rmemo_T<val_T> = rw_rmemo_T<val_T>,
|
|
11
|
+
ctx_T extends Ctx = Ctx
|
|
12
|
+
>(
|
|
13
|
+
rmemo__new:be__val__new_T<val_T>,
|
|
14
|
+
...subscriber_a_THEN_config:
|
|
15
|
+
|[...rmemo_def_T<val_T>[]]
|
|
16
|
+
|[...rmemo_def_T<val_T>[], config:be_config_T]
|
|
17
|
+
):be_rw_rmemo_triple_T<val_T, _rw_rmemo_T, ctx_T>
|
|
18
|
+
export type be_rw_rmemo_triple_T<
|
|
19
|
+
val_T,
|
|
20
|
+
_rw_rmemo_T extends rw_rmemo_T<val_T> = rw_rmemo_T<val_T>,
|
|
21
|
+
ctx_T extends Ctx = Ctx
|
|
22
|
+
> = [
|
|
23
|
+
Be<_rw_rmemo_T>,
|
|
24
|
+
(ctx:ctx_T)=>val_T,
|
|
25
|
+
(ctx:ctx_T, val:val_T)=>void
|
|
26
|
+
]
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { be_ } from '../be_/index.js'
|
|
2
|
-
import {
|
|
2
|
+
import { rw_rmemo_ } from '../rmemo/index.js'
|
|
3
3
|
/** @typedef {import('../be_/index.d.ts').Be} */
|
|
4
4
|
/** @typedef {import('../be_/index.d.ts').be__val__new_T} */
|
|
5
5
|
/** @typedef {import('../be_/index.d.ts').be_config_T} */
|
|
6
|
-
/** @typedef {import('../rmemo/index.d.ts').
|
|
6
|
+
/** @typedef {import('../rmemo/index.d.ts').rw_rmemo_T} */
|
|
7
7
|
/** @typedef {import('../rmemo/index.d.ts').rmemo_subscriber_T} */
|
|
8
|
-
/** @typedef {import('./index.d.ts').
|
|
8
|
+
/** @typedef {import('./index.d.ts').be_rw_rmemo_triple_T} */
|
|
9
9
|
/**
|
|
10
|
-
* @param {Be<
|
|
10
|
+
* @param {Be<rw_rmemo_T>|be__val__new_T<unknown>}be_OR_val__new
|
|
11
11
|
* @param {rmemo_subscriber_T[]|[...rmemo_subscriber_T[], be_config_T]}subscriber_a_THEN_config
|
|
12
|
-
* @returns {
|
|
12
|
+
* @returns {be_rw_rmemo_triple_T}
|
|
13
13
|
* @private
|
|
14
14
|
*/
|
|
15
|
-
export function
|
|
15
|
+
export function be_rw_rmemo_triple_(
|
|
16
16
|
be_OR_val__new,
|
|
17
17
|
...subscriber_a_THEN_config
|
|
18
18
|
) {
|
|
@@ -20,11 +20,11 @@ export function be_rsig_triple_(
|
|
|
20
20
|
typeof subscriber_a_THEN_config[subscriber_a_THEN_config.length - 1] === 'object'
|
|
21
21
|
? subscriber_a_THEN_config.pop()
|
|
22
22
|
: undefined
|
|
23
|
-
/** @type {Be<
|
|
23
|
+
/** @type {Be<rw_rmemo_T>} */
|
|
24
24
|
let be =
|
|
25
25
|
be_OR_val__new.is_be
|
|
26
26
|
? be_OR_val__new
|
|
27
|
-
: be_(ctx=>
|
|
27
|
+
: be_(ctx=>rw_rmemo_(be_OR_val__new(ctx), ...subscriber_a_THEN_config),
|
|
28
28
|
config)
|
|
29
29
|
return [
|
|
30
30
|
be,
|
|
@@ -2,14 +2,14 @@ import { test } from 'uvu'
|
|
|
2
2
|
import { equal } from 'uvu/assert'
|
|
3
3
|
import { be_ } from '../be_/index.js'
|
|
4
4
|
import { ctx__new } from '../ctx/index.js'
|
|
5
|
-
import { type
|
|
6
|
-
import {
|
|
7
|
-
test('
|
|
5
|
+
import { type rw_rmemo_T, rw_rmemo_ } from '../rmemo/index.js'
|
|
6
|
+
import { be_rw_rmemo_triple_ } from './index.js'
|
|
7
|
+
test('be_rw_rmemo_triple_', ()=>{
|
|
8
8
|
const [
|
|
9
9
|
foobar$_,
|
|
10
10
|
foobar_,
|
|
11
11
|
foobar__set,
|
|
12
|
-
] =
|
|
12
|
+
] = be_rw_rmemo_triple_(()=>1)
|
|
13
13
|
const ctx = ctx__new()
|
|
14
14
|
equal(foobar$_(ctx)._, 1)
|
|
15
15
|
equal(foobar_(ctx), 1)
|
|
@@ -17,14 +17,14 @@ test('be_rsig_triple_', ()=>{
|
|
|
17
17
|
equal(foobar$_(ctx)._, 2)
|
|
18
18
|
equal(foobar_(ctx), 2)
|
|
19
19
|
})
|
|
20
|
-
test('
|
|
20
|
+
test('be_rw_rmemo_triple_|+id|+is_source_', ()=>{
|
|
21
21
|
const ctx = ctx__new()
|
|
22
22
|
let subscriber_count = 0
|
|
23
23
|
const [
|
|
24
24
|
foobar$_,
|
|
25
25
|
foobar_,
|
|
26
26
|
foobar__set,
|
|
27
|
-
] =
|
|
27
|
+
] = be_rw_rmemo_triple_(
|
|
28
28
|
()=>1,
|
|
29
29
|
()=>subscriber_count++,
|
|
30
30
|
{ id: 'foobar', is_source_: map_ctx=>map_ctx === ctx },)
|
|
@@ -34,26 +34,26 @@ test('be_rsig_triple_|+id|+is_source_', ()=>{
|
|
|
34
34
|
equal(foobar$_(ctx)._, 1)
|
|
35
35
|
equal(foobar_(ctx), 1)
|
|
36
36
|
equal(subscriber_count, 1)
|
|
37
|
-
equal((ctx.get('foobar') as
|
|
37
|
+
equal((ctx.get('foobar') as rw_rmemo_T<number>)._, 1)
|
|
38
38
|
foobar__set([ctx__new(), ctx], 2)
|
|
39
39
|
equal(foobar$_([ctx__new(), ctx])._, 2)
|
|
40
40
|
equal(foobar_([ctx__new(), ctx]), 2)
|
|
41
41
|
equal(foobar$_(ctx)._, 2)
|
|
42
42
|
equal(foobar_(ctx), 2)
|
|
43
|
-
equal((ctx.get('foobar') as
|
|
43
|
+
equal((ctx.get('foobar') as rw_rmemo_T<number>)._, 2)
|
|
44
44
|
equal(subscriber_count, 1)
|
|
45
45
|
})
|
|
46
|
-
test('
|
|
46
|
+
test('be_rw_rmemo_triple_|+be', ()=>{
|
|
47
47
|
const ctx = ctx__new()
|
|
48
48
|
let subscriber_count = 0
|
|
49
49
|
const [
|
|
50
50
|
foobar$_,
|
|
51
51
|
foobar_,
|
|
52
52
|
foobar__set,
|
|
53
|
-
] =
|
|
53
|
+
] = be_rw_rmemo_triple_<number, custom_rw_rmemo_T>(
|
|
54
54
|
be_(()=>{
|
|
55
55
|
const foobar$ =
|
|
56
|
-
|
|
56
|
+
rw_rmemo_(1, ()=>subscriber_count++) as custom_rw_rmemo_T
|
|
57
57
|
foobar$.custom = 'custom-val'
|
|
58
58
|
return foobar$
|
|
59
59
|
}, { id: 'foobar', is_source_: map_ctx=>map_ctx === ctx }))
|
|
@@ -63,16 +63,16 @@ test('be_rsig_triple_|+be', ()=>{
|
|
|
63
63
|
equal(foobar$_(ctx)._, 1)
|
|
64
64
|
equal(foobar_(ctx), 1)
|
|
65
65
|
equal(subscriber_count, 1)
|
|
66
|
-
equal((ctx.get('foobar') as
|
|
66
|
+
equal((ctx.get('foobar') as rw_rmemo_T<number>)._, 1)
|
|
67
67
|
equal(foobar$_(ctx).custom, 'custom-val')
|
|
68
68
|
foobar__set([ctx__new(), ctx], 2)
|
|
69
69
|
equal(foobar$_([ctx__new(), ctx])._, 2)
|
|
70
70
|
equal(foobar_([ctx__new(), ctx]), 2)
|
|
71
71
|
equal(foobar$_(ctx)._, 2)
|
|
72
72
|
equal(foobar_(ctx), 2)
|
|
73
|
-
equal((ctx.get('foobar') as
|
|
73
|
+
equal((ctx.get('foobar') as rw_rmemo_T<number>)._, 2)
|
|
74
74
|
equal(foobar$_(ctx).custom, 'custom-val')
|
|
75
75
|
equal(subscriber_count, 1)
|
|
76
76
|
})
|
|
77
77
|
test.run()
|
|
78
|
-
type
|
|
78
|
+
type custom_rw_rmemo_T = rw_rmemo_T<number>&{ custom:string }
|
package/all/index.d.ts
CHANGED
|
@@ -44,8 +44,8 @@ export * from './base64__buffer/index.js'
|
|
|
44
44
|
export * from './batch_queue/index.js'
|
|
45
45
|
export * from './be/index.js'
|
|
46
46
|
export * from './be_/index.js'
|
|
47
|
-
export * from './
|
|
48
|
-
export * from './
|
|
47
|
+
export * from './be_r_rmemo_pair/index.js'
|
|
48
|
+
export * from './be_rw_rmemo_triple/index.js'
|
|
49
49
|
export * from './binary_sort_rank/index.js'
|
|
50
50
|
export * from './bind_apply/index.js'
|
|
51
51
|
export * from './bind_call/index.js'
|
package/all/index.js
CHANGED
|
@@ -44,8 +44,8 @@ export * from './base64__buffer/index.js'
|
|
|
44
44
|
export * from './batch_queue/index.js'
|
|
45
45
|
export * from './be/index.js'
|
|
46
46
|
export * from './be_/index.js'
|
|
47
|
-
export * from './
|
|
48
|
-
export * from './
|
|
47
|
+
export * from './be_r_rmemo_pair/index.js'
|
|
48
|
+
export * from './be_rw_rmemo_triple/index.js'
|
|
49
49
|
export * from './binary_sort_rank/index.js'
|
|
50
50
|
export * from './bind_apply/index.js'
|
|
51
51
|
export * from './bind_call/index.js'
|
package/all/rmemo/index.d.ts
CHANGED
|
@@ -1,31 +1,27 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function r_rmemo_<val_T>(
|
|
2
2
|
def:rmemo_def_T<val_T>,
|
|
3
3
|
...subscriber_a:rmemo_subscriber_T<val_T>[]
|
|
4
|
-
):
|
|
5
|
-
export declare function
|
|
4
|
+
):r_rmemo_T<val_T>
|
|
5
|
+
export declare function rw_rmemo_<val_T>(
|
|
6
6
|
init_val:val_T,
|
|
7
7
|
...subscriber_a:rmemo_subscriber_T<val_T>[]
|
|
8
|
-
):
|
|
9
|
-
export type
|
|
10
|
-
export type
|
|
11
|
-
export type
|
|
12
|
-
export type rsig_T<val_T> = readwrite_rmemo_T<val_T>
|
|
13
|
-
export type rmemo_val_T<readwrite_rmemo_T> = readwrite_rmemo_T extends {
|
|
8
|
+
):rw_rmemo_T<val_T>
|
|
9
|
+
export type r_rmemo_T<val_T> = (()=>val_T)&r_rmemo_o_T<val_T>
|
|
10
|
+
export type rw_rmemo_T<val_T> = ((val?:val_T)=>val_T)&rw_r_rmemo_o_T<val_T>
|
|
11
|
+
export type rmemo_val_T<rw_rmemo_T> = rw_rmemo_T extends {
|
|
14
12
|
(): infer val_T
|
|
15
13
|
}
|
|
16
14
|
? val_T
|
|
17
15
|
: unknown
|
|
18
|
-
export type rmemo_def_T<val_T> = (
|
|
19
|
-
export type rmemo_subscriber_T<val_T> = (
|
|
20
|
-
export type
|
|
21
|
-
_:val_T
|
|
22
|
-
go():unknown
|
|
23
|
-
onset(val:val_T):unknown
|
|
24
|
-
refresh():val_T
|
|
25
|
-
}&read_rmemo_o_T<val_T>
|
|
26
|
-
export type read_rmemo_o_T<val_T> = {
|
|
16
|
+
export type rmemo_def_T<val_T> = (rw_rmemo:rw_rmemo_T<val_T>)=>val_T
|
|
17
|
+
export type rmemo_subscriber_T<val_T> = (rw_rmemo:rw_rmemo_T<val_T>)=>unknown
|
|
18
|
+
export type r_rmemo_o_T<val_T> = {
|
|
27
19
|
readonly _:val_T
|
|
20
|
+
val:val_T
|
|
21
|
+
go():unknown
|
|
22
|
+
}
|
|
23
|
+
export type rw_r_rmemo_o_T<val_T> = {
|
|
24
|
+
_:val_T
|
|
25
|
+
val:val_T
|
|
28
26
|
go():unknown
|
|
29
|
-
|
|
30
|
-
refresh():val_T
|
|
31
|
-
}
|
|
27
|
+
}
|
package/all/rmemo/index.js
CHANGED
|
@@ -1,85 +1,78 @@
|
|
|
1
|
-
/** @typedef {import('./index.d.ts').
|
|
1
|
+
/** @typedef {import('./index.d.ts').rmemo_def_T} */
|
|
2
|
+
/** @typedef {import('./index.d.ts').r_rmemo_T} */
|
|
2
3
|
/** @typedef {import('./index.d.ts').rmemo_subscriber_T} */
|
|
3
|
-
/** @type {WeakRef<
|
|
4
|
-
let
|
|
4
|
+
/** @type {WeakRef<r_rmemo_T>} */
|
|
5
|
+
let cur_r
|
|
5
6
|
/** @type {(()=>unknown)[]} */
|
|
6
7
|
let queue = []
|
|
7
8
|
/**
|
|
8
|
-
* @param {
|
|
9
|
+
* @param {rmemo_def_T}rmemo_def
|
|
9
10
|
* @param {rmemo_subscriber_T<unknown>[]}subscriber_a
|
|
10
|
-
* @returns {
|
|
11
|
+
* @returns {r_rmemo_T}
|
|
11
12
|
* @private
|
|
12
13
|
*/
|
|
13
|
-
export function
|
|
14
|
-
let
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
rmemo._r = _r
|
|
21
|
-
rmemo._rS = new Set
|
|
22
|
-
rmemo.go = ()=>(rmemo(), rmemo)
|
|
23
|
-
rmemo.onset = ()=>0
|
|
24
|
-
Object.defineProperty(rmemo, '_', {
|
|
25
|
-
get() {
|
|
26
|
-
if (!_a.length) {
|
|
27
|
-
let prev_ref = cur_ref
|
|
28
|
-
cur_ref = _r
|
|
14
|
+
export function r_rmemo_(rmemo_def, ...subscriber_a) {
|
|
15
|
+
let init
|
|
16
|
+
let r_rmemo = {
|
|
17
|
+
get _() {
|
|
18
|
+
if (!('val' in r_rmemo)) {
|
|
19
|
+
let prev_r = cur_r
|
|
20
|
+
cur_r = r_rmemo._r
|
|
29
21
|
try {
|
|
30
|
-
|
|
22
|
+
init()
|
|
31
23
|
} finally {
|
|
32
|
-
|
|
24
|
+
cur_r = prev_r
|
|
33
25
|
}
|
|
34
26
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
rmemo._rS.add(cur_ref)
|
|
27
|
+
if (cur_r) {
|
|
28
|
+
cur_r.l = cur_r.l < r_rmemo._r.l + 1 ? r_rmemo._r.l + 1 : cur_r.l
|
|
29
|
+
r_rmemo._rs.add(cur_r)
|
|
39
30
|
}
|
|
40
|
-
return
|
|
31
|
+
return r_rmemo.val
|
|
41
32
|
},
|
|
42
|
-
set(val) {
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
for (let ref; ref = queue.shift();) {
|
|
63
|
-
if (queue.some(_ref=>ref.l > _ref.l)) {
|
|
64
|
-
queue.push(ref)
|
|
65
|
-
} else {
|
|
66
|
-
(ref.deref() || rmemo._rS.delete)(ref)
|
|
33
|
+
set _(val) {
|
|
34
|
+
if (val !== r_rmemo.val) {
|
|
35
|
+
r_rmemo.val = val
|
|
36
|
+
r_rmemo._s?.(val)
|
|
37
|
+
let run_queue = !queue[0]
|
|
38
|
+
for (let r of r_rmemo._rs) {
|
|
39
|
+
if (!~queue.indexOf(r)) queue.push(r)
|
|
40
|
+
}
|
|
41
|
+
if (!r_rmemo._sa) {
|
|
42
|
+
r_rmemo._sa = subscriber_a.map(subscriber=>
|
|
43
|
+
r_rmemo_(()=>subscriber(r_rmemo)).go())
|
|
44
|
+
}
|
|
45
|
+
if (run_queue) {
|
|
46
|
+
// eslint-disable-next-line no-cond-assign
|
|
47
|
+
for (let r; r = queue.shift();) {
|
|
48
|
+
if (queue.some(queue_r=>r.l > queue_r.l)) {
|
|
49
|
+
queue.push(r)
|
|
50
|
+
} else {
|
|
51
|
+
(r.deref() || r_rmemo._rs.delete)(r)
|
|
52
|
+
}
|
|
67
53
|
}
|
|
68
54
|
}
|
|
69
55
|
}
|
|
70
|
-
}
|
|
56
|
+
},
|
|
57
|
+
go: ()=>(r_rmemo._, r_rmemo),
|
|
58
|
+
get: ()=>r_rmemo._,
|
|
59
|
+
set: val=>r_rmemo._ = val,
|
|
60
|
+
_rs: new Set,
|
|
71
61
|
}
|
|
72
|
-
|
|
62
|
+
init = ()=>r_rmemo._ = rmemo_def(r_rmemo)
|
|
63
|
+
r_rmemo._r = new WeakRef(init)
|
|
64
|
+
r_rmemo._r.l = 0
|
|
65
|
+
return r_rmemo
|
|
73
66
|
}
|
|
74
67
|
/**
|
|
75
68
|
* @param {unknown}init_val
|
|
76
69
|
* @param {rmemo_subscriber_T[]}subscriber_a
|
|
77
|
-
* @returns {
|
|
70
|
+
* @returns {r_rmemo_T}
|
|
78
71
|
* @private
|
|
79
72
|
*/
|
|
80
|
-
export function
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return
|
|
73
|
+
export function rw_rmemo_(init_val, ...subscriber_a) {
|
|
74
|
+
let rw_rmemo = r_rmemo_(_rw_rmemo=>_rw_rmemo._v, ...subscriber_a)
|
|
75
|
+
rw_rmemo._s = val=>rw_rmemo._v = val
|
|
76
|
+
rw_rmemo._v = init_val
|
|
77
|
+
return rw_rmemo
|
|
85
78
|
}
|
package/all/rmemo/index.test.ts
CHANGED
|
@@ -2,84 +2,84 @@ import { deepStrictEqual } from 'node:assert'
|
|
|
2
2
|
import { test } from 'uvu'
|
|
3
3
|
import { equal } from 'uvu/assert'
|
|
4
4
|
import { sleep } from '../sleep/index.js'
|
|
5
|
-
import {
|
|
6
|
-
test('
|
|
5
|
+
import { r_rmemo_, type r_rmemo_T, rw_rmemo_ } from './index.js'
|
|
6
|
+
test('r_rmemo_|static value', ()=>{
|
|
7
7
|
let count = 0
|
|
8
|
-
|
|
8
|
+
const r_rmemo = r_rmemo_(()=>{
|
|
9
9
|
count++
|
|
10
10
|
return 'rmemo-value'
|
|
11
11
|
})
|
|
12
12
|
equal(count, 0)
|
|
13
|
-
equal(
|
|
13
|
+
equal(r_rmemo._, 'rmemo-value')
|
|
14
14
|
equal(count, 1)
|
|
15
|
-
equal(
|
|
15
|
+
equal(r_rmemo._, 'rmemo-value')
|
|
16
16
|
equal(count, 1)
|
|
17
17
|
})
|
|
18
|
-
test('
|
|
19
|
-
|
|
20
|
-
equal(
|
|
21
|
-
|
|
22
|
-
equal(
|
|
18
|
+
test('rw_rmemo_', ()=>{
|
|
19
|
+
const rw_rmemo = rw_rmemo_('val0')
|
|
20
|
+
equal(rw_rmemo._, 'val0')
|
|
21
|
+
rw_rmemo._ = 'val1'
|
|
22
|
+
equal(rw_rmemo._, 'val1')
|
|
23
23
|
})
|
|
24
|
-
test('
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
`${_rmemo$.custom}-${
|
|
28
|
-
|
|
29
|
-
equal(
|
|
30
|
-
|
|
31
|
-
equal(
|
|
32
|
-
|
|
33
|
-
equal(
|
|
24
|
+
test('r_rmemo_|def function|rmemo$ argument', ()=>{
|
|
25
|
+
const rw_rmemo = rw_rmemo_('val0')
|
|
26
|
+
const r_rmemo:r_rmemo_T<string>&{custom?:string} = r_rmemo_<string>((_rmemo$:r_rmemo_T<string>&{custom?:string})=>
|
|
27
|
+
`${_rmemo$.custom}-${rw_rmemo._}`)
|
|
28
|
+
r_rmemo.custom = 'custom_val0'
|
|
29
|
+
equal(r_rmemo._, 'custom_val0-val0')
|
|
30
|
+
r_rmemo.custom = 'custom_val1'
|
|
31
|
+
equal(r_rmemo._, 'custom_val0-val0')
|
|
32
|
+
rw_rmemo._ = 'val1'
|
|
33
|
+
equal(r_rmemo._, 'custom_val1-val1')
|
|
34
34
|
})
|
|
35
|
-
test('
|
|
35
|
+
test('rw_rmemo_|async subsubscriber|case 1', async ()=>{
|
|
36
36
|
let resolve:(user:{ id:string })=>void
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
const user0 = { id: 'id-0' }
|
|
38
|
+
const user1 = { id: 'id-1' }
|
|
39
|
+
const id$ = rw_rmemo_('id-0')
|
|
40
40
|
let count = 0
|
|
41
|
-
|
|
41
|
+
const user$ = rw_rmemo_<{ id:string }|null>(
|
|
42
42
|
null,
|
|
43
43
|
async (_user$)=>{
|
|
44
44
|
count++
|
|
45
|
-
id
|
|
46
|
-
|
|
47
|
-
_user
|
|
45
|
+
id$._
|
|
46
|
+
const user:{ id:string } = await new Promise(_resolve=>resolve = _resolve)
|
|
47
|
+
_user$._ = (user)
|
|
48
48
|
})
|
|
49
49
|
equal(count, 0)
|
|
50
|
-
equal(user
|
|
50
|
+
equal(user$._, null)
|
|
51
51
|
equal(count, 1)
|
|
52
52
|
resolve!(user0)
|
|
53
53
|
await sleep(0)
|
|
54
54
|
equal(count, 1)
|
|
55
|
-
equal(user
|
|
55
|
+
equal(user$._, user0)
|
|
56
56
|
equal(count, 1)
|
|
57
|
-
id
|
|
57
|
+
id$._ = 'id-1'
|
|
58
58
|
equal(count, 2)
|
|
59
|
-
equal(user
|
|
59
|
+
equal(user$._, user0)
|
|
60
60
|
resolve!(user1)
|
|
61
61
|
await sleep(0)
|
|
62
62
|
equal(count, 2)
|
|
63
63
|
})
|
|
64
|
-
test('
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
test('rw_rmemo_|async subsubscriber|case 2', async ()=>{
|
|
65
|
+
const a$ = rw_rmemo_(1)
|
|
66
|
+
const b$ = rw_rmemo_(2)
|
|
67
|
+
const sleepCycles = 5
|
|
68
|
+
const taskArgumentsCalls:number[][] = []
|
|
69
|
+
const sum$ = rw_rmemo_<null|number>(null,
|
|
70
70
|
async sum$=>{
|
|
71
|
-
taskArgumentsCalls.push([a
|
|
71
|
+
taskArgumentsCalls.push([a$._, b$._])
|
|
72
72
|
for (let i = 0; i < sleepCycles; i++) {
|
|
73
73
|
await Promise.resolve()
|
|
74
74
|
}
|
|
75
|
-
sum
|
|
75
|
+
sum$._ = a$._ + b$._
|
|
76
76
|
})
|
|
77
|
-
equal(sum
|
|
77
|
+
equal(sum$._, null)
|
|
78
78
|
deepStrictEqual(taskArgumentsCalls, [[1, 2]])
|
|
79
|
-
a
|
|
80
|
-
b
|
|
79
|
+
a$._ = 10
|
|
80
|
+
b$._ = 20
|
|
81
81
|
for (let i = 0; i < sleepCycles; i++) {
|
|
82
|
-
equal(sum
|
|
82
|
+
equal(sum$._, null)
|
|
83
83
|
await Promise.resolve()
|
|
84
84
|
deepStrictEqual(taskArgumentsCalls, [
|
|
85
85
|
[1, 2],
|
|
@@ -87,107 +87,103 @@ test('rsig_|async subsubscriber|case 2', async ()=>{
|
|
|
87
87
|
[10, 20]
|
|
88
88
|
])
|
|
89
89
|
}
|
|
90
|
-
equal(sum
|
|
90
|
+
equal(sum$._, 30)
|
|
91
91
|
deepStrictEqual(taskArgumentsCalls, [
|
|
92
92
|
[1, 2],
|
|
93
93
|
[10, 2],
|
|
94
94
|
[10, 20]
|
|
95
95
|
])
|
|
96
96
|
})
|
|
97
|
-
test('
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
equal(dep4
|
|
105
|
-
equal(dep3
|
|
106
|
-
equal(dep2
|
|
107
|
-
equal(dep1
|
|
108
|
-
equal(dep0
|
|
109
|
-
equal(base
|
|
110
|
-
base
|
|
111
|
-
equal(base
|
|
112
|
-
equal(dep0
|
|
113
|
-
equal(dep1
|
|
114
|
-
equal(dep2
|
|
115
|
-
equal(dep3
|
|
116
|
-
equal(dep4
|
|
97
|
+
test('r_rmemo_+rw_rmemo_|simple graph', ()=>{
|
|
98
|
+
const base$ = rw_rmemo_('base0')
|
|
99
|
+
const dep0$ = r_rmemo_(()=>base$._ + '-dep0')
|
|
100
|
+
const dep1$ = r_rmemo_(()=>dep0$._ + '-dep1')
|
|
101
|
+
const dep2$ = r_rmemo_(()=>dep1$._ + '-dep2')
|
|
102
|
+
const dep3$ = r_rmemo_(()=>dep2$._ + '-dep3')
|
|
103
|
+
const dep4$ = r_rmemo_(()=>dep3$._ + '-dep4')
|
|
104
|
+
equal(dep4$._, 'base0-dep0-dep1-dep2-dep3-dep4')
|
|
105
|
+
equal(dep3$._, 'base0-dep0-dep1-dep2-dep3')
|
|
106
|
+
equal(dep2$._, 'base0-dep0-dep1-dep2')
|
|
107
|
+
equal(dep1$._, 'base0-dep0-dep1')
|
|
108
|
+
equal(dep0$._, 'base0-dep0')
|
|
109
|
+
equal(base$._, 'base0')
|
|
110
|
+
base$._ = 'base1'
|
|
111
|
+
equal(base$._, 'base1')
|
|
112
|
+
equal(dep0$._, 'base1-dep0')
|
|
113
|
+
equal(dep1$._, 'base1-dep0-dep1')
|
|
114
|
+
equal(dep2$._, 'base1-dep0-dep1-dep2')
|
|
115
|
+
equal(dep3$._, 'base1-dep0-dep1-dep2-dep3')
|
|
116
|
+
equal(dep4$._, 'base1-dep0-dep1-dep2-dep3-dep4')
|
|
117
117
|
})
|
|
118
118
|
test('prevents diamond dependency problem 1', ()=>{
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
const store$ = rw_rmemo_(0)
|
|
120
|
+
const values:string[] = []
|
|
121
|
+
const a$ = r_rmemo_(()=>`a${store$._}`)
|
|
122
|
+
const b$ = r_rmemo_(()=>a$._.replace('a', 'b'))
|
|
123
|
+
const c$ = r_rmemo_(()=>a$._.replace('a', 'c'))
|
|
124
|
+
const d$ = r_rmemo_(()=>a$._.replace('a', 'd'))
|
|
125
|
+
r_rmemo_(()=>`${b$._}${c$._}${d$._}`,
|
|
126
126
|
combined$=>
|
|
127
|
-
values.push(combined
|
|
127
|
+
values.push(combined$._)
|
|
128
128
|
).go()
|
|
129
129
|
deepStrictEqual(values, ['b0c0d0'])
|
|
130
|
-
store
|
|
131
|
-
store
|
|
130
|
+
store$._ = 1
|
|
131
|
+
store$._ = 2
|
|
132
132
|
deepStrictEqual(values, ['b0c0d0', 'b1c1d1', 'b2c2d2'])
|
|
133
133
|
})
|
|
134
134
|
test('prevents diamond dependency problem 2', ()=>{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
()=>[a
|
|
144
|
-
|
|
135
|
+
const store$ = rw_rmemo_(0)
|
|
136
|
+
const values:string[] = []
|
|
137
|
+
const a$ = r_rmemo_(()=>`a${store$._}`)
|
|
138
|
+
const b$ = r_rmemo_(()=>a$._.replace('a', 'b'))
|
|
139
|
+
const c$ = r_rmemo_(()=>b$._.replace('b', 'c'))
|
|
140
|
+
const d$ = r_rmemo_(()=>c$._.replace('c', 'd'))
|
|
141
|
+
const e$ = r_rmemo_(()=>d$._.replace('d', 'e'))
|
|
142
|
+
r_rmemo_<string>(
|
|
143
|
+
()=>[a$._, e$._].join(''),
|
|
144
|
+
$=>values.push($._)
|
|
145
145
|
).go()
|
|
146
146
|
deepStrictEqual(values, ['a0e0'])
|
|
147
|
-
store
|
|
147
|
+
store$._ = 1
|
|
148
148
|
deepStrictEqual(values, ['a0e0', 'a1e1'])
|
|
149
149
|
})
|
|
150
150
|
test('prevents diamond dependency problem 3', ()=>{
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
()=>`${a
|
|
159
|
-
combined$=>values.push(combined
|
|
151
|
+
const store$ = rw_rmemo_(0)
|
|
152
|
+
const values:string[] = []
|
|
153
|
+
const a$ = r_rmemo_(()=>`a${store$._}`)
|
|
154
|
+
const b$ = r_rmemo_(()=>a$._.replace('a', 'b'))
|
|
155
|
+
const c$ = r_rmemo_(()=>b$._.replace('b', 'c'))
|
|
156
|
+
const d$ = r_rmemo_(()=>c$._.replace('c', 'd'))
|
|
157
|
+
r_rmemo_<string>(
|
|
158
|
+
()=>`${a$._}${b$._}${c$._}${d$._}`,
|
|
159
|
+
combined$=>values.push(combined$._)
|
|
160
160
|
).go()
|
|
161
161
|
deepStrictEqual(values, ['a0b0c0d0'])
|
|
162
|
-
store
|
|
162
|
+
store$._ = 1
|
|
163
163
|
deepStrictEqual(values, ['a0b0c0d0', 'a1b1c1d1'])
|
|
164
164
|
})
|
|
165
165
|
test('autosubscribe: prevents diamond dependency problem 4 (complex)', ()=>{
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
let g$ = rmemo_(()=>`g${f$()}`)
|
|
180
|
-
rmemo_(
|
|
181
|
-
()=>e$(),
|
|
182
|
-
combined1$=>values.push(combined1$())
|
|
166
|
+
const store1$ = rw_rmemo_(0)
|
|
167
|
+
const store2$ = rw_rmemo_(0)
|
|
168
|
+
const values:string[] = []
|
|
169
|
+
const a$ = r_rmemo_(()=>`a${store1$._}`)
|
|
170
|
+
const b$ = r_rmemo_(()=>`b${store2$._}`)
|
|
171
|
+
const c$ = r_rmemo_(()=>`c${a$._}${b$._}`)
|
|
172
|
+
const d$ = r_rmemo_(()=>`d${a$._}`)
|
|
173
|
+
const e$ = r_rmemo_(()=>`e${c$._}${d$._}`)
|
|
174
|
+
const f$ = r_rmemo_(()=>`f${e$._}`)
|
|
175
|
+
const g$ = r_rmemo_(()=>`g${f$._}`)
|
|
176
|
+
r_rmemo_(
|
|
177
|
+
()=>e$._,
|
|
178
|
+
combined1$=>values.push(combined1$._)
|
|
183
179
|
).go()
|
|
184
|
-
|
|
185
|
-
()=>[e
|
|
186
|
-
combined2$=>values.push(combined2
|
|
180
|
+
r_rmemo_(
|
|
181
|
+
()=>[e$._, g$._].join(''),
|
|
182
|
+
combined2$=>values.push(combined2$._)
|
|
187
183
|
).go()
|
|
188
184
|
deepStrictEqual(values, ['eca0b0da0', 'eca0b0da0gfeca0b0da0'])
|
|
189
|
-
store1
|
|
190
|
-
store2
|
|
185
|
+
store1$._ = 1
|
|
186
|
+
store2$._ = 2
|
|
191
187
|
deepStrictEqual(values, [
|
|
192
188
|
'eca0b0da0',
|
|
193
189
|
'eca0b0da0gfeca0b0da0',
|
|
@@ -199,66 +195,66 @@ test('autosubscribe: prevents diamond dependency problem 4 (complex)', ()=>{
|
|
|
199
195
|
})
|
|
200
196
|
test('prevents diamond dependency problem 5', ()=>{
|
|
201
197
|
let events = ''
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
198
|
+
const firstName$ = rw_rmemo_('John')
|
|
199
|
+
const lastName$ = rw_rmemo_('Doe')
|
|
200
|
+
const fullName$ = r_rmemo_(()=>{
|
|
205
201
|
events += 'full '
|
|
206
|
-
return `${firstName
|
|
202
|
+
return `${firstName$._} ${lastName$._}`
|
|
207
203
|
})
|
|
208
|
-
|
|
204
|
+
const isFirstShort$ = r_rmemo_(()=>{
|
|
209
205
|
events += 'short '
|
|
210
|
-
return firstName
|
|
206
|
+
return firstName$._.length < 10
|
|
211
207
|
})
|
|
212
|
-
|
|
208
|
+
const displayName$ = r_rmemo_(
|
|
213
209
|
()=>{
|
|
214
210
|
events += 'display '
|
|
215
|
-
return isFirstShort
|
|
211
|
+
return isFirstShort$._ ? fullName$._ : firstName$._
|
|
216
212
|
}
|
|
217
213
|
)
|
|
218
214
|
equal(events, '')
|
|
219
|
-
equal(displayName
|
|
215
|
+
equal(displayName$._, 'John Doe')
|
|
220
216
|
equal(events, 'display short full ')
|
|
221
|
-
firstName
|
|
222
|
-
equal(displayName
|
|
217
|
+
firstName$._ = 'Benedict'
|
|
218
|
+
equal(displayName$._, 'Benedict Doe')
|
|
223
219
|
equal(events, 'display short full short full display ')
|
|
224
|
-
firstName
|
|
225
|
-
equal(displayName
|
|
220
|
+
firstName$._ = 'Montgomery'
|
|
221
|
+
equal(displayName$._, 'Montgomery')
|
|
226
222
|
equal(events, 'display short full short full display short full display ')
|
|
227
223
|
})
|
|
228
224
|
test('prevents diamond dependency problem 6', ()=>{
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
()=>`${a
|
|
237
|
-
combined$=>values.push(combined
|
|
225
|
+
const store1$ = rw_rmemo_(0)
|
|
226
|
+
const store2$ = rw_rmemo_(0)
|
|
227
|
+
const values:string[] = []
|
|
228
|
+
const a$ = r_rmemo_(()=>`a${store1$._}`)
|
|
229
|
+
const b$ = r_rmemo_(()=>`b${store2$._}`)
|
|
230
|
+
const c$ = r_rmemo_(()=>b$._.replace('b', 'c'))
|
|
231
|
+
r_rmemo_(
|
|
232
|
+
()=>`${a$._}${c$._}`,
|
|
233
|
+
combined$=>values.push(combined$._)
|
|
238
234
|
).go()
|
|
239
235
|
deepStrictEqual(values, ['a0c0'])
|
|
240
|
-
store1
|
|
236
|
+
store1$._ = 1
|
|
241
237
|
deepStrictEqual(values, ['a0c0', 'a1c0'])
|
|
242
238
|
})
|
|
243
239
|
test('prevents dependency listeners from being out of order', ()=>{
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
return `${base
|
|
240
|
+
const base$ = rw_rmemo_(0)
|
|
241
|
+
const a$ = r_rmemo_(()=>{
|
|
242
|
+
return `${base$._}a`
|
|
247
243
|
})
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return `${a
|
|
251
|
-
}, b$=>values.push(b
|
|
252
|
-
equal(b
|
|
244
|
+
const values:string[] = []
|
|
245
|
+
const b$ = r_rmemo_(()=>{
|
|
246
|
+
return `${a$._}b`
|
|
247
|
+
}, b$=>values.push(b$._))
|
|
248
|
+
equal(b$._, '0ab')
|
|
253
249
|
deepStrictEqual(values, ['0ab'])
|
|
254
|
-
equal(a
|
|
255
|
-
base
|
|
250
|
+
equal(a$._, '0a')
|
|
251
|
+
base$._ = 1
|
|
256
252
|
deepStrictEqual(values, ['0ab', '1ab'])
|
|
257
253
|
})
|
|
258
254
|
test('computes initial value when argument is undefined', ()=>{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
equal(one
|
|
262
|
-
equal(two
|
|
255
|
+
const one$ = rw_rmemo_<string|undefined>(undefined)
|
|
256
|
+
const two$ = r_rmemo_(()=>!!one$._)
|
|
257
|
+
equal(one$._, undefined)
|
|
258
|
+
equal(two$._, false)
|
|
263
259
|
})
|
|
264
260
|
test.run()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ctx-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.3.0",
|
|
4
4
|
"description": "ctx-core core library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ctx-core",
|
|
@@ -107,14 +107,14 @@
|
|
|
107
107
|
"devDependencies": {
|
|
108
108
|
"@arethetypeswrong/cli": "^0.13.1",
|
|
109
109
|
"@size-limit/preset-small-lib": "^11.0.0",
|
|
110
|
-
"@types/node": "^20.9.
|
|
111
|
-
"@types/sinon": "^17.0.
|
|
110
|
+
"@types/node": "^20.9.3",
|
|
111
|
+
"@types/sinon": "^17.0.2",
|
|
112
112
|
"c8": "^8.0.1",
|
|
113
113
|
"check-dts": "^0.7.2",
|
|
114
114
|
"sinon": "^17.0.1",
|
|
115
115
|
"size-limit": "^11.0.0",
|
|
116
116
|
"ts-node": "^10.9.1",
|
|
117
|
-
"tsx": "^4.
|
|
117
|
+
"tsx": "^4.2.0",
|
|
118
118
|
"typescript": "next",
|
|
119
119
|
"uvu": "^0.5.6"
|
|
120
120
|
},
|
|
@@ -146,32 +146,32 @@
|
|
|
146
146
|
"limit": "187 B"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
|
-
"name": "
|
|
149
|
+
"name": "r_rmemo_",
|
|
150
150
|
"import": {
|
|
151
|
-
"./rmemo": "{
|
|
151
|
+
"./rmemo": "{ r_rmemo_ }"
|
|
152
152
|
},
|
|
153
|
-
"limit": "
|
|
153
|
+
"limit": "289 B"
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
|
-
"name": "
|
|
156
|
+
"name": "r_rmemo_ signal_",
|
|
157
157
|
"import": {
|
|
158
|
-
"./rmemo": "{
|
|
158
|
+
"./rmemo": "{ rw_rmemo_, r_rmemo_ }"
|
|
159
159
|
},
|
|
160
|
-
"limit": "
|
|
160
|
+
"limit": "318 B"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
|
-
"name": "
|
|
163
|
+
"name": "r_rmemo_ signal_ be_ ctx_",
|
|
164
164
|
"import": {
|
|
165
|
-
"./rmemo": "{
|
|
165
|
+
"./rmemo": "{ rw_rmemo_, r_rmemo_, be_, ctx_ }"
|
|
166
166
|
},
|
|
167
|
-
"limit": "
|
|
167
|
+
"limit": "475 B"
|
|
168
168
|
},
|
|
169
169
|
{
|
|
170
|
-
"name": "
|
|
170
|
+
"name": "r_rmemo_ signal_ be_ ctx_ be_r_rmemo_pair_ be_rw_rmemo_triple_",
|
|
171
171
|
"import": {
|
|
172
|
-
"./rmemo": "{
|
|
172
|
+
"./rmemo": "{ rw_rmemo_, r_rmemo_, be_, ctx_, be_r_rmemo_pair_, be_rw_rmemo_triple_ }"
|
|
173
173
|
},
|
|
174
|
-
"limit": "
|
|
174
|
+
"limit": "557 B"
|
|
175
175
|
}
|
|
176
176
|
],
|
|
177
177
|
"scripts": {
|
package/rmemo/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from '../all/be_/index.js'
|
|
2
|
-
export * from '../all/
|
|
3
|
-
export * from '../all/
|
|
2
|
+
export * from '../all/be_r_rmemo_pair/index.js'
|
|
3
|
+
export * from '../all/be_rw_rmemo_triple/index.js'
|
|
4
4
|
export * from '../all/ctx/index.js'
|
|
5
5
|
export * from '../all/rmemo/index.js'
|
package/rmemo/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from '../all/be_/index.js'
|
|
2
|
-
export * from '../all/
|
|
3
|
-
export * from '../all/
|
|
2
|
+
export * from '../all/be_r_rmemo_pair/index.js'
|
|
3
|
+
export * from '../all/be_rw_rmemo_triple/index.js'
|
|
4
4
|
export * from '../all/ctx/index.js'
|
|
5
5
|
export * from '../all/rmemo/index.js'
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { Be, be__val__new_T, be_config_T, Ctx } from '../be_/index.js'
|
|
2
|
-
import type { read_rmemo_T, rmemo_def_T } from '../rmemo/index.js'
|
|
3
|
-
export declare function be_rmemo_pair_<
|
|
4
|
-
val_T,
|
|
5
|
-
rmemo_T extends read_rmemo_T<val_T> = read_rmemo_T<val_T>,
|
|
6
|
-
ctx_T extends Ctx = Ctx
|
|
7
|
-
>(be: Be<rmemo_T, ctx_T>):be_rmemo_pair_T<val_T, rmemo_T, ctx_T>
|
|
8
|
-
export declare function be_rmemo_pair_<
|
|
9
|
-
val_T,
|
|
10
|
-
rmemo_T extends read_rmemo_T<val_T> = read_rmemo_T<val_T>,
|
|
11
|
-
ctx_T extends Ctx = Ctx
|
|
12
|
-
>(
|
|
13
|
-
rmemo__new:be__val__new_T<val_T>,
|
|
14
|
-
...subscriber_a_THEN_config:
|
|
15
|
-
|[...rmemo_def_T<val_T>[]]
|
|
16
|
-
|[...rmemo_def_T<val_T>[], config:be_config_T]
|
|
17
|
-
):be_rmemo_pair_T<val_T, rmemo_T, ctx_T>
|
|
18
|
-
export type be_rmemo_pair_T<
|
|
19
|
-
val_T,
|
|
20
|
-
rmemo_T extends read_rmemo_T<val_T> = read_rmemo_T<val_T>,
|
|
21
|
-
ctx_T extends Ctx = Ctx
|
|
22
|
-
> = [
|
|
23
|
-
Be<rmemo_T, ctx_T>,
|
|
24
|
-
(ctx:ctx_T)=>val_T
|
|
25
|
-
]
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Be, be__val__new_T, be_config_T, Ctx } from '../be_/index.js'
|
|
2
|
-
import type { readwrite_rmemo_T, rmemo_def_T } from '../rmemo/index.js'
|
|
3
|
-
export declare function be_rsig_triple_<
|
|
4
|
-
val_T,
|
|
5
|
-
rsig_T extends readwrite_rmemo_T<val_T> = readwrite_rmemo_T<val_T>,
|
|
6
|
-
ctx_T extends Ctx = Ctx
|
|
7
|
-
>(be: Be<rsig_T, ctx_T>):be_rsig_triple_T<val_T, rsig_T, ctx_T>
|
|
8
|
-
export declare function be_rsig_triple_<
|
|
9
|
-
val_T,
|
|
10
|
-
rsig_T extends readwrite_rmemo_T<val_T> = readwrite_rmemo_T<val_T>,
|
|
11
|
-
ctx_T extends Ctx = Ctx
|
|
12
|
-
>(
|
|
13
|
-
rmemo__new:be__val__new_T<val_T>,
|
|
14
|
-
...subscriber_a_THEN_config:
|
|
15
|
-
|[...rmemo_def_T<val_T>[]]
|
|
16
|
-
|[...rmemo_def_T<val_T>[], config:be_config_T]
|
|
17
|
-
):be_rsig_triple_T<val_T, rsig_T, ctx_T>
|
|
18
|
-
export type be_rsig_triple_T<
|
|
19
|
-
val_T,
|
|
20
|
-
rsig_T extends readwrite_rmemo_T<val_T> = readwrite_rmemo_T<val_T>,
|
|
21
|
-
ctx_T extends Ctx = Ctx
|
|
22
|
-
> = [
|
|
23
|
-
Be<rsig_T>,
|
|
24
|
-
(ctx:ctx_T)=>val_T,
|
|
25
|
-
(ctx:ctx_T, val:val_T)=>void
|
|
26
|
-
]
|