mm_cachebase 2.0.3 → 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.
- package/example/index.js +53 -0
- package/index.js +9 -3141
- package/lib/cachebase.js +3125 -0
- package/package.json +8 -2
- package/test.js +49 -37
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mm_cachebase",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "一个轻量级的本地缓存类库,接口与 mm_redis 完全对齐:全异步API、冒号风格事件、统一签名与返回值,支持字符串、哈希、列表、集合、有序集合、发布订阅。",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"url": "git+https://gitee.com/qiuwenwu91/mm_cachebase.git"
|
|
12
12
|
},
|
|
13
13
|
"keywords": [
|
|
14
|
+
"mm_mod",
|
|
15
|
+
"mm_port",
|
|
16
|
+
"mm_cache",
|
|
14
17
|
"cachebase",
|
|
15
18
|
"redis",
|
|
16
19
|
"cache",
|
|
@@ -32,6 +35,8 @@
|
|
|
32
35
|
"persist",
|
|
33
36
|
"scope"
|
|
34
37
|
],
|
|
38
|
+
"layer": "port",
|
|
39
|
+
"group": "cache",
|
|
35
40
|
"author": "邱文武",
|
|
36
41
|
"license": "MIT",
|
|
37
42
|
"bugs": {
|
|
@@ -39,6 +44,7 @@
|
|
|
39
44
|
},
|
|
40
45
|
"homepage": "https://gitee.com/qiuwenwu91/mm_cachebase#readme",
|
|
41
46
|
"dependencies": {
|
|
42
|
-
"
|
|
47
|
+
"mm_corejs": "^1.1.5",
|
|
48
|
+
"mm_helper": "^1.0.1"
|
|
43
49
|
}
|
|
44
50
|
}
|
package/test.js
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
// 独立运行时补充全局 $ 对象(mm_os 宿主环境已提供,npm 包测试需自备)
|
|
2
|
+
if (!global.$) {
|
|
3
|
+
global.$ = {
|
|
4
|
+
log: {
|
|
5
|
+
debug: console.debug ? console.debug.bind(console) : console.log.bind(console),
|
|
6
|
+
info: console.info ? console.info.bind(console) : console.log.bind(console),
|
|
7
|
+
warn: console.warn ? console.warn.bind(console) : console.log.bind(console),
|
|
8
|
+
error: console.error ? console.error.bind(console) : console.log.bind(console),
|
|
9
|
+
success: console.log.bind(console)
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
1
14
|
const assert = require('assert');
|
|
2
15
|
const { CacheBase, cachebaseAdmin } = require('./index.js');
|
|
3
16
|
|
|
@@ -618,55 +631,54 @@ async function test() {
|
|
|
618
631
|
const eventCache = new CacheBase({ scope: 'test_event' });
|
|
619
632
|
|
|
620
633
|
await runner.runTest('set事件触发(冒号风格)', async () => {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
}
|
|
630
|
-
});
|
|
631
|
-
|
|
632
|
-
eventCache.once('set:after', (data) => {
|
|
633
|
-
if (data.key === 'event_key' && data.value === 'event_value' && data.success === true) {
|
|
634
|
-
afterTriggered = true;
|
|
635
|
-
setTimeout(() => {
|
|
636
|
-
if (beforeTriggered && afterTriggered) {
|
|
637
|
-
resolve();
|
|
638
|
-
} else {
|
|
639
|
-
reject(new Error('set事件未全部触发'));
|
|
640
|
-
}
|
|
641
|
-
}, 10);
|
|
642
|
-
}
|
|
643
|
-
});
|
|
644
|
-
|
|
645
|
-
await eventCache.set('event_key', 'event_value');
|
|
634
|
+
let beforeTriggered = false;
|
|
635
|
+
let afterTriggered = false;
|
|
636
|
+
|
|
637
|
+
// 事件名改为冒号风格,对齐 mm_redis
|
|
638
|
+
eventCache.once('set:before', (data) => {
|
|
639
|
+
if (data.key === 'event_key' && data.value === 'event_value') {
|
|
640
|
+
beforeTriggered = true;
|
|
641
|
+
}
|
|
646
642
|
});
|
|
643
|
+
|
|
644
|
+
eventCache.once('set:after', (data) => {
|
|
645
|
+
if (data.key === 'event_key' && data.value === 'event_value' && data.success === true) {
|
|
646
|
+
afterTriggered = true;
|
|
647
|
+
}
|
|
648
|
+
});
|
|
649
|
+
|
|
650
|
+
await eventCache.set('event_key', 'event_value');
|
|
651
|
+
|
|
652
|
+
// 事件为同步触发,等待一个宏任务后校验两个事件均已触发
|
|
653
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
654
|
+
if (!beforeTriggered || !afterTriggered) {
|
|
655
|
+
throw new Error('set事件未全部触发');
|
|
656
|
+
}
|
|
647
657
|
});
|
|
648
658
|
|
|
649
659
|
await runner.runTest('error事件触发(冒号风格)', async () => {
|
|
650
|
-
|
|
651
|
-
|
|
660
|
+
// 事件名改为冒号风格
|
|
661
|
+
const errorPromise = new Promise((resolve, reject) => {
|
|
662
|
+
// 超时保护,若事件未触发则失败
|
|
663
|
+
const timer = setTimeout(() => reject(new Error('mset:error事件未触发')), 100);
|
|
652
664
|
eventCache.once('mset:error', (data) => {
|
|
665
|
+
clearTimeout(timer);
|
|
653
666
|
if (data.error) {
|
|
654
667
|
resolve();
|
|
655
668
|
} else {
|
|
656
669
|
reject(new Error('mset:error事件触发但数据不正确'));
|
|
657
670
|
}
|
|
658
671
|
});
|
|
659
|
-
|
|
660
|
-
// 传入非法参数触发错误,mset 内部 catch 后返回 false 并触发 mset:error 事件
|
|
661
|
-
const result = await eventCache.mset(null);
|
|
662
|
-
if (result !== false) {
|
|
663
|
-
reject(new Error(`mset应返回false但返回: ${result}`));
|
|
664
|
-
}
|
|
665
|
-
// 超时保护,若事件未触发则失败
|
|
666
|
-
setTimeout(() => {
|
|
667
|
-
reject(new Error('mset:error事件未触发'));
|
|
668
|
-
}, 100);
|
|
669
672
|
});
|
|
673
|
+
|
|
674
|
+
// 传入非法参数触发错误,mset 内部 catch 后返回 false 并触发 mset:error 事件
|
|
675
|
+
const result = await eventCache.mset(null);
|
|
676
|
+
if (result !== false) {
|
|
677
|
+
throw new Error(`mset应返回false但返回: ${result}`);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// 等待 mset:error 事件触发
|
|
681
|
+
await errorPromise;
|
|
670
682
|
});
|
|
671
683
|
|
|
672
684
|
// 测试管理功能
|