ctx-core 5.36.4 → 5.38.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.
@@ -0,0 +1 @@
1
+ export * from './index.js'
@@ -0,0 +1 @@
1
+ export * from './index.js'
@@ -0,0 +1 @@
1
+ export declare function calling<F extends (...arg_a:unknown[])=>unknown>(fn:F):F
@@ -0,0 +1,4 @@
1
+ export function calling(fn) {
2
+ fn()
3
+ return fn
4
+ }
@@ -0,0 +1,13 @@
1
+ import { test } from 'uvu'
2
+ import { equal } from 'uvu/assert'
3
+ import { calling } from './index.js'
4
+ test('calling', ()=>{
5
+ let count = 0
6
+ const fn = ()=>{
7
+ count++
8
+ }
9
+ equal(count, 0)
10
+ equal(calling(fn), fn)
11
+ equal(count, 1)
12
+ })
13
+ test.run()
@@ -17,6 +17,7 @@ export function debounce(func, wait, immediate) {
17
17
  resolve = in_resolve
18
18
  reject = in_reject
19
19
  })
20
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
20
21
  const apply_this = this
21
22
  const later = async ()=>{
22
23
  timeout = null
@@ -31,7 +32,7 @@ export function debounce(func, wait, immediate) {
31
32
  if (callNow) {
32
33
  await invoke()
33
34
  }
34
- return promise
35
+ return promise.finally(()=>clearTimeout(timeout))
35
36
  async function invoke() {
36
37
  try {
37
38
  const in_rv = func.apply(apply_this, arg_a)
@@ -71,6 +71,7 @@ export * from './call/index.browser.js'
71
71
  export * from './call_assign/index.browser.js'
72
72
  export * from './call_fn_a/index.browser.js'
73
73
  export * from './call_or_fn/index.browser.js'
74
+ export * from './calling/index.browser.js'
74
75
  export * from './cancel/index.browser.js'
75
76
  export * from './chain/index.browser.js'
76
77
  export * from './chunk_aa/index.browser.js'
package/all/index.d.ts CHANGED
@@ -71,6 +71,7 @@ export * from './call/index.js'
71
71
  export * from './call_assign/index.js'
72
72
  export * from './call_fn_a/index.js'
73
73
  export * from './call_or_fn/index.js'
74
+ export * from './calling/index.js'
74
75
  export * from './cancel/index.js'
75
76
  export * from './chain/index.js'
76
77
  export * from './chunk_aa/index.js'
package/all/index.js CHANGED
@@ -71,6 +71,7 @@ export * from './call/index.js'
71
71
  export * from './call_assign/index.js'
72
72
  export * from './call_fn_a/index.js'
73
73
  export * from './call_or_fn/index.js'
74
+ export * from './calling/index.js'
74
75
  export * from './cancel/index.js'
75
76
  export * from './chain/index.js'
76
77
  export * from './chunk_aa/index.js'
@@ -22,22 +22,23 @@ export function rate_limit_(
22
22
  start = now
23
23
  }
24
24
  rate = ops_num / (allow_bursts ? 1 : elapsed)
25
- return new Promise(async (resolve, reject)=>{
25
+ let timeout_id
26
+ return new Promise((resolve, reject)=>{
26
27
  try {
27
28
  if (rate < max_rate) {
28
29
  if (queue_a.length) {
29
- if (fn) queue_a.push(async ()=>resolve(await fn())
30
- )
30
+ if (fn) queue_a.push(async ()=>resolve(await fn()))
31
31
  ops_num += 1
32
32
  queue_a.shift()().then()
33
33
  } else {
34
34
  ops_num += 1
35
- resolve(await fn())
35
+ fn()
36
+ .then(val=>resolve(val))
37
+ .finally(()=>clearTimeout(timeout_id))
36
38
  }
37
39
  } else {
38
- if (fn) queue_a.push(async ()=>resolve(await fn())
39
- )
40
- setTimeout(rate_limit, 1 / max_rate)
40
+ if (fn) queue_a.push(async ()=>resolve(await fn()))
41
+ timeout_id = setTimeout(rate_limit, 1 / max_rate)
41
42
  }
42
43
  } catch (err) {
43
44
  reject(err)
@@ -66,8 +66,8 @@ export type memo_def_T<val_T, E = unknown> = (sig:sig_T<val_T, E>)=>val_T
66
66
  export type rmemo_a_T = unknown[]
67
67
  export type rmemo_add_def_T<val_T, add_val_T, E = unknown> = (sig:sig_T<val_T, E>)=>add_val_T
68
68
  export type rmemo_f_T = (()=>void)&{
69
- // readonly l:number
70
- // readonly s:rmemo_T<unknown>[]
71
- // readonly t:rmemo_T<unknown>[]
69
+ readonly l:number
70
+ readonly s:rmemo_T<unknown>[]
71
+ readonly t:rmemo_T<unknown>[]
72
72
  }
73
73
  export type rmemo_r_T = WeakRef<rmemo_f_T>&{ readonly d?: ()=>rmemo_f_T }
@@ -1,8 +1,10 @@
1
1
  /// <reference types="./index.d.ts" />
2
- /** @type {memo_T} */
3
- let cur_memo
4
- /** @type {Set<memo_T>} */
5
- let queue = new Set
2
+ /**
3
+ * @type {{ c?:memo_T, q:Set<memo_T> }}
4
+ * $.c child memo calling the memo
5
+ * $.q queue
6
+ */
7
+ let $ = globalThis.rmemo ??= { q: new Set }
6
8
  /**
7
9
  * @param {memo_def_T}memo_def
8
10
  * @param {rmemo_add_def_T}add_def_a
@@ -15,17 +17,15 @@ export function memo_(memo_def, ...add_def_a) {
15
17
  if (!('val' in memo)) {
16
18
  memo.f()
17
19
  }
18
- if (cur_memo) {
19
- if (!memo.t.includes(
20
- cur_memo.s ||= new WeakRef(cur_memo.f)
21
- )) {
22
- memo.t.push(cur_memo.s)
20
+ if ($.c) {
21
+ if (!memo.t.includes($.c.s ??= new WeakRef($.c.f))) {
22
+ memo.t.push($.c.s)
23
23
  }
24
- if (cur_memo.f.l < memo.f.l + 1) cur_memo.f.l = memo.f.l + 1
25
- // memo is called by cur_memo's conditional execution...next change to memo will notify cur_memo
26
- cur_memo.f.s.push(memo)
27
- // prevent memo from GC while cur_memo still has a strong reference
28
- if (!cur_memo.f.t.includes(memo)) cur_memo.f.t.push(memo)
24
+ if ($.c.f.l < memo.f.l + 1) $.c.f.l = memo.f.l + 1
25
+ // memo is called by $.c's conditional execution...next change to memo will notify $.c
26
+ $.c.f.s.push(memo)
27
+ // prevent memo from GC while $.c still has a strong reference
28
+ if (!$.c.f.t.includes(memo)) $.c.f.t.push(memo)
29
29
  }
30
30
  return memo.val
31
31
  }
@@ -35,8 +35,8 @@ export function memo_(memo_def, ...add_def_a) {
35
35
  if (memo.val !== val) {
36
36
  memo.t = memo.t.filter(r=>{
37
37
  r = r.deref()
38
- if (r && r.s.includes(memo)) { // if added by cur_memo.f.s.push(memo), add to queue
39
- queue.add(r)
38
+ if (r?.s.includes(memo)) { // if added by $.c.f.s.push(memo), add to $.q
39
+ $.q.add(r)
40
40
  }
41
41
  return r
42
42
  })
@@ -46,11 +46,11 @@ export function memo_(memo_def, ...add_def_a) {
46
46
  memo.a = []
47
47
  add_def_a.map(memo.add)
48
48
  }
49
- cur_refresh_loop:for (let cur_refresh of queue) {
50
- queue.delete(cur_refresh)
51
- for (let queue_refresh of queue) {
49
+ cur_refresh_loop:for (let cur_refresh of $.q) {
50
+ $.q.delete(cur_refresh)
51
+ for (let queue_refresh of $.q) {
52
52
  if (cur_refresh.l > queue_refresh.l) {
53
- queue.add(cur_refresh)
53
+ $.q.add(cur_refresh)
54
54
  continue cur_refresh_loop
55
55
  }
56
56
  }
@@ -76,15 +76,15 @@ export function memo_(memo_def, ...add_def_a) {
76
76
  }
77
77
  memo.memo_ = memo_
78
78
  memo.f = ()=>{
79
- let prev_memo = cur_memo
80
- cur_memo = memo
81
- memo.f.s = [] // reset references in memo_def conditional execution path...see cur_memo.f.s.push(memo)
79
+ let prev_memo = $.c
80
+ $.c = memo
81
+ memo.f.s = [] // reset references in memo_def conditional execution path...see $.c.f.s.push(memo)
82
82
  try {
83
83
  memo._ = memo_def(memo)
84
84
  } catch (err) {
85
85
  console.error(err)
86
86
  }
87
- cur_memo = prev_memo // catch does not throw
87
+ $.c = prev_memo // catch does not throw
88
88
  }
89
89
  memo.f.l = 0
90
90
  memo.f.s = []
@@ -16,7 +16,7 @@ export function rmemo__wait(
16
16
  error
17
17
  ) {
18
18
  let memo
19
- const _subscribe_wait = new Promise(resolve=>{
19
+ let _subscribe_wait = new Promise(resolve=>{
20
20
  memo = memo_(()=>{
21
21
  if (condition_fn(rmemo())) {
22
22
  resolve(rmemo())
@@ -32,5 +32,7 @@ export function rmemo__wait(
32
32
  error)
33
33
  // prevent GC
34
34
  promise.m = memo
35
+ let timeout_id = setTimeout(()=>promise.m(), timeout)
36
+ promise.catch(()=>{}).finally(()=>clearTimeout(timeout_id))
35
37
  return promise
36
38
  }
@@ -7,15 +7,15 @@
7
7
  */
8
8
  export function throttle(fn, threshold = 250, _this) {
9
9
  threshold || (threshold = 250)
10
- let last, deferTimer
10
+ let last, defer_timeout_id
11
11
  return function(...arg_a) {
12
12
  // eslint-disable-next-line @typescript-eslint/no-this-alias
13
13
  _this ||= this
14
14
  const now = +new Date
15
15
  if (last && now < last + threshold) {
16
16
  // hold on to it
17
- clearTimeout(deferTimer)
18
- deferTimer = setTimeout(()=>{
17
+ clearTimeout(defer_timeout_id)
18
+ defer_timeout_id = setTimeout(()=>{
19
19
  last = now
20
20
  fn.apply(_this, arg_a)
21
21
  }, threshold)
@@ -22,10 +22,7 @@ export function timeout_promise(
22
22
  typeof promise === 'function' ? promise() : promise,
23
23
  timeout,
24
24
  cancel_promise,
25
- ]).then(result=>{
26
- clearTimeout(id)
27
- return result
28
- })
25
+ ]).finally(()=>clearTimeout(id))
29
26
  ret_promise.cancel = cancel_promise__resolve
30
27
  return ret_promise
31
28
  }
@@ -24,6 +24,7 @@ export * from '../all/bind_map_call/index.browser.js'
24
24
  export * from '../all/call/index.browser.js'
25
25
  export * from '../all/call_fn_a/index.browser.js'
26
26
  export * from '../all/call_or_fn/index.browser.js'
27
+ export * from '../all/calling/index.browser.js'
27
28
  export * from '../all/cancel/index.browser.js'
28
29
  export * from '../all/compose/index.browser.js'
29
30
  export * from '../all/concat/index.browser.js'
@@ -24,6 +24,7 @@ export * from '../all/bind_map_call/index.js'
24
24
  export * from '../all/call/index.js'
25
25
  export * from '../all/call_fn_a/index.js'
26
26
  export * from '../all/call_or_fn/index.js'
27
+ export * from '../all/calling/index.js'
27
28
  export * from '../all/cancel/index.js'
28
29
  export * from '../all/compose/index.js'
29
30
  export * from '../all/concat/index.js'
package/function/index.js CHANGED
@@ -24,6 +24,7 @@ export * from '../all/bind_map_call/index.js'
24
24
  export * from '../all/call/index.js'
25
25
  export * from '../all/call_fn_a/index.js'
26
26
  export * from '../all/call_or_fn/index.js'
27
+ export * from '../all/calling/index.js'
27
28
  export * from '../all/cancel/index.js'
28
29
  export * from '../all/compose/index.js'
29
30
  export * from '../all/concat/index.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ctx-core",
3
- "version": "5.36.4",
3
+ "version": "5.38.0",
4
4
  "description": "ctx-core core library",
5
5
  "keywords": [
6
6
  "ctx-core",
@@ -296,7 +296,7 @@
296
296
  "@ctx-core/preprocess": "^0.1.1",
297
297
  "@size-limit/preset-small-lib": "^11.0.2",
298
298
  "@types/jsdom": "^21.1.6",
299
- "@types/node": "^20.11.14",
299
+ "@types/node": "^20.11.16",
300
300
  "@types/sinon": "^17.0.3",
301
301
  "c8": "^9.1.0",
302
302
  "check-dts": "^0.7.2",
@@ -362,28 +362,28 @@
362
362
  "import": {
363
363
  "./rmemo": "{ memo_ }"
364
364
  },
365
- "limit": "352 B"
365
+ "limit": "372 B"
366
366
  },
367
367
  {
368
368
  "name": "memo_ sig_",
369
369
  "import": {
370
370
  "./rmemo": "{ sig_, memo_ }"
371
371
  },
372
- "limit": "370 B"
372
+ "limit": "391 B"
373
373
  },
374
374
  {
375
375
  "name": "memo_ sig_ be_ ctx_",
376
376
  "import": {
377
377
  "./rmemo": "{ sig_, memo_, be_, ctx_ }"
378
378
  },
379
- "limit": "470 B"
379
+ "limit": "499 B"
380
380
  },
381
381
  {
382
382
  "name": "memo_ sig_ be_ ctx_ be_memo_pair_ be_sig_triple_",
383
383
  "import": {
384
384
  "./rmemo": "{ sig_, memo_, be_, ctx_, be_memo_pair_, be_sig_triple_ }"
385
385
  },
386
- "limit": "570 B"
386
+ "limit": "589 B"
387
387
  },
388
388
  {
389
389
  "name": "uuid",
@@ -6,6 +6,7 @@ export * from '../all/be_lock_memosig_triple/index.browser.js'
6
6
  export * from '../all/be_memo_pair/index.browser.js'
7
7
  export * from '../all/be_memosig_triple/index.browser.js'
8
8
  export * from '../all/be_sig_triple/index.browser.js'
9
+ export * from '../all/calling/index.browser.js'
9
10
  export * from '../all/cancel/index.browser.js'
10
11
  export * from '../all/ctx/index.browser.js'
11
12
  export * from '../all/nullish/index.browser.js'
package/rmemo/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from '../all/be_lock_memosig_triple/index.js'
6
6
  export * from '../all/be_memo_pair/index.js'
7
7
  export * from '../all/be_memosig_triple/index.js'
8
8
  export * from '../all/be_sig_triple/index.js'
9
+ export * from '../all/calling/index.js'
9
10
  export * from '../all/cancel/index.js'
10
11
  export * from '../all/ctx/index.js'
11
12
  export * from '../all/nullish/index.js'
package/rmemo/index.js CHANGED
@@ -6,6 +6,7 @@ export * from '../all/be_lock_memosig_triple/index.js'
6
6
  export * from '../all/be_memo_pair/index.js'
7
7
  export * from '../all/be_memosig_triple/index.js'
8
8
  export * from '../all/be_sig_triple/index.js'
9
+ export * from '../all/calling/index.js'
9
10
  export * from '../all/cancel/index.js'
10
11
  export * from '../all/ctx/index.js'
11
12
  export * from '../all/nullish/index.js'
@@ -8,6 +8,7 @@ export * from '../all/bind_map_call/index.browser.js'
8
8
  export * from '../all/call/index.browser.js'
9
9
  export * from '../all/call_fn_a/index.browser.js'
10
10
  export * from '../all/call_or_fn/index.browser.js'
11
+ export * from '../all/calling/index.browser.js'
11
12
  export * from '../all/run/index.browser.js'
12
13
  export * from '../all/run_or_val/index.browser.js'
13
14
  export * from '../all/tap/index.browser.js'
package/run/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from '../all/bind_map_call/index.js'
8
8
  export * from '../all/call/index.js'
9
9
  export * from '../all/call_fn_a/index.js'
10
10
  export * from '../all/call_or_fn/index.js'
11
+ export * from '../all/calling/index.js'
11
12
  export * from '../all/run/index.js'
12
13
  export * from '../all/run_or_val/index.js'
13
14
  export * from '../all/tap/index.js'
package/run/index.js CHANGED
@@ -8,6 +8,7 @@ export * from '../all/bind_map_call/index.js'
8
8
  export * from '../all/call/index.js'
9
9
  export * from '../all/call_fn_a/index.js'
10
10
  export * from '../all/call_or_fn/index.js'
11
+ export * from '../all/calling/index.js'
11
12
  export * from '../all/run/index.js'
12
13
  export * from '../all/run_or_val/index.js'
13
14
  export * from '../all/tap/index.js'