• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

alovajs / alova / #190

22 Jul 2024 07:20AM UTC coverage: 93.187% (-0.1%) from 93.292%
#190

push

github

web-flow
Merge pull request #470 from alovajs/changeset-release/next

ci: release next (beta)

1579 of 1740 branches covered (90.75%)

Branch coverage included in aggregate %.

9473 of 10120 relevant lines covered (93.61%)

58.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.19
/packages/client/src/hooks/silent/storage/silentMethodStorage.ts
1
import { len, objectKeys, pushItem, splice } from '@alova/shared/vars';
1✔
2
import { AlovaGenerics } from 'alova';
1✔
3
import type { SilentMethod } from '../SilentMethod';
1✔
4
import {
1✔
5
  SerializedSilentMethodIdQueueMap,
1✔
6
  silentMethodIdQueueMapStorageKey,
1✔
7
  silentMethodStorageKeyPrefix,
1✔
8
  storageGetItem,
1✔
9
  storageRemoveItem,
1✔
10
  storageSetItem
1✔
11
} from './performers';
1✔
12

1✔
13
/**
1✔
14
 * 序列化并保存silentMethod实例
1✔
15
 * @param silentMethodInstance silentMethod实例
1✔
16
 */
1✔
17
export const persistSilentMethod = <AG extends AlovaGenerics>(silentMethodInstance: SilentMethod<AG>) =>
1✔
18
  storageSetItem(silentMethodStorageKeyPrefix + silentMethodInstance.id, silentMethodInstance);
1✔
19

1✔
20
/**
1✔
21
 * 将静默请求的配置信息放入对应storage中
1✔
22
 * 逻辑:通过构造一个key,并用这个key将静默方法的配置信息放入对应storage中,然后将key存入统一管理key的存储中
1✔
23
 * @param silentMethod SilentMethod实例
1✔
24
 * @param queue 操作的队列名
1✔
25
 */
1✔
26
export const push2PersistentSilentQueue = async <AG extends AlovaGenerics>(
1✔
27
  silentMethodInstance: SilentMethod<AG>,
12✔
28
  queueName: string
12✔
29
) => {
12✔
30
  await persistSilentMethod(silentMethodInstance);
12✔
31
  // 将silentMethod实例id保存到queue存储中
12✔
32
  const silentMethodIdQueueMap = ((await storageGetItem(silentMethodIdQueueMapStorageKey)) ||
12✔
33
    {}) as SerializedSilentMethodIdQueueMap;
12✔
34
  const currentQueue = (silentMethodIdQueueMap[queueName] = silentMethodIdQueueMap[queueName] || []);
12✔
35
  pushItem(currentQueue, silentMethodInstance.id);
12✔
36
  await storageSetItem(silentMethodIdQueueMapStorageKey, silentMethodIdQueueMap);
12✔
37
};
12✔
38

1✔
39
/**
1✔
40
 * 对缓存中的silentMethod实例移除或替换
1✔
41
 * @param queue 操作的队列名
1✔
42
 * @param targetSilentMethodId 目标silentMethod实例id
1✔
43
 * @param newSilentMethod 替换的新silentMethod实例,未传则表示删除
1✔
44
 */
1✔
45
export const spliceStorageSilentMethod = async <AG extends AlovaGenerics>(
1✔
46
  queueName: string,
10✔
47
  targetSilentMethodId: string,
10✔
48
  newSilentMethod?: SilentMethod<AG>
10✔
49
) => {
10✔
50
  // 将silentMethod实例id从queue中移除
10✔
51
  const silentMethodIdQueueMap = ((await storageGetItem(silentMethodIdQueueMapStorageKey)) ||
10!
52
    {}) as SerializedSilentMethodIdQueueMap;
10✔
53
  const currentQueue = silentMethodIdQueueMap[queueName] || [];
10!
54
  const index = currentQueue.findIndex(id => id === targetSilentMethodId);
10✔
55
  if (index >= 0) {
10✔
56
    if (newSilentMethod) {
10!
57
      splice(currentQueue, index, 1, newSilentMethod.id);
×
58
      await persistSilentMethod(newSilentMethod);
×
59
    } else {
10✔
60
      splice(currentQueue, index, 1);
10✔
61
    }
10✔
62

10✔
63
    await storageRemoveItem(silentMethodStorageKeyPrefix + targetSilentMethodId);
10✔
64
    // 队列为空时删除此队列
10✔
65
    len(currentQueue) <= 0 && delete silentMethodIdQueueMap[queueName];
10✔
66
    if (len(objectKeys(silentMethodIdQueueMap)) > 0) {
10✔
67
      await storageSetItem(silentMethodIdQueueMapStorageKey, silentMethodIdQueueMap);
6✔
68
    } else {
9✔
69
      // 队列集合为空时移除它
4✔
70
      await storageRemoveItem(silentMethodIdQueueMapStorageKey);
4✔
71
    }
4✔
72
  }
10✔
73
};
10✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc