@mtcute/core 0.1.1 → 0.2.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/cjs/base-client.d.ts +3 -6
- package/cjs/base-client.js +12 -20
- package/cjs/base-client.js.map +1 -1
- package/cjs/network/auth-key.test.d.ts +1 -0
- package/cjs/network/auth-key.test.js +111 -0
- package/cjs/network/auth-key.test.js.map +1 -0
- package/cjs/network/config-manager.js +2 -1
- package/cjs/network/config-manager.js.map +1 -1
- package/cjs/network/config-manager.test.d.ts +1 -0
- package/cjs/network/config-manager.test.js +170 -0
- package/cjs/network/config-manager.test.js.map +1 -0
- package/cjs/network/index.d.ts +1 -1
- package/cjs/network/index.js.map +1 -1
- package/cjs/network/multi-session-connection.js +17 -4
- package/cjs/network/multi-session-connection.js.map +1 -1
- package/cjs/network/network-manager.d.ts +1 -1
- package/cjs/network/network-manager.js +12 -5
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/persistent-connection.test.d.ts +1 -0
- package/cjs/network/persistent-connection.test.js +157 -0
- package/cjs/network/persistent-connection.test.js.map +1 -0
- package/cjs/network/session-connection.js +3 -2
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/network/transports/intermediate.test.d.ts +1 -0
- package/cjs/network/transports/intermediate.test.js +84 -0
- package/cjs/network/transports/intermediate.test.js.map +1 -0
- package/cjs/network/transports/obfuscated.js +1 -1
- package/cjs/network/transports/obfuscated.js.map +1 -1
- package/cjs/network/transports/obfuscated.test.d.ts +1 -0
- package/cjs/network/transports/obfuscated.test.js +131 -0
- package/cjs/network/transports/obfuscated.test.js.map +1 -0
- package/cjs/network/transports/tcp.js +1 -1
- package/cjs/network/transports/tcp.js.map +1 -1
- package/cjs/network/transports/tcp.test.d.ts +1 -0
- package/cjs/network/transports/tcp.test.js +103 -0
- package/cjs/network/transports/tcp.test.js.map +1 -0
- package/cjs/network/transports/websocket.test.d.ts +1 -0
- package/cjs/network/transports/websocket.test.js +91 -0
- package/cjs/network/transports/websocket.test.js.map +1 -0
- package/cjs/storage/abstract.d.ts +18 -0
- package/cjs/storage/abstract.js.map +1 -1
- package/cjs/storage/idb.d.ts +101 -0
- package/cjs/storage/idb.js +458 -0
- package/cjs/storage/idb.js.map +1 -0
- package/cjs/storage/idb.test.d.ts +1 -0
- package/cjs/storage/idb.test.js +21 -0
- package/cjs/storage/idb.test.js.map +1 -0
- package/cjs/storage/index.d.ts +0 -4
- package/cjs/storage/index.js +0 -4
- package/cjs/storage/index.js.map +1 -1
- package/cjs/storage/json-file.d.ts +12 -0
- package/cjs/storage/json-file.js +12 -0
- package/cjs/storage/json-file.js.map +1 -1
- package/cjs/storage/json.js +3 -2
- package/cjs/storage/json.js.map +1 -1
- package/cjs/storage/json.test.d.ts +1 -0
- package/cjs/storage/json.test.js +36 -0
- package/cjs/storage/json.test.js.map +1 -0
- package/cjs/storage/localstorage.d.ts +12 -0
- package/cjs/storage/localstorage.js +12 -0
- package/cjs/storage/localstorage.js.map +1 -1
- package/cjs/storage/localstorage.test.d.ts +1 -0
- package/cjs/storage/localstorage.test.js +23 -0
- package/cjs/storage/localstorage.test.js.map +1 -0
- package/cjs/storage/memory.d.ts +12 -1
- package/cjs/storage/memory.js +65 -3
- package/cjs/storage/memory.js.map +1 -1
- package/cjs/storage/memory.test.d.ts +1 -0
- package/cjs/storage/memory.test.js +48 -0
- package/cjs/storage/memory.test.js.map +1 -0
- package/cjs/utils/async-lock.test.d.ts +1 -0
- package/cjs/utils/async-lock.test.js +25 -0
- package/cjs/utils/async-lock.test.js.map +1 -0
- package/cjs/utils/bigint-utils.test.d.ts +1 -0
- package/cjs/utils/bigint-utils.test.js +150 -0
- package/cjs/utils/bigint-utils.test.js.map +1 -0
- package/cjs/utils/buffer-utils.test.d.ts +1 -0
- package/cjs/utils/buffer-utils.test.js +69 -0
- package/cjs/utils/buffer-utils.test.js.map +1 -0
- package/cjs/utils/condition-variable.test.d.ts +1 -0
- package/cjs/utils/condition-variable.test.js +27 -0
- package/cjs/utils/condition-variable.test.js.map +1 -0
- package/cjs/utils/controllable-promise.d.ts +0 -5
- package/cjs/utils/controllable-promise.js +1 -7
- package/cjs/utils/controllable-promise.js.map +1 -1
- package/cjs/utils/controllable-promise.test.d.ts +1 -0
- package/cjs/utils/controllable-promise.test.js +17 -0
- package/cjs/utils/controllable-promise.test.js.map +1 -0
- package/cjs/utils/crypto/keys.test.d.ts +1 -0
- package/cjs/utils/crypto/keys.test.js +40 -0
- package/cjs/utils/crypto/keys.test.js.map +1 -0
- package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/cjs/utils/crypto/miller-rabin.test.js +60 -0
- package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
- package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
- package/cjs/utils/crypto/mtproto.test.js +50 -0
- package/cjs/utils/crypto/mtproto.test.js.map +1 -0
- package/cjs/utils/crypto/node.test.d.ts +1 -0
- package/cjs/utils/crypto/node.test.js +14 -0
- package/cjs/utils/crypto/node.test.js.map +1 -0
- package/cjs/utils/crypto/password.test.d.ts +1 -0
- package/cjs/utils/crypto/password.test.js +95 -0
- package/cjs/utils/crypto/password.test.js.map +1 -0
- package/cjs/utils/crypto/utils.test.d.ts +1 -0
- package/cjs/utils/crypto/utils.test.js +49 -0
- package/cjs/utils/crypto/utils.test.js.map +1 -0
- package/cjs/utils/crypto/web.test.d.ts +1 -0
- package/cjs/utils/crypto/web.test.js +17 -0
- package/cjs/utils/crypto/web.test.js.map +1 -0
- package/cjs/utils/deque.test.d.ts +1 -0
- package/cjs/utils/deque.test.js +128 -0
- package/cjs/utils/deque.test.js.map +1 -0
- package/cjs/utils/function-utils.test.d.ts +1 -0
- package/cjs/utils/function-utils.test.js +23 -0
- package/cjs/utils/function-utils.test.js.map +1 -0
- package/cjs/utils/linked-list.test.d.ts +1 -0
- package/cjs/utils/linked-list.test.js +36 -0
- package/cjs/utils/linked-list.test.js.map +1 -0
- package/cjs/utils/links/bots.test.d.ts +1 -0
- package/cjs/utils/links/bots.test.js +152 -0
- package/cjs/utils/links/bots.test.js.map +1 -0
- package/cjs/utils/links/chat.test.d.ts +1 -0
- package/cjs/utils/links/chat.test.js +84 -0
- package/cjs/utils/links/chat.test.js.map +1 -0
- package/cjs/utils/links/misc.test.d.ts +1 -0
- package/cjs/utils/links/misc.test.js +153 -0
- package/cjs/utils/links/misc.test.js.map +1 -0
- package/cjs/utils/links/proxy.test.d.ts +1 -0
- package/cjs/utils/links/proxy.test.js +74 -0
- package/cjs/utils/links/proxy.test.js.map +1 -0
- package/cjs/utils/links/user.test.d.ts +1 -0
- package/cjs/utils/links/user.test.js +63 -0
- package/cjs/utils/links/user.test.js.map +1 -0
- package/cjs/utils/logger.test.d.ts +1 -0
- package/cjs/utils/logger.test.js +127 -0
- package/cjs/utils/logger.test.js.map +1 -0
- package/cjs/utils/long-utils.test.d.ts +1 -0
- package/cjs/utils/long-utils.test.js +158 -0
- package/cjs/utils/long-utils.test.js.map +1 -0
- package/cjs/utils/lru-map.test.d.ts +1 -0
- package/cjs/utils/lru-map.test.js +96 -0
- package/cjs/utils/lru-map.test.js.map +1 -0
- package/cjs/utils/lru-set.test.d.ts +1 -0
- package/cjs/utils/lru-set.test.js +77 -0
- package/cjs/utils/lru-set.test.js.map +1 -0
- package/cjs/utils/peer-utils.js +3 -1
- package/cjs/utils/peer-utils.js.map +1 -1
- package/cjs/utils/peer-utils.test.d.ts +1 -0
- package/cjs/utils/peer-utils.test.js +122 -0
- package/cjs/utils/peer-utils.test.js.map +1 -0
- package/cjs/utils/sorted-array.test.d.ts +1 -0
- package/cjs/utils/sorted-array.test.js +66 -0
- package/cjs/utils/sorted-array.test.js.map +1 -0
- package/cjs/utils/string-session.test.d.ts +1 -0
- package/cjs/utils/string-session.test.js +106 -0
- package/cjs/utils/string-session.test.js.map +1 -0
- package/cjs/utils/tl-json.test.d.ts +1 -0
- package/cjs/utils/tl-json.test.js +83 -0
- package/cjs/utils/tl-json.test.js.map +1 -0
- package/cjs/utils/type-assertions.test.d.ts +1 -0
- package/cjs/utils/type-assertions.test.js +67 -0
- package/cjs/utils/type-assertions.test.js.map +1 -0
- package/esm/base-client.d.ts +3 -6
- package/esm/base-client.js +2 -10
- package/esm/base-client.js.map +1 -1
- package/esm/network/auth-key.test.d.ts +1 -0
- package/esm/network/auth-key.test.js +106 -0
- package/esm/network/auth-key.test.js.map +1 -0
- package/esm/network/config-manager.js +2 -1
- package/esm/network/config-manager.js.map +1 -1
- package/esm/network/config-manager.test.d.ts +1 -0
- package/esm/network/config-manager.test.js +168 -0
- package/esm/network/config-manager.test.js.map +1 -0
- package/esm/network/index.d.ts +1 -1
- package/esm/network/index.js.map +1 -1
- package/esm/network/multi-session-connection.js +17 -4
- package/esm/network/multi-session-connection.js.map +1 -1
- package/esm/network/network-manager.d.ts +1 -1
- package/esm/network/network-manager.js +12 -5
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/persistent-connection.test.d.ts +1 -0
- package/esm/network/persistent-connection.test.js +155 -0
- package/esm/network/persistent-connection.test.js.map +1 -0
- package/esm/network/session-connection.js +3 -2
- package/esm/network/session-connection.js.map +1 -1
- package/esm/network/transports/intermediate.test.d.ts +1 -0
- package/esm/network/transports/intermediate.test.js +82 -0
- package/esm/network/transports/intermediate.test.js.map +1 -0
- package/esm/network/transports/obfuscated.js +1 -1
- package/esm/network/transports/obfuscated.js.map +1 -1
- package/esm/network/transports/obfuscated.test.d.ts +1 -0
- package/esm/network/transports/obfuscated.test.js +129 -0
- package/esm/network/transports/obfuscated.test.js.map +1 -0
- package/esm/network/transports/tcp.js +1 -1
- package/esm/network/transports/tcp.js.map +1 -1
- package/esm/network/transports/tcp.test.d.ts +1 -0
- package/esm/network/transports/tcp.test.js +101 -0
- package/esm/network/transports/tcp.test.js.map +1 -0
- package/esm/network/transports/websocket.test.d.ts +1 -0
- package/esm/network/transports/websocket.test.js +89 -0
- package/esm/network/transports/websocket.test.js.map +1 -0
- package/esm/storage/abstract.d.ts +18 -0
- package/esm/storage/abstract.js.map +1 -1
- package/esm/storage/idb.d.ts +101 -0
- package/esm/storage/idb.js +454 -0
- package/esm/storage/idb.js.map +1 -0
- package/esm/storage/idb.test.d.ts +1 -0
- package/esm/storage/idb.test.js +19 -0
- package/esm/storage/idb.test.js.map +1 -0
- package/esm/storage/index.d.ts +0 -4
- package/esm/storage/index.js +0 -4
- package/esm/storage/index.js.map +1 -1
- package/esm/storage/json-file.d.ts +12 -0
- package/esm/storage/json-file.js +12 -0
- package/esm/storage/json-file.js.map +1 -1
- package/esm/storage/json.js +3 -2
- package/esm/storage/json.js.map +1 -1
- package/esm/storage/json.test.d.ts +1 -0
- package/esm/storage/json.test.js +34 -0
- package/esm/storage/json.test.js.map +1 -0
- package/esm/storage/localstorage.d.ts +12 -0
- package/esm/storage/localstorage.js +12 -0
- package/esm/storage/localstorage.js.map +1 -1
- package/esm/storage/localstorage.test.d.ts +1 -0
- package/esm/storage/localstorage.test.js +21 -0
- package/esm/storage/localstorage.test.js.map +1 -0
- package/esm/storage/memory.d.ts +12 -1
- package/esm/storage/memory.js +65 -3
- package/esm/storage/memory.js.map +1 -1
- package/esm/storage/memory.test.d.ts +1 -0
- package/esm/storage/memory.test.js +46 -0
- package/esm/storage/memory.test.js.map +1 -0
- package/esm/utils/async-lock.test.d.ts +1 -0
- package/esm/utils/async-lock.test.js +23 -0
- package/esm/utils/async-lock.test.js.map +1 -0
- package/esm/utils/bigint-utils.test.d.ts +1 -0
- package/esm/utils/bigint-utils.test.js +148 -0
- package/esm/utils/bigint-utils.test.js.map +1 -0
- package/esm/utils/buffer-utils.test.d.ts +1 -0
- package/esm/utils/buffer-utils.test.js +67 -0
- package/esm/utils/buffer-utils.test.js.map +1 -0
- package/esm/utils/condition-variable.test.d.ts +1 -0
- package/esm/utils/condition-variable.test.js +25 -0
- package/esm/utils/condition-variable.test.js.map +1 -0
- package/esm/utils/controllable-promise.d.ts +0 -5
- package/esm/utils/controllable-promise.js +0 -5
- package/esm/utils/controllable-promise.js.map +1 -1
- package/esm/utils/controllable-promise.test.d.ts +1 -0
- package/esm/utils/controllable-promise.test.js +15 -0
- package/esm/utils/controllable-promise.test.js.map +1 -0
- package/esm/utils/crypto/keys.test.d.ts +1 -0
- package/esm/utils/crypto/keys.test.js +38 -0
- package/esm/utils/crypto/keys.test.js.map +1 -0
- package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/esm/utils/crypto/miller-rabin.test.js +58 -0
- package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
- package/esm/utils/crypto/mtproto.test.d.ts +1 -0
- package/esm/utils/crypto/mtproto.test.js +48 -0
- package/esm/utils/crypto/mtproto.test.js.map +1 -0
- package/esm/utils/crypto/node.test.d.ts +1 -0
- package/esm/utils/crypto/node.test.js +12 -0
- package/esm/utils/crypto/node.test.js.map +1 -0
- package/esm/utils/crypto/password.test.d.ts +1 -0
- package/esm/utils/crypto/password.test.js +90 -0
- package/esm/utils/crypto/password.test.js.map +1 -0
- package/esm/utils/crypto/utils.test.d.ts +1 -0
- package/esm/utils/crypto/utils.test.js +47 -0
- package/esm/utils/crypto/utils.test.js.map +1 -0
- package/esm/utils/crypto/web.test.d.ts +1 -0
- package/esm/utils/crypto/web.test.js +15 -0
- package/esm/utils/crypto/web.test.js.map +1 -0
- package/esm/utils/deque.test.d.ts +1 -0
- package/esm/utils/deque.test.js +126 -0
- package/esm/utils/deque.test.js.map +1 -0
- package/esm/utils/function-utils.test.d.ts +1 -0
- package/esm/utils/function-utils.test.js +21 -0
- package/esm/utils/function-utils.test.js.map +1 -0
- package/esm/utils/linked-list.test.d.ts +1 -0
- package/esm/utils/linked-list.test.js +34 -0
- package/esm/utils/linked-list.test.js.map +1 -0
- package/esm/utils/links/bots.test.d.ts +1 -0
- package/esm/utils/links/bots.test.js +150 -0
- package/esm/utils/links/bots.test.js.map +1 -0
- package/esm/utils/links/chat.test.d.ts +1 -0
- package/esm/utils/links/chat.test.js +82 -0
- package/esm/utils/links/chat.test.js.map +1 -0
- package/esm/utils/links/misc.test.d.ts +1 -0
- package/esm/utils/links/misc.test.js +151 -0
- package/esm/utils/links/misc.test.js.map +1 -0
- package/esm/utils/links/proxy.test.d.ts +1 -0
- package/esm/utils/links/proxy.test.js +72 -0
- package/esm/utils/links/proxy.test.js.map +1 -0
- package/esm/utils/links/user.test.d.ts +1 -0
- package/esm/utils/links/user.test.js +61 -0
- package/esm/utils/links/user.test.js.map +1 -0
- package/esm/utils/logger.test.d.ts +1 -0
- package/esm/utils/logger.test.js +122 -0
- package/esm/utils/logger.test.js.map +1 -0
- package/esm/utils/long-utils.test.d.ts +1 -0
- package/esm/utils/long-utils.test.js +153 -0
- package/esm/utils/long-utils.test.js.map +1 -0
- package/esm/utils/lru-map.test.d.ts +1 -0
- package/esm/utils/lru-map.test.js +94 -0
- package/esm/utils/lru-map.test.js.map +1 -0
- package/esm/utils/lru-set.test.d.ts +1 -0
- package/esm/utils/lru-set.test.js +72 -0
- package/esm/utils/lru-set.test.js.map +1 -0
- package/esm/utils/peer-utils.js +3 -1
- package/esm/utils/peer-utils.js.map +1 -1
- package/esm/utils/peer-utils.test.d.ts +1 -0
- package/esm/utils/peer-utils.test.js +117 -0
- package/esm/utils/peer-utils.test.js.map +1 -0
- package/esm/utils/sorted-array.test.d.ts +1 -0
- package/esm/utils/sorted-array.test.js +64 -0
- package/esm/utils/sorted-array.test.js.map +1 -0
- package/esm/utils/string-session.test.d.ts +1 -0
- package/esm/utils/string-session.test.js +104 -0
- package/esm/utils/string-session.test.js.map +1 -0
- package/esm/utils/tl-json.test.d.ts +1 -0
- package/esm/utils/tl-json.test.js +81 -0
- package/esm/utils/tl-json.test.js.map +1 -0
- package/esm/utils/type-assertions.test.d.ts +1 -0
- package/esm/utils/type-assertions.test.js +65 -0
- package/esm/utils/type-assertions.test.js.map +1 -0
- package/package.json +20 -16
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const lru_map_js_1 = require("./lru-map.js");
|
|
5
|
+
(0, vitest_1.describe)('LruMap', () => {
|
|
6
|
+
(0, vitest_1.it)('should maintain maximum size by removing oldest added', () => {
|
|
7
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
8
|
+
lru.set('first', 1);
|
|
9
|
+
lru.set('second', 2);
|
|
10
|
+
lru.set('third', 3);
|
|
11
|
+
(0, vitest_1.expect)(lru.has('first')).toBeFalsy();
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.it)('should update the last added item', () => {
|
|
14
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
15
|
+
lru.set('first', 1);
|
|
16
|
+
lru.set('second', 2);
|
|
17
|
+
lru.set('first', 42);
|
|
18
|
+
lru.set('third', 3);
|
|
19
|
+
(0, vitest_1.expect)(lru.get('first')).toEqual(42);
|
|
20
|
+
(0, vitest_1.expect)(lru.has('second')).toBeFalsy();
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)('should update the last used item', () => {
|
|
23
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
24
|
+
lru.set('first', 1);
|
|
25
|
+
lru.set('second', 2);
|
|
26
|
+
lru.get('first');
|
|
27
|
+
lru.set('third', 3);
|
|
28
|
+
lru.get('third');
|
|
29
|
+
(0, vitest_1.expect)(lru.get('first')).toEqual(1);
|
|
30
|
+
(0, vitest_1.expect)(lru.has('second')).toBeFalsy();
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('should allow deleting items', () => {
|
|
33
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
34
|
+
lru.set('first', 1);
|
|
35
|
+
lru.set('second', 2);
|
|
36
|
+
lru.set('third', 3); // first is now deleted
|
|
37
|
+
lru.delete('second');
|
|
38
|
+
(0, vitest_1.expect)(lru.has('first')).toBeFalsy();
|
|
39
|
+
(0, vitest_1.expect)(lru.has('second')).toBeFalsy();
|
|
40
|
+
(0, vitest_1.expect)(lru.has('third')).toBeTruthy();
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('should handle deleting all items', () => {
|
|
43
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
44
|
+
lru.set('first', 1);
|
|
45
|
+
lru.set('second', 2);
|
|
46
|
+
lru.delete('second');
|
|
47
|
+
lru.delete('first');
|
|
48
|
+
(0, vitest_1.expect)(lru.has('first')).toBeFalsy();
|
|
49
|
+
(0, vitest_1.expect)(lru.has('second')).toBeFalsy();
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.it)('should return undefined for non-existing items', () => {
|
|
52
|
+
const lru = new lru_map_js_1.LruMap(2);
|
|
53
|
+
lru.set('first', 1);
|
|
54
|
+
lru.set('second', 2);
|
|
55
|
+
(0, vitest_1.expect)(lru.get('third')).toEqual(undefined);
|
|
56
|
+
});
|
|
57
|
+
// it('Map backend', () => {
|
|
58
|
+
// const lru = new LruMap<string, number>(2)
|
|
59
|
+
//
|
|
60
|
+
// lru.set('first', 1)
|
|
61
|
+
// expect(lru.has('first')).true
|
|
62
|
+
// expect(lru.has('second')).false
|
|
63
|
+
// expect(lru.get('first')).eq(1)
|
|
64
|
+
//
|
|
65
|
+
// lru.set('first', 42)
|
|
66
|
+
// expect(lru.has('first')).true
|
|
67
|
+
// expect(lru.has('second')).false
|
|
68
|
+
// expect(lru.get('first')).eq(42)
|
|
69
|
+
//
|
|
70
|
+
// lru.set('second', 2)
|
|
71
|
+
// expect(lru.has('first')).true
|
|
72
|
+
// expect(lru.has('second')).true
|
|
73
|
+
// expect(lru.get('first')).eq(42)
|
|
74
|
+
// expect(lru.get('second')).eq(2)
|
|
75
|
+
//
|
|
76
|
+
// lru.set('third', 3)
|
|
77
|
+
// expect(lru.has('first')).false
|
|
78
|
+
// expect(lru.has('second')).true
|
|
79
|
+
// expect(lru.has('third')).true
|
|
80
|
+
// expect(lru.get('first')).eq(undefined)
|
|
81
|
+
// expect(lru.get('second')).eq(2)
|
|
82
|
+
// expect(lru.get('third')).eq(3)
|
|
83
|
+
//
|
|
84
|
+
// lru.get('second') // update lru so that last = third
|
|
85
|
+
// lru.set('fourth', 4)
|
|
86
|
+
// expect(lru.has('first')).false
|
|
87
|
+
// expect(lru.has('second')).true
|
|
88
|
+
// expect(lru.has('third')).false
|
|
89
|
+
// expect(lru.has('fourth')).true
|
|
90
|
+
// expect(lru.get('first')).eq(undefined)
|
|
91
|
+
// expect(lru.get('second')).eq(2)
|
|
92
|
+
// expect(lru.get('third')).eq(undefined)
|
|
93
|
+
// expect(lru.get('fourth')).eq(4)
|
|
94
|
+
// })
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=lru-map.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-map.test.js","sourceRoot":"","sources":["../../../src/utils/lru-map.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { LruMap } from './lru-map.js'\n\ndescribe('LruMap', () => {\n it('should maintain maximum size by removing oldest added', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n lru.set('third', 3)\n\n expect(lru.has('first')).toBeFalsy()\n })\n\n it('should update the last added item', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n lru.set('first', 42)\n lru.set('third', 3)\n\n expect(lru.get('first')).toEqual(42)\n expect(lru.has('second')).toBeFalsy()\n })\n\n it('should update the last used item', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n lru.get('first')\n lru.set('third', 3)\n lru.get('third')\n\n expect(lru.get('first')).toEqual(1)\n expect(lru.has('second')).toBeFalsy()\n })\n\n it('should allow deleting items', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n lru.set('third', 3) // first is now deleted\n lru.delete('second')\n\n expect(lru.has('first')).toBeFalsy()\n expect(lru.has('second')).toBeFalsy()\n expect(lru.has('third')).toBeTruthy()\n })\n\n it('should handle deleting all items', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n lru.delete('second')\n lru.delete('first')\n\n expect(lru.has('first')).toBeFalsy()\n expect(lru.has('second')).toBeFalsy()\n })\n\n it('should return undefined for non-existing items', () => {\n const lru = new LruMap<string, number>(2)\n\n lru.set('first', 1)\n lru.set('second', 2)\n\n expect(lru.get('third')).toEqual(undefined)\n })\n\n // it('Map backend', () => {\n // const lru = new LruMap<string, number>(2)\n //\n // lru.set('first', 1)\n // expect(lru.has('first')).true\n // expect(lru.has('second')).false\n // expect(lru.get('first')).eq(1)\n //\n // lru.set('first', 42)\n // expect(lru.has('first')).true\n // expect(lru.has('second')).false\n // expect(lru.get('first')).eq(42)\n //\n // lru.set('second', 2)\n // expect(lru.has('first')).true\n // expect(lru.has('second')).true\n // expect(lru.get('first')).eq(42)\n // expect(lru.get('second')).eq(2)\n //\n // lru.set('third', 3)\n // expect(lru.has('first')).false\n // expect(lru.has('second')).true\n // expect(lru.has('third')).true\n // expect(lru.get('first')).eq(undefined)\n // expect(lru.get('second')).eq(2)\n // expect(lru.get('third')).eq(3)\n //\n // lru.get('second') // update lru so that last = third\n // lru.set('fourth', 4)\n // expect(lru.has('first')).false\n // expect(lru.has('second')).true\n // expect(lru.has('third')).false\n // expect(lru.has('fourth')).true\n // expect(lru.get('first')).eq(undefined)\n // expect(lru.get('second')).eq(2)\n // expect(lru.get('third')).eq(undefined)\n // expect(lru.get('fourth')).eq(4)\n // })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const long_1 = __importDefault(require("long"));
|
|
7
|
+
const vitest_1 = require("vitest");
|
|
8
|
+
const lru_set_js_1 = require("./lru-set.js");
|
|
9
|
+
(0, vitest_1.describe)('LruSet', () => {
|
|
10
|
+
(0, vitest_1.describe)('for strings', () => {
|
|
11
|
+
(0, vitest_1.it)('when 1 item is added, it is in the set', () => {
|
|
12
|
+
const set = new lru_set_js_1.LruSet(2);
|
|
13
|
+
set.add('first');
|
|
14
|
+
(0, vitest_1.expect)(set.has('first')).true;
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('when =capacity items are added, they are all in the set', () => {
|
|
17
|
+
const set = new lru_set_js_1.LruSet(2);
|
|
18
|
+
set.add('first');
|
|
19
|
+
set.add('second');
|
|
20
|
+
(0, vitest_1.expect)(set.has('first')).true;
|
|
21
|
+
(0, vitest_1.expect)(set.has('second')).true;
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.it)('when >capacity items are added, only the last <capacity> are in the set', () => {
|
|
24
|
+
const set = new lru_set_js_1.LruSet(2);
|
|
25
|
+
set.add('first');
|
|
26
|
+
set.add('second');
|
|
27
|
+
set.add('third');
|
|
28
|
+
(0, vitest_1.expect)(set.has('first')).false;
|
|
29
|
+
(0, vitest_1.expect)(set.has('second')).true;
|
|
30
|
+
(0, vitest_1.expect)(set.has('third')).true;
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('when the same added is while not eliminated, it is ignored', () => {
|
|
33
|
+
const set = new lru_set_js_1.LruSet(2);
|
|
34
|
+
set.add('first');
|
|
35
|
+
set.add('second');
|
|
36
|
+
set.add('first');
|
|
37
|
+
set.add('third');
|
|
38
|
+
(0, vitest_1.expect)(set.has('first')).false;
|
|
39
|
+
(0, vitest_1.expect)(set.has('second')).true;
|
|
40
|
+
(0, vitest_1.expect)(set.has('third')).true;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.describe)('for Longs', () => {
|
|
44
|
+
(0, vitest_1.it)('when 1 item is added, it is in the set', () => {
|
|
45
|
+
const set = new lru_set_js_1.LruSet(2, true);
|
|
46
|
+
set.add(long_1.default.fromNumber(1));
|
|
47
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(1))).true;
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('when =capacity items are added, they are all in the set', () => {
|
|
50
|
+
const set = new lru_set_js_1.LruSet(2, true);
|
|
51
|
+
set.add(long_1.default.fromNumber(1));
|
|
52
|
+
set.add(long_1.default.fromNumber(2));
|
|
53
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(1))).true;
|
|
54
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(2))).true;
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)('when >capacity items are added, only the last <capacity> are in the set', () => {
|
|
57
|
+
const set = new lru_set_js_1.LruSet(2, true);
|
|
58
|
+
set.add(long_1.default.fromNumber(1));
|
|
59
|
+
set.add(long_1.default.fromNumber(2));
|
|
60
|
+
set.add(long_1.default.fromNumber(3));
|
|
61
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(1))).false;
|
|
62
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(2))).true;
|
|
63
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(3))).true;
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)('when the same added is while not eliminated, it is ignored', () => {
|
|
66
|
+
const set = new lru_set_js_1.LruSet(2, true);
|
|
67
|
+
set.add(long_1.default.fromNumber(1));
|
|
68
|
+
set.add(long_1.default.fromNumber(2));
|
|
69
|
+
set.add(long_1.default.fromNumber(1));
|
|
70
|
+
set.add(long_1.default.fromNumber(3));
|
|
71
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(1))).false;
|
|
72
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(2))).true;
|
|
73
|
+
(0, vitest_1.expect)(set.has(long_1.default.fromNumber(3))).true;
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=lru-set.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-set.test.js","sourceRoot":"","sources":["../../../src/utils/lru-set.test.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\nimport { describe, expect, it } from 'vitest'\n\nimport { LruSet } from './lru-set.js'\n\ndescribe('LruSet', () => {\n describe('for strings', () => {\n it('when 1 item is added, it is in the set', () => {\n const set = new LruSet(2)\n\n set.add('first')\n expect(set.has('first')).true\n })\n\n it('when =capacity items are added, they are all in the set', () => {\n const set = new LruSet(2)\n\n set.add('first')\n set.add('second')\n\n expect(set.has('first')).true\n expect(set.has('second')).true\n })\n\n it('when >capacity items are added, only the last <capacity> are in the set', () => {\n const set = new LruSet(2)\n\n set.add('first')\n set.add('second')\n set.add('third')\n\n expect(set.has('first')).false\n expect(set.has('second')).true\n expect(set.has('third')).true\n })\n\n it('when the same added is while not eliminated, it is ignored', () => {\n const set = new LruSet(2)\n\n set.add('first')\n set.add('second')\n set.add('first')\n set.add('third')\n\n expect(set.has('first')).false\n expect(set.has('second')).true\n expect(set.has('third')).true\n })\n })\n\n describe('for Longs', () => {\n it('when 1 item is added, it is in the set', () => {\n const set = new LruSet(2, true)\n\n set.add(Long.fromNumber(1))\n expect(set.has(Long.fromNumber(1))).true\n })\n\n it('when =capacity items are added, they are all in the set', () => {\n const set = new LruSet(2, true)\n\n set.add(Long.fromNumber(1))\n set.add(Long.fromNumber(2))\n\n expect(set.has(Long.fromNumber(1))).true\n expect(set.has(Long.fromNumber(2))).true\n })\n\n it('when >capacity items are added, only the last <capacity> are in the set', () => {\n const set = new LruSet(2, true)\n\n set.add(Long.fromNumber(1))\n set.add(Long.fromNumber(2))\n set.add(Long.fromNumber(3))\n\n expect(set.has(Long.fromNumber(1))).false\n expect(set.has(Long.fromNumber(2))).true\n expect(set.has(Long.fromNumber(3))).true\n })\n\n it('when the same added is while not eliminated, it is ignored', () => {\n const set = new LruSet(2, true)\n\n set.add(Long.fromNumber(1))\n set.add(Long.fromNumber(2))\n set.add(Long.fromNumber(1))\n set.add(Long.fromNumber(3))\n\n expect(set.has(Long.fromNumber(1))).false\n expect(set.has(Long.fromNumber(2))).true\n expect(set.has(Long.fromNumber(3))).true\n })\n })\n})\n"]}
|
package/cjs/utils/peer-utils.js
CHANGED
|
@@ -51,6 +51,7 @@ function getMarkedPeerId(peer, peerType) {
|
|
|
51
51
|
throw new errors_js_1.MtArgumentError('Invalid peer type');
|
|
52
52
|
}
|
|
53
53
|
switch (peer._) {
|
|
54
|
+
case 'mtcute.dummyInputPeerMinUser':
|
|
54
55
|
case 'peerUser':
|
|
55
56
|
case 'inputPeerUser':
|
|
56
57
|
case 'inputPeerUserFromMessage':
|
|
@@ -60,6 +61,7 @@ function getMarkedPeerId(peer, peerType) {
|
|
|
60
61
|
case 'peerChat':
|
|
61
62
|
case 'inputPeerChat':
|
|
62
63
|
return -peer.chatId;
|
|
64
|
+
case 'mtcute.dummyInputPeerMinChannel':
|
|
63
65
|
case 'peerChannel':
|
|
64
66
|
case 'inputPeerChannel':
|
|
65
67
|
case 'inputPeerChannelFromMessage':
|
|
@@ -67,7 +69,7 @@ function getMarkedPeerId(peer, peerType) {
|
|
|
67
69
|
case 'inputChannelFromMessage':
|
|
68
70
|
return ZERO_CHANNEL_ID - peer.channelId;
|
|
69
71
|
}
|
|
70
|
-
throw new errors_js_1.MtArgumentError(
|
|
72
|
+
throw new errors_js_1.MtArgumentError(`Invalid peer: ${peer._}`);
|
|
71
73
|
}
|
|
72
74
|
exports.getMarkedPeerId = getMarkedPeerId;
|
|
73
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-utils.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtUnsupportedError } from '../types/errors.js'\nimport { BasicPeerType } from '../types/peers.js'\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.h\nconst ZERO_CHANNEL_ID = -1000000000000\nconst ZERO_SECRET_CHAT_ID = -2000000000000\nconst MAX_SECRET_CHAT_ID = -1997852516353 // ZERO_SECRET_CHAT_ID + 0x7fffffff\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChatId.h\n// const MAX_CHAT_ID = 999999999999\nconst MIN_MARKED_CHAT_ID = -999999999999 // -MAX_CHAT_ID\n// src: https://github.com/tdlib/td/blob/master/td/telegram/UserId.h\n// MAX_USER_ID = (1ll << 40) - 1\nconst MAX_USER_ID = 1099511627775\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChannelId.h\n// the last (1 << 31) - 1 identifiers will be used for secret chat dialog identifiers\n// MAX_CHANNEL_ID = 1000000000000ll - (1ll << 31)\n// const MAX_CHANNEL_ID = 997852516352\nconst MIN_MARKED_CHANNEL_ID = -1997852516352 // ZERO_CHANNEL_ID - MAX_CHANNEL_ID\n\n/**\n * Add or remove channel marker from ID\n */\nexport function toggleChannelIdMark(id: number): number {\n return ZERO_CHANNEL_ID - id\n}\n\n/**\n * Get the bare (non-marked) ID from a {@link tl.TypePeer}\n */\nexport function getBarePeerId(peer: tl.TypePeer): number {\n switch (peer._) {\n case 'peerUser':\n return peer.userId\n case 'peerChat':\n return peer.chatId\n case 'peerChannel':\n return peer.channelId\n }\n}\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.cpp\n\n/**\n * Get the marked (non-bare) ID from a {@link tl.TypePeer}\n *\n * *Mark* is bot API compatible, which is:\n * - ID stays the same for users\n * - ID is negated for chats\n * - ID is negated and `-1e12` is subtracted for channels\n */\nexport function getMarkedPeerId(peerId: number, peerType: BasicPeerType): number\nexport function getMarkedPeerId(peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel): number\n\nexport function getMarkedPeerId(\n peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | number,\n peerType?: BasicPeerType,\n): number {\n if (typeof peer === 'number') {\n switch (peerType) {\n case 'user':\n return peer\n case 'chat':\n return -peer\n case 'channel':\n return ZERO_CHANNEL_ID - peer\n }\n throw new MtArgumentError('Invalid peer type')\n }\n\n switch (peer._) {\n case 'peerUser':\n case 'inputPeerUser':\n case 'inputPeerUserFromMessage':\n case 'inputUser':\n case 'inputUserFromMessage':\n return peer.userId\n case 'peerChat':\n case 'inputPeerChat':\n return -peer.chatId\n case 'peerChannel':\n case 'inputPeerChannel':\n case 'inputPeerChannelFromMessage':\n case 'inputChannel':\n case 'inputChannelFromMessage':\n return ZERO_CHANNEL_ID - peer.channelId\n }\n\n throw new MtArgumentError('Invalid peer')\n}\n\n/**\n * Extract basic peer type from {@link tl.TypePeer} or its marked ID.\n */\nexport function getBasicPeerType(peer: tl.TypePeer | number): BasicPeerType {\n if (typeof peer !== 'number') {\n switch (peer._) {\n case 'peerUser':\n return 'user'\n case 'peerChat':\n return 'chat'\n case 'peerChannel':\n return 'channel'\n }\n }\n\n if (peer < 0) {\n if (MIN_MARKED_CHAT_ID <= peer) {\n return 'chat'\n }\n\n if (MIN_MARKED_CHANNEL_ID <= peer && peer !== ZERO_CHANNEL_ID) {\n return 'channel'\n }\n\n if (MAX_SECRET_CHAT_ID >= peer && peer !== ZERO_SECRET_CHAT_ID) {\n // return 'secret'\n throw new MtUnsupportedError('Secret chats are not supported')\n }\n } else if (peer > 0 && peer <= MAX_USER_ID) {\n return 'user'\n }\n\n throw new MtArgumentError(`Invalid marked peer id: ${peer}`)\n}\n\n/**\n * Extract bare peer ID from marked ID.\n *\n * @param peerId Marked peer ID\n */\nexport function markedPeerIdToBare(peerId: number): number {\n const type = getBasicPeerType(peerId)\n\n switch (type) {\n case 'user':\n return peerId\n case 'chat':\n return -peerId\n case 'channel':\n return toggleChannelIdMark(peerId)\n }\n}\n\n/**\n * Extracts all (cacheable) entities from a TlObject or a list of them.\n * Only checks `.user`, `.chat`, `.channel`, `.users` and `.chats` properties\n */\nexport function* getAllPeersFrom(obj: tl.TlObject | tl.TlObject[]): Iterable<tl.TypeUser | tl.TypeChat> {\n if (typeof obj !== 'object') return\n\n if (Array.isArray(obj)) {\n for (const it of obj) {\n yield* getAllPeersFrom(it)\n }\n\n return\n }\n\n switch (obj._) {\n case 'user':\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj\n\n return\n }\n\n if ('user' in obj && typeof obj.user === 'object' && obj.user._ === 'user') {\n yield obj.user\n }\n\n if ('chat' in obj && typeof obj.chat === 'object') {\n switch (obj.chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.chat\n break\n }\n }\n\n if ('channel' in obj && typeof obj.channel === 'object') {\n switch (obj.channel._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.channel\n break\n }\n }\n\n if ('users' in obj && Array.isArray(obj.users) && obj.users.length) {\n for (const user of obj.users) {\n // .users is sometimes number[]\n if (typeof user === 'object' && user._ === 'user') {\n yield user\n }\n }\n }\n\n if ('chats' in obj && Array.isArray(obj.chats) && obj.chats.length) {\n for (const chat of obj.chats) {\n // .chats is sometimes number[]\n if (typeof chat === 'object') {\n switch (chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield chat\n break\n }\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"peer-utils.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtUnsupportedError } from '../types/errors.js'\nimport { BasicPeerType } from '../types/peers.js'\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.h\nconst ZERO_CHANNEL_ID = -1000000000000\nconst ZERO_SECRET_CHAT_ID = -2000000000000\nconst MAX_SECRET_CHAT_ID = -1997852516353 // ZERO_SECRET_CHAT_ID + 0x7fffffff\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChatId.h\n// const MAX_CHAT_ID = 999999999999\nconst MIN_MARKED_CHAT_ID = -999999999999 // -MAX_CHAT_ID\n// src: https://github.com/tdlib/td/blob/master/td/telegram/UserId.h\n// MAX_USER_ID = (1ll << 40) - 1\nconst MAX_USER_ID = 1099511627775\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChannelId.h\n// the last (1 << 31) - 1 identifiers will be used for secret chat dialog identifiers\n// MAX_CHANNEL_ID = 1000000000000ll - (1ll << 31)\n// const MAX_CHANNEL_ID = 997852516352\nconst MIN_MARKED_CHANNEL_ID = -1997852516352 // ZERO_CHANNEL_ID - MAX_CHANNEL_ID\n\n/**\n * Add or remove channel marker from ID\n */\nexport function toggleChannelIdMark(id: number): number {\n return ZERO_CHANNEL_ID - id\n}\n\n/**\n * Get the bare (non-marked) ID from a {@link tl.TypePeer}\n */\nexport function getBarePeerId(peer: tl.TypePeer): number {\n switch (peer._) {\n case 'peerUser':\n return peer.userId\n case 'peerChat':\n return peer.chatId\n case 'peerChannel':\n return peer.channelId\n }\n}\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.cpp\n\n/**\n * Get the marked (non-bare) ID from a {@link tl.TypePeer}\n *\n * *Mark* is bot API compatible, which is:\n * - ID stays the same for users\n * - ID is negated for chats\n * - ID is negated and `-1e12` is subtracted for channels\n */\nexport function getMarkedPeerId(peerId: number, peerType: BasicPeerType): number\nexport function getMarkedPeerId(peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel): number\n\nexport function getMarkedPeerId(\n peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | number,\n peerType?: BasicPeerType,\n): number {\n if (typeof peer === 'number') {\n switch (peerType) {\n case 'user':\n return peer\n case 'chat':\n return -peer\n case 'channel':\n return ZERO_CHANNEL_ID - peer\n }\n throw new MtArgumentError('Invalid peer type')\n }\n\n switch (peer._) {\n case 'mtcute.dummyInputPeerMinUser':\n case 'peerUser':\n case 'inputPeerUser':\n case 'inputPeerUserFromMessage':\n case 'inputUser':\n case 'inputUserFromMessage':\n return peer.userId\n case 'peerChat':\n case 'inputPeerChat':\n return -peer.chatId\n case 'mtcute.dummyInputPeerMinChannel':\n case 'peerChannel':\n case 'inputPeerChannel':\n case 'inputPeerChannelFromMessage':\n case 'inputChannel':\n case 'inputChannelFromMessage':\n return ZERO_CHANNEL_ID - peer.channelId\n }\n\n throw new MtArgumentError(`Invalid peer: ${peer._}`)\n}\n\n/**\n * Extract basic peer type from {@link tl.TypePeer} or its marked ID.\n */\nexport function getBasicPeerType(peer: tl.TypePeer | number): BasicPeerType {\n if (typeof peer !== 'number') {\n switch (peer._) {\n case 'peerUser':\n return 'user'\n case 'peerChat':\n return 'chat'\n case 'peerChannel':\n return 'channel'\n }\n }\n\n if (peer < 0) {\n if (MIN_MARKED_CHAT_ID <= peer) {\n return 'chat'\n }\n\n if (MIN_MARKED_CHANNEL_ID <= peer && peer !== ZERO_CHANNEL_ID) {\n return 'channel'\n }\n\n if (MAX_SECRET_CHAT_ID >= peer && peer !== ZERO_SECRET_CHAT_ID) {\n // return 'secret'\n throw new MtUnsupportedError('Secret chats are not supported')\n }\n } else if (peer > 0 && peer <= MAX_USER_ID) {\n return 'user'\n }\n\n throw new MtArgumentError(`Invalid marked peer id: ${peer}`)\n}\n\n/**\n * Extract bare peer ID from marked ID.\n *\n * @param peerId Marked peer ID\n */\nexport function markedPeerIdToBare(peerId: number): number {\n const type = getBasicPeerType(peerId)\n\n switch (type) {\n case 'user':\n return peerId\n case 'chat':\n return -peerId\n case 'channel':\n return toggleChannelIdMark(peerId)\n }\n}\n\n/**\n * Extracts all (cacheable) entities from a TlObject or a list of them.\n * Only checks `.user`, `.chat`, `.channel`, `.users` and `.chats` properties\n */\nexport function* getAllPeersFrom(obj: tl.TlObject | tl.TlObject[]): Iterable<tl.TypeUser | tl.TypeChat> {\n if (typeof obj !== 'object') return\n\n if (Array.isArray(obj)) {\n for (const it of obj) {\n yield* getAllPeersFrom(it)\n }\n\n return\n }\n\n switch (obj._) {\n case 'user':\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj\n\n return\n }\n\n if ('user' in obj && typeof obj.user === 'object' && obj.user._ === 'user') {\n yield obj.user\n }\n\n if ('chat' in obj && typeof obj.chat === 'object') {\n switch (obj.chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.chat\n break\n }\n }\n\n if ('channel' in obj && typeof obj.channel === 'object') {\n switch (obj.channel._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.channel\n break\n }\n }\n\n if ('users' in obj && Array.isArray(obj.users) && obj.users.length) {\n for (const user of obj.users) {\n // .users is sometimes number[]\n if (typeof user === 'object' && user._ === 'user') {\n yield user\n }\n }\n }\n\n if ('chats' in obj && Array.isArray(obj.chats) && obj.chats.length) {\n for (const chat of obj.chats) {\n // .chats is sometimes number[]\n if (typeof chat === 'object') {\n switch (chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield chat\n break\n }\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const long_1 = __importDefault(require("long"));
|
|
7
|
+
const vitest_1 = require("vitest");
|
|
8
|
+
const test_1 = require("@mtcute/test");
|
|
9
|
+
const peer_utils_js_1 = require("./peer-utils.js");
|
|
10
|
+
const SOME_CHANNEL_ID = 1183945448;
|
|
11
|
+
const SOME_CHANNEL_ID_MARKED = -1001183945448;
|
|
12
|
+
(0, vitest_1.describe)('toggleChannelIdMark', () => {
|
|
13
|
+
(0, vitest_1.it)('should turn marked channel id into bare', () => {
|
|
14
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.toggleChannelIdMark)(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID);
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('should turn bare channel id into marked', () => {
|
|
17
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.toggleChannelIdMark)(SOME_CHANNEL_ID)).toEqual(SOME_CHANNEL_ID_MARKED);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.describe)('getBarePeerId', () => {
|
|
21
|
+
(0, vitest_1.it)('should return bare peer id from Peer', () => {
|
|
22
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBarePeerId)({ _: 'peerUser', userId: 123 })).toEqual(123);
|
|
23
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBarePeerId)({ _: 'peerChat', chatId: 456 })).toEqual(456);
|
|
24
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBarePeerId)({ _: 'peerChannel', channelId: 789 })).toEqual(789);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.describe)('getMarkedPeerId', () => {
|
|
28
|
+
(0, vitest_1.it)('should return marked peer id from bare and type', () => {
|
|
29
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)(123, 'user')).toEqual(123);
|
|
30
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)(456, 'chat')).toEqual(-456);
|
|
31
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)(SOME_CHANNEL_ID, 'channel')).toEqual(SOME_CHANNEL_ID_MARKED);
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('should throw on invalid type', () => {
|
|
34
|
+
// eslint-disable-next-line
|
|
35
|
+
(0, vitest_1.expect)(() => (0, peer_utils_js_1.getMarkedPeerId)(123, 'invalid')).toThrow();
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)('should return marked peer id from Peer', () => {
|
|
38
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'peerUser', userId: 123 })).toEqual(123);
|
|
39
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'peerChat', chatId: 456 })).toEqual(-456);
|
|
40
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual(SOME_CHANNEL_ID_MARKED);
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('should return marked peer id from Input*', () => {
|
|
43
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputPeerUser', userId: 123, accessHash: long_1.default.ZERO })).toEqual(123);
|
|
44
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputUser', userId: 123, accessHash: long_1.default.ZERO })).toEqual(123);
|
|
45
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputPeerChat', chatId: 456 })).toEqual(-456);
|
|
46
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputPeerChannel', channelId: SOME_CHANNEL_ID, accessHash: long_1.default.ZERO })).toEqual(SOME_CHANNEL_ID_MARKED);
|
|
47
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputChannel', channelId: SOME_CHANNEL_ID, accessHash: long_1.default.ZERO })).toEqual(SOME_CHANNEL_ID_MARKED);
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('should throw if peer does not have id', () => {
|
|
50
|
+
(0, vitest_1.expect)(() => (0, peer_utils_js_1.getMarkedPeerId)({ _: 'inputPeerSelf' })).toThrow();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.describe)('getBasicPeerType', () => {
|
|
54
|
+
(0, vitest_1.it)('should return basic peer type from Peer', () => {
|
|
55
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)({ _: 'peerUser', userId: 123 })).toEqual('user');
|
|
56
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)({ _: 'peerChat', chatId: 456 })).toEqual('chat');
|
|
57
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual('channel');
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('should return basic peer type from marked id', () => {
|
|
60
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)(123)).toEqual('user');
|
|
61
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)(-456)).toEqual('chat');
|
|
62
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.getBasicPeerType)(SOME_CHANNEL_ID_MARKED)).toEqual('channel');
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)('should throw for invalid marked ids', () => {
|
|
65
|
+
(0, vitest_1.expect)(() => (0, peer_utils_js_1.getBasicPeerType)(0)).toThrow('Invalid marked peer id');
|
|
66
|
+
// secret chats are not supported yet
|
|
67
|
+
(0, vitest_1.expect)(() => (0, peer_utils_js_1.getBasicPeerType)(-1997852516400)).toThrow('Secret chats are not supported');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.describe)('markedPeerIdToBare', () => {
|
|
71
|
+
(0, vitest_1.it)('should return bare peer id from marked id', () => {
|
|
72
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.markedPeerIdToBare)(123)).toEqual(123);
|
|
73
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.markedPeerIdToBare)(-456)).toEqual(456);
|
|
74
|
+
(0, vitest_1.expect)((0, peer_utils_js_1.markedPeerIdToBare)(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.describe)('getAllPeersFrom', () => {
|
|
78
|
+
const stubUser1 = (0, test_1.createStub)('user', { id: 123 });
|
|
79
|
+
const stubUser2 = (0, test_1.createStub)('user', { id: 456 });
|
|
80
|
+
const stubChat = (0, test_1.createStub)('chat', { id: 789 });
|
|
81
|
+
const stubChannel = (0, test_1.createStub)('channel', { id: 101112 });
|
|
82
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */
|
|
83
|
+
(0, vitest_1.it)('should find all peers from objects containing users/chats fields', () => {
|
|
84
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)({ users: [], chats: [] })]).toEqual([]);
|
|
85
|
+
(0, vitest_1.expect)([
|
|
86
|
+
...(0, peer_utils_js_1.getAllPeersFrom)({
|
|
87
|
+
users: [stubUser1, stubUser2],
|
|
88
|
+
chats: [stubChat, stubChannel],
|
|
89
|
+
}),
|
|
90
|
+
]).toEqual([stubUser1, stubUser2, stubChat, stubChannel]);
|
|
91
|
+
});
|
|
92
|
+
(0, vitest_1.it)('should extract peers from objects containing user/chat fields', () => {
|
|
93
|
+
(0, vitest_1.expect)([
|
|
94
|
+
...(0, peer_utils_js_1.getAllPeersFrom)({
|
|
95
|
+
user: stubUser2,
|
|
96
|
+
chat: stubChat,
|
|
97
|
+
channel: stubChannel,
|
|
98
|
+
}),
|
|
99
|
+
]).toEqual([stubUser2, stubChat, stubChannel]);
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.it)('should work for arrays', () => {
|
|
102
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)([{ user: stubUser1 }, { user: stubUser2 }])]).toEqual([stubUser1, stubUser2]);
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('should work for peer objects directly', () => {
|
|
105
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)(stubUser1)]).toEqual([stubUser1]);
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.it)('should ignore *Empty', () => {
|
|
108
|
+
(0, vitest_1.expect)([
|
|
109
|
+
...(0, peer_utils_js_1.getAllPeersFrom)({
|
|
110
|
+
users: [(0, test_1.createStub)('userEmpty')],
|
|
111
|
+
chats: [(0, test_1.createStub)('chatEmpty')],
|
|
112
|
+
}),
|
|
113
|
+
]).toEqual([]);
|
|
114
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)({ user: (0, test_1.createStub)('userEmpty'), chat: (0, test_1.createStub)('chatEmpty') })]).toEqual([]);
|
|
115
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)([(0, test_1.createStub)('userEmpty'), (0, test_1.createStub)('chatEmpty')])]).toEqual([]);
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.it)('should correctly handle users/chats fields of type number[]', () => {
|
|
118
|
+
(0, vitest_1.expect)([...(0, peer_utils_js_1.getAllPeersFrom)({ users: [123, 456], chats: [123, 456] })]).toEqual([]);
|
|
119
|
+
});
|
|
120
|
+
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=peer-utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-utils.test.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\nimport { describe, expect, it } from 'vitest'\n\nimport { createStub } from '@mtcute/test'\n\nimport {\n getAllPeersFrom,\n getBarePeerId,\n getBasicPeerType,\n getMarkedPeerId,\n markedPeerIdToBare,\n toggleChannelIdMark,\n} from './peer-utils.js'\n\nconst SOME_CHANNEL_ID = 1183945448\nconst SOME_CHANNEL_ID_MARKED = -1001183945448\n\ndescribe('toggleChannelIdMark', () => {\n it('should turn marked channel id into bare', () => {\n expect(toggleChannelIdMark(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID)\n })\n\n it('should turn bare channel id into marked', () => {\n expect(toggleChannelIdMark(SOME_CHANNEL_ID)).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n})\n\ndescribe('getBarePeerId', () => {\n it('should return bare peer id from Peer', () => {\n expect(getBarePeerId({ _: 'peerUser', userId: 123 })).toEqual(123)\n expect(getBarePeerId({ _: 'peerChat', chatId: 456 })).toEqual(456)\n expect(getBarePeerId({ _: 'peerChannel', channelId: 789 })).toEqual(789)\n })\n})\n\ndescribe('getMarkedPeerId', () => {\n it('should return marked peer id from bare and type', () => {\n expect(getMarkedPeerId(123, 'user')).toEqual(123)\n expect(getMarkedPeerId(456, 'chat')).toEqual(-456)\n expect(getMarkedPeerId(SOME_CHANNEL_ID, 'channel')).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n\n it('should throw on invalid type', () => {\n // eslint-disable-next-line\n expect(() => getMarkedPeerId(123, 'invalid' as any)).toThrow()\n })\n\n it('should return marked peer id from Peer', () => {\n expect(getMarkedPeerId({ _: 'peerUser', userId: 123 })).toEqual(123)\n expect(getMarkedPeerId({ _: 'peerChat', chatId: 456 })).toEqual(-456)\n expect(getMarkedPeerId({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n\n it('should return marked peer id from Input*', () => {\n expect(getMarkedPeerId({ _: 'inputPeerUser', userId: 123, accessHash: Long.ZERO })).toEqual(123)\n expect(getMarkedPeerId({ _: 'inputUser', userId: 123, accessHash: Long.ZERO })).toEqual(123)\n expect(getMarkedPeerId({ _: 'inputPeerChat', chatId: 456 })).toEqual(-456)\n expect(getMarkedPeerId({ _: 'inputPeerChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(\n SOME_CHANNEL_ID_MARKED,\n )\n expect(getMarkedPeerId({ _: 'inputChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(\n SOME_CHANNEL_ID_MARKED,\n )\n })\n\n it('should throw if peer does not have id', () => {\n expect(() => getMarkedPeerId({ _: 'inputPeerSelf' })).toThrow()\n })\n})\n\ndescribe('getBasicPeerType', () => {\n it('should return basic peer type from Peer', () => {\n expect(getBasicPeerType({ _: 'peerUser', userId: 123 })).toEqual('user')\n expect(getBasicPeerType({ _: 'peerChat', chatId: 456 })).toEqual('chat')\n expect(getBasicPeerType({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual('channel')\n })\n\n it('should return basic peer type from marked id', () => {\n expect(getBasicPeerType(123)).toEqual('user')\n expect(getBasicPeerType(-456)).toEqual('chat')\n expect(getBasicPeerType(SOME_CHANNEL_ID_MARKED)).toEqual('channel')\n })\n\n it('should throw for invalid marked ids', () => {\n expect(() => getBasicPeerType(0)).toThrow('Invalid marked peer id')\n\n // secret chats are not supported yet\n expect(() => getBasicPeerType(-1997852516400)).toThrow('Secret chats are not supported')\n })\n})\n\ndescribe('markedPeerIdToBare', () => {\n it('should return bare peer id from marked id', () => {\n expect(markedPeerIdToBare(123)).toEqual(123)\n expect(markedPeerIdToBare(-456)).toEqual(456)\n expect(markedPeerIdToBare(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID)\n })\n})\n\ndescribe('getAllPeersFrom', () => {\n const stubUser1 = createStub('user', { id: 123 })\n const stubUser2 = createStub('user', { id: 456 })\n const stubChat = createStub('chat', { id: 789 })\n const stubChannel = createStub('channel', { id: 101112 })\n\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n it('should find all peers from objects containing users/chats fields', () => {\n expect([...getAllPeersFrom({ users: [], chats: [] } as any)]).toEqual([])\n expect([\n ...getAllPeersFrom({\n users: [stubUser1, stubUser2],\n chats: [stubChat, stubChannel],\n } as any),\n ]).toEqual([stubUser1, stubUser2, stubChat, stubChannel])\n })\n\n it('should extract peers from objects containing user/chat fields', () => {\n expect([\n ...getAllPeersFrom({\n user: stubUser2,\n chat: stubChat,\n channel: stubChannel,\n } as any),\n ]).toEqual([stubUser2, stubChat, stubChannel])\n })\n\n it('should work for arrays', () => {\n expect([...getAllPeersFrom([{ user: stubUser1 }, { user: stubUser2 }] as any)]).toEqual([stubUser1, stubUser2])\n })\n\n it('should work for peer objects directly', () => {\n expect([...getAllPeersFrom(stubUser1)]).toEqual([stubUser1])\n })\n\n it('should ignore *Empty', () => {\n expect([\n ...getAllPeersFrom({\n users: [createStub('userEmpty')],\n chats: [createStub('chatEmpty')],\n } as any),\n ]).toEqual([])\n expect([...getAllPeersFrom({ user: createStub('userEmpty'), chat: createStub('chatEmpty') } as any)]).toEqual(\n [],\n )\n expect([...getAllPeersFrom([createStub('userEmpty'), createStub('chatEmpty')])]).toEqual([])\n })\n\n it('should correctly handle users/chats fields of type number[]', () => {\n expect([...getAllPeersFrom({ users: [123, 456], chats: [123, 456] } as any)]).toEqual([])\n })\n\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const sorted_array_js_1 = require("./sorted-array.js");
|
|
5
|
+
(0, vitest_1.describe)('SortedArray', () => {
|
|
6
|
+
const ascendingComparator = (a, b) => a - b;
|
|
7
|
+
(0, vitest_1.it)('should insert items in accordance with comparator', () => {
|
|
8
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
9
|
+
arr.insert(1);
|
|
10
|
+
arr.insert(2);
|
|
11
|
+
arr.insert(5);
|
|
12
|
+
arr.insert(3);
|
|
13
|
+
arr.insert(4);
|
|
14
|
+
(0, vitest_1.expect)(arr.raw).toEqual([1, 2, 3, 4, 5]);
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('should insert arrays', () => {
|
|
17
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
18
|
+
arr.insert([1, 2, 5, 3, 4]);
|
|
19
|
+
(0, vitest_1.expect)(arr.raw).toEqual([1, 2, 3, 4, 5]);
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('should return length', () => {
|
|
22
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
23
|
+
arr.insert(1);
|
|
24
|
+
arr.insert(2);
|
|
25
|
+
arr.insert(5);
|
|
26
|
+
(0, vitest_1.expect)(arr.length).toEqual(3);
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('should return index of the item', () => {
|
|
29
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
30
|
+
arr.insert(1);
|
|
31
|
+
arr.insert(2);
|
|
32
|
+
arr.insert(5);
|
|
33
|
+
(0, vitest_1.expect)(arr.index(1)).toEqual(0);
|
|
34
|
+
(0, vitest_1.expect)(arr.index(2)).toEqual(1);
|
|
35
|
+
(0, vitest_1.expect)(arr.index(5)).toEqual(2);
|
|
36
|
+
(0, vitest_1.expect)(arr.index(10)).toEqual(-1);
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)('should return closest index for an item not in the array', () => {
|
|
39
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
40
|
+
arr.insert(1);
|
|
41
|
+
arr.insert(2);
|
|
42
|
+
arr.insert(5);
|
|
43
|
+
(0, vitest_1.expect)(arr.index(3, true)).toEqual(2);
|
|
44
|
+
(0, vitest_1.expect)(arr.index(4, true)).toEqual(2); // still 2, becuse left-hand side
|
|
45
|
+
(0, vitest_1.expect)(arr.index(6, true)).toEqual(3);
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('should remove items by value', () => {
|
|
48
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
49
|
+
arr.insert(1);
|
|
50
|
+
arr.insert(2);
|
|
51
|
+
arr.insert(5);
|
|
52
|
+
arr.remove(2);
|
|
53
|
+
(0, vitest_1.expect)(arr.raw).toEqual([1, 5]);
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('should check if item is in array', () => {
|
|
56
|
+
const arr = new sorted_array_js_1.SortedArray([], ascendingComparator);
|
|
57
|
+
arr.insert(1);
|
|
58
|
+
arr.insert(2);
|
|
59
|
+
arr.insert(5);
|
|
60
|
+
(0, vitest_1.expect)(arr.includes(1)).toBeTruthy();
|
|
61
|
+
(0, vitest_1.expect)(arr.includes(2)).toBeTruthy();
|
|
62
|
+
(0, vitest_1.expect)(arr.includes(5)).toBeTruthy();
|
|
63
|
+
(0, vitest_1.expect)(arr.includes(10)).toBeFalsy();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=sorted-array.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorted-array.test.js","sourceRoot":"","sources":["../../../src/utils/sorted-array.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { SortedArray } from './sorted-array.js'\n\ndescribe('SortedArray', () => {\n const ascendingComparator = (a: number, b: number) => a - b\n\n it('should insert items in accordance with comparator', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n arr.insert(3)\n arr.insert(4)\n\n expect(arr.raw).toEqual([1, 2, 3, 4, 5])\n })\n\n it('should insert arrays', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert([1, 2, 5, 3, 4])\n\n expect(arr.raw).toEqual([1, 2, 3, 4, 5])\n })\n\n it('should return length', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.length).toEqual(3)\n })\n\n it('should return index of the item', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.index(1)).toEqual(0)\n expect(arr.index(2)).toEqual(1)\n expect(arr.index(5)).toEqual(2)\n expect(arr.index(10)).toEqual(-1)\n })\n\n it('should return closest index for an item not in the array', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.index(3, true)).toEqual(2)\n expect(arr.index(4, true)).toEqual(2) // still 2, becuse left-hand side\n expect(arr.index(6, true)).toEqual(3)\n })\n\n it('should remove items by value', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n arr.remove(2)\n\n expect(arr.raw).toEqual([1, 5])\n })\n\n it('should check if item is in array', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.includes(1)).toBeTruthy()\n expect(arr.includes(2)).toBeTruthy()\n expect(arr.includes(5)).toBeTruthy()\n expect(arr.includes(10)).toBeFalsy()\n })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|