@mtcute/core 0.1.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/LICENSE +8 -0
- package/README.md +26 -0
- package/cjs/base-client.d.ts +297 -0
- package/cjs/base-client.js +324 -0
- package/cjs/base-client.js.map +1 -0
- package/cjs/index.d.ts +10 -0
- package/cjs/index.js +30 -0
- package/cjs/index.js.map +1 -0
- package/cjs/network/auth-key.d.ts +21 -0
- package/cjs/network/auth-key.js +101 -0
- package/cjs/network/auth-key.js.map +1 -0
- package/cjs/network/authorization.d.ts +9 -0
- package/cjs/network/authorization.js +332 -0
- package/cjs/network/authorization.js.map +1 -0
- package/cjs/network/config-manager.d.ts +33 -0
- package/cjs/network/config-manager.js +93 -0
- package/cjs/network/config-manager.js.map +1 -0
- package/cjs/network/index.d.ts +4 -0
- package/cjs/network/index.js +20 -0
- package/cjs/network/index.js.map +1 -0
- package/cjs/network/mtproto-session.d.ts +116 -0
- package/cjs/network/mtproto-session.js +209 -0
- package/cjs/network/mtproto-session.js.map +1 -0
- package/cjs/network/multi-session-connection.d.ts +33 -0
- package/cjs/network/multi-session-connection.js +243 -0
- package/cjs/network/multi-session-connection.js.map +1 -0
- package/cjs/network/network-manager.d.ts +190 -0
- package/cjs/network/network-manager.js +547 -0
- package/cjs/network/network-manager.js.map +1 -0
- package/cjs/network/persistent-connection.d.ts +51 -0
- package/cjs/network/persistent-connection.js +173 -0
- package/cjs/network/persistent-connection.js.map +1 -0
- package/cjs/network/reconnection.d.ts +11 -0
- package/cjs/network/reconnection.js +18 -0
- package/cjs/network/reconnection.js.map +1 -0
- package/cjs/network/session-connection.d.ts +72 -0
- package/cjs/network/session-connection.js +1363 -0
- package/cjs/network/session-connection.js.map +1 -0
- package/cjs/network/transports/abstract.d.ts +99 -0
- package/cjs/network/transports/abstract.js +38 -0
- package/cjs/network/transports/abstract.js.map +1 -0
- package/cjs/network/transports/index.d.ts +8 -0
- package/cjs/network/transports/index.js +26 -0
- package/cjs/network/transports/index.js.map +1 -0
- package/cjs/network/transports/intermediate.d.ts +20 -0
- package/cjs/network/transports/intermediate.js +67 -0
- package/cjs/network/transports/intermediate.js.map +1 -0
- package/cjs/network/transports/obfuscated.d.ts +18 -0
- package/cjs/network/transports/obfuscated.js +83 -0
- package/cjs/network/transports/obfuscated.js.map +1 -0
- package/cjs/network/transports/streamed.d.ts +24 -0
- package/cjs/network/transports/streamed.js +32 -0
- package/cjs/network/transports/streamed.js.map +1 -0
- package/cjs/network/transports/tcp.d.ts +33 -0
- package/cjs/network/transports/tcp.js +130 -0
- package/cjs/network/transports/tcp.js.map +1 -0
- package/cjs/network/transports/websocket.d.ts +47 -0
- package/cjs/network/transports/websocket.js +124 -0
- package/cjs/network/transports/websocket.js.map +1 -0
- package/cjs/network/transports/wrapped.d.ts +11 -0
- package/cjs/network/transports/wrapped.js +26 -0
- package/cjs/network/transports/wrapped.js.map +1 -0
- package/cjs/package.json +3 -0
- package/cjs/storage/abstract.d.ts +174 -0
- package/cjs/storage/abstract.js +3 -0
- package/cjs/storage/abstract.js.map +1 -0
- package/cjs/storage/index.d.ts +5 -0
- package/cjs/storage/index.js +22 -0
- package/cjs/storage/index.js.map +1 -0
- package/cjs/storage/json-file.d.ts +31 -0
- package/cjs/storage/json-file.js +90 -0
- package/cjs/storage/json-file.js.map +1 -0
- package/cjs/storage/json.d.ts +9 -0
- package/cjs/storage/json.js +65 -0
- package/cjs/storage/json.js.map +1 -0
- package/cjs/storage/localstorage.d.ts +7 -0
- package/cjs/storage/localstorage.js +25 -0
- package/cjs/storage/localstorage.js.map +1 -0
- package/cjs/storage/memory.d.ts +98 -0
- package/cjs/storage/memory.js +299 -0
- package/cjs/storage/memory.js.map +1 -0
- package/cjs/types/errors.d.ts +53 -0
- package/cjs/types/errors.js +58 -0
- package/cjs/types/errors.js.map +1 -0
- package/cjs/types/index.d.ts +3 -0
- package/cjs/types/index.js +20 -0
- package/cjs/types/index.js.map +1 -0
- package/cjs/types/peers.d.ts +4 -0
- package/cjs/types/peers.js +3 -0
- package/cjs/types/peers.js.map +1 -0
- package/cjs/types/utils.d.ts +6 -0
- package/cjs/types/utils.js +9 -0
- package/cjs/types/utils.js.map +1 -0
- package/cjs/utils/async-lock.d.ts +10 -0
- package/cjs/utils/async-lock.js +43 -0
- package/cjs/utils/async-lock.js.map +1 -0
- package/cjs/utils/bigint-utils.d.ts +40 -0
- package/cjs/utils/bigint-utils.js +104 -0
- package/cjs/utils/bigint-utils.js.map +1 -0
- package/cjs/utils/binary/asn1-parser.d.ts +17 -0
- package/cjs/utils/binary/asn1-parser.js +121 -0
- package/cjs/utils/binary/asn1-parser.js.map +1 -0
- package/cjs/utils/buffer-utils.d.ts +21 -0
- package/cjs/utils/buffer-utils.js +63 -0
- package/cjs/utils/buffer-utils.js.map +1 -0
- package/cjs/utils/condition-variable.d.ts +9 -0
- package/cjs/utils/condition-variable.js +28 -0
- package/cjs/utils/condition-variable.js.map +1 -0
- package/cjs/utils/controllable-promise.d.ts +16 -0
- package/cjs/utils/controllable-promise.js +25 -0
- package/cjs/utils/controllable-promise.js.map +1 -0
- package/cjs/utils/crypto/abstract.d.ts +23 -0
- package/cjs/utils/crypto/abstract.js +19 -0
- package/cjs/utils/crypto/abstract.js.map +1 -0
- package/cjs/utils/crypto/common.d.ts +12 -0
- package/cjs/utils/crypto/common.js +54 -0
- package/cjs/utils/crypto/common.js.map +1 -0
- package/cjs/utils/crypto/factorization.d.ts +5 -0
- package/cjs/utils/crypto/factorization.js +69 -0
- package/cjs/utils/crypto/factorization.js.map +1 -0
- package/cjs/utils/crypto/index.d.ts +5 -0
- package/cjs/utils/crypto/index.js +23 -0
- package/cjs/utils/crypto/index.js.map +1 -0
- package/cjs/utils/crypto/keys.d.ts +27 -0
- package/cjs/utils/crypto/keys.js +70 -0
- package/cjs/utils/crypto/keys.js.map +1 -0
- package/cjs/utils/crypto/miller-rabin.d.ts +2 -0
- package/cjs/utils/crypto/miller-rabin.js +44 -0
- package/cjs/utils/crypto/miller-rabin.js.map +1 -0
- package/cjs/utils/crypto/mtproto.d.ts +31 -0
- package/cjs/utils/crypto/mtproto.js +66 -0
- package/cjs/utils/crypto/mtproto.js.map +1 -0
- package/cjs/utils/crypto/node-crypto.d.ts +10 -0
- package/cjs/utils/crypto/node-crypto.js +46 -0
- package/cjs/utils/crypto/node-crypto.js.map +1 -0
- package/cjs/utils/crypto/password.d.ts +29 -0
- package/cjs/utils/crypto/password.js +106 -0
- package/cjs/utils/crypto/password.js.map +1 -0
- package/cjs/utils/crypto/subtle.d.ts +12 -0
- package/cjs/utils/crypto/subtle.js +86 -0
- package/cjs/utils/crypto/subtle.js.map +1 -0
- package/cjs/utils/crypto/utils.d.ts +14 -0
- package/cjs/utils/crypto/utils.js +30 -0
- package/cjs/utils/crypto/utils.js.map +1 -0
- package/cjs/utils/default-dcs.d.ts +7 -0
- package/cjs/utils/default-dcs.js +76 -0
- package/cjs/utils/default-dcs.js.map +1 -0
- package/cjs/utils/deque.d.ts +29 -0
- package/cjs/utils/deque.js +210 -0
- package/cjs/utils/deque.js.map +1 -0
- package/cjs/utils/early-timer.d.ts +42 -0
- package/cjs/utils/early-timer.js +79 -0
- package/cjs/utils/early-timer.js.map +1 -0
- package/cjs/utils/flood-control.d.ts +14 -0
- package/cjs/utils/flood-control.js +65 -0
- package/cjs/utils/flood-control.js.map +1 -0
- package/cjs/utils/function-utils.d.ts +13 -0
- package/cjs/utils/function-utils.js +30 -0
- package/cjs/utils/function-utils.js.map +1 -0
- package/cjs/utils/index.d.ts +24 -0
- package/cjs/utils/index.js +41 -0
- package/cjs/utils/index.js.map +1 -0
- package/cjs/utils/linked-list.d.ts +21 -0
- package/cjs/utils/linked-list.js +73 -0
- package/cjs/utils/linked-list.js.map +1 -0
- package/cjs/utils/links/bots.d.ts +71 -0
- package/cjs/utils/links/bots.js +259 -0
- package/cjs/utils/links/bots.js.map +1 -0
- package/cjs/utils/links/bundle.d.ts +7 -0
- package/cjs/utils/links/bundle.js +24 -0
- package/cjs/utils/links/bundle.js.map +1 -0
- package/cjs/utils/links/calls.d.ts +16 -0
- package/cjs/utils/links/calls.js +59 -0
- package/cjs/utils/links/calls.js.map +1 -0
- package/cjs/utils/links/chat.d.ts +46 -0
- package/cjs/utils/links/chat.js +160 -0
- package/cjs/utils/links/chat.js.map +1 -0
- package/cjs/utils/links/common.d.ts +31 -0
- package/cjs/utils/links/common.js +60 -0
- package/cjs/utils/links/common.js.map +1 -0
- package/cjs/utils/links/index.d.ts +2 -0
- package/cjs/utils/links/index.js +29 -0
- package/cjs/utils/links/index.js.map +1 -0
- package/cjs/utils/links/misc.d.ts +19 -0
- package/cjs/utils/links/misc.js +77 -0
- package/cjs/utils/links/misc.js.map +1 -0
- package/cjs/utils/links/proxy.d.ts +17 -0
- package/cjs/utils/links/proxy.js +61 -0
- package/cjs/utils/links/proxy.js.map +1 -0
- package/cjs/utils/links/stickers.d.ts +9 -0
- package/cjs/utils/links/stickers.js +28 -0
- package/cjs/utils/links/stickers.js.map +1 -0
- package/cjs/utils/links/user.d.ts +27 -0
- package/cjs/utils/links/user.js +81 -0
- package/cjs/utils/links/user.js.map +1 -0
- package/cjs/utils/logger.d.ts +54 -0
- package/cjs/utils/logger.js +158 -0
- package/cjs/utils/logger.js.map +1 -0
- package/cjs/utils/long-utils.d.ts +75 -0
- package/cjs/utils/long-utils.js +161 -0
- package/cjs/utils/long-utils.js.map +1 -0
- package/cjs/utils/lru-map.d.ts +21 -0
- package/cjs/utils/lru-map.js +107 -0
- package/cjs/utils/lru-map.js.map +1 -0
- package/cjs/utils/lru-set.d.ts +22 -0
- package/cjs/utils/lru-set.js +48 -0
- package/cjs/utils/lru-set.js.map +1 -0
- package/cjs/utils/misc-utils.d.ts +7 -0
- package/cjs/utils/misc-utils.js +15 -0
- package/cjs/utils/misc-utils.js.map +1 -0
- package/cjs/utils/peer-utils.d.ts +35 -0
- package/cjs/utils/peer-utils.js +188 -0
- package/cjs/utils/peer-utils.js.map +1 -0
- package/cjs/utils/platform/crypto.d.ts +1 -0
- package/cjs/utils/platform/crypto.js +8 -0
- package/cjs/utils/platform/crypto.js.map +1 -0
- package/cjs/utils/platform/crypto.web.d.ts +1 -0
- package/cjs/utils/platform/crypto.web.js +14 -0
- package/cjs/utils/platform/crypto.web.js.map +1 -0
- package/cjs/utils/platform/error-reporting.d.ts +3 -0
- package/cjs/utils/platform/error-reporting.js +22 -0
- package/cjs/utils/platform/error-reporting.js.map +1 -0
- package/cjs/utils/platform/logging.d.ts +1 -0
- package/cjs/utils/platform/logging.js +35 -0
- package/cjs/utils/platform/logging.js.map +1 -0
- package/cjs/utils/platform/logging.web.d.ts +1 -0
- package/cjs/utils/platform/logging.web.js +35 -0
- package/cjs/utils/platform/logging.web.js.map +1 -0
- package/cjs/utils/platform/random.d.ts +1 -0
- package/cjs/utils/platform/random.js +7 -0
- package/cjs/utils/platform/random.js.map +1 -0
- package/cjs/utils/platform/random.web.d.ts +1 -0
- package/cjs/utils/platform/random.web.js +10 -0
- package/cjs/utils/platform/random.web.js.map +1 -0
- package/cjs/utils/platform/transport.d.ts +1 -0
- package/cjs/utils/platform/transport.js +8 -0
- package/cjs/utils/platform/transport.js.map +1 -0
- package/cjs/utils/platform/transport.web.d.ts +1 -0
- package/cjs/utils/platform/transport.web.js +15 -0
- package/cjs/utils/platform/transport.web.js.map +1 -0
- package/cjs/utils/sorted-array.d.ts +17 -0
- package/cjs/utils/sorted-array.js +83 -0
- package/cjs/utils/sorted-array.js.map +1 -0
- package/cjs/utils/string-session.d.ts +11 -0
- package/cjs/utils/string-session.js +73 -0
- package/cjs/utils/string-session.js.map +1 -0
- package/cjs/utils/tl-json.d.ts +13 -0
- package/cjs/utils/tl-json.js +62 -0
- package/cjs/utils/tl-json.js.map +1 -0
- package/cjs/utils/type-assertions.d.ts +37 -0
- package/cjs/utils/type-assertions.js +70 -0
- package/cjs/utils/type-assertions.js.map +1 -0
- package/esm/base-client.d.ts +297 -0
- package/esm/base-client.js +317 -0
- package/esm/base-client.js.map +1 -0
- package/esm/index.d.ts +10 -0
- package/esm/index.js +11 -0
- package/esm/index.js.map +1 -0
- package/esm/network/auth-key.d.ts +21 -0
- package/esm/network/auth-key.js +97 -0
- package/esm/network/auth-key.js.map +1 -0
- package/esm/network/authorization.d.ts +9 -0
- package/esm/network/authorization.js +325 -0
- package/esm/network/authorization.js.map +1 -0
- package/esm/network/config-manager.d.ts +33 -0
- package/esm/network/config-manager.js +89 -0
- package/esm/network/config-manager.js.map +1 -0
- package/esm/network/index.d.ts +4 -0
- package/esm/network/index.js +4 -0
- package/esm/network/index.js.map +1 -0
- package/esm/network/mtproto-session.d.ts +116 -0
- package/esm/network/mtproto-session.js +202 -0
- package/esm/network/mtproto-session.js.map +1 -0
- package/esm/network/multi-session-connection.d.ts +33 -0
- package/esm/network/multi-session-connection.js +236 -0
- package/esm/network/multi-session-connection.js.map +1 -0
- package/esm/network/network-manager.d.ts +190 -0
- package/esm/network/network-manager.js +542 -0
- package/esm/network/network-manager.js.map +1 -0
- package/esm/network/persistent-connection.d.ts +51 -0
- package/esm/network/persistent-connection.js +166 -0
- package/esm/network/persistent-connection.js.map +1 -0
- package/esm/network/reconnection.d.ts +11 -0
- package/esm/network/reconnection.js +14 -0
- package/esm/network/reconnection.js.map +1 -0
- package/esm/network/session-connection.d.ts +72 -0
- package/esm/network/session-connection.js +1356 -0
- package/esm/network/session-connection.js.map +1 -0
- package/esm/network/transports/abstract.d.ts +99 -0
- package/esm/network/transports/abstract.js +34 -0
- package/esm/network/transports/abstract.js.map +1 -0
- package/esm/network/transports/index.d.ts +8 -0
- package/esm/network/transports/index.js +9 -0
- package/esm/network/transports/index.js.map +1 -0
- package/esm/network/transports/intermediate.d.ts +20 -0
- package/esm/network/transports/intermediate.js +62 -0
- package/esm/network/transports/intermediate.js.map +1 -0
- package/esm/network/transports/obfuscated.d.ts +18 -0
- package/esm/network/transports/obfuscated.js +79 -0
- package/esm/network/transports/obfuscated.js.map +1 -0
- package/esm/network/transports/streamed.d.ts +24 -0
- package/esm/network/transports/streamed.js +25 -0
- package/esm/network/transports/streamed.js.map +1 -0
- package/esm/network/transports/tcp.d.ts +33 -0
- package/esm/network/transports/tcp.js +122 -0
- package/esm/network/transports/tcp.js.map +1 -0
- package/esm/network/transports/websocket.d.ts +47 -0
- package/esm/network/transports/websocket.js +116 -0
- package/esm/network/transports/websocket.js.map +1 -0
- package/esm/network/transports/wrapped.d.ts +11 -0
- package/esm/network/transports/wrapped.js +19 -0
- package/esm/network/transports/wrapped.js.map +1 -0
- package/esm/storage/abstract.d.ts +174 -0
- package/esm/storage/abstract.js +2 -0
- package/esm/storage/abstract.js.map +1 -0
- package/esm/storage/index.d.ts +5 -0
- package/esm/storage/index.js +6 -0
- package/esm/storage/index.js.map +1 -0
- package/esm/storage/json-file.d.ts +31 -0
- package/esm/storage/json-file.js +63 -0
- package/esm/storage/json-file.js.map +1 -0
- package/esm/storage/json.d.ts +9 -0
- package/esm/storage/json.js +61 -0
- package/esm/storage/json.js.map +1 -0
- package/esm/storage/localstorage.d.ts +7 -0
- package/esm/storage/localstorage.js +21 -0
- package/esm/storage/localstorage.js.map +1 -0
- package/esm/storage/memory.d.ts +98 -0
- package/esm/storage/memory.js +295 -0
- package/esm/storage/memory.js.map +1 -0
- package/esm/types/errors.d.ts +53 -0
- package/esm/types/errors.js +49 -0
- package/esm/types/errors.js.map +1 -0
- package/esm/types/index.d.ts +3 -0
- package/esm/types/index.js +4 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/peers.d.ts +4 -0
- package/esm/types/peers.js +2 -0
- package/esm/types/peers.js.map +1 -0
- package/esm/types/utils.d.ts +6 -0
- package/esm/types/utils.js +5 -0
- package/esm/types/utils.js.map +1 -0
- package/esm/utils/async-lock.d.ts +10 -0
- package/esm/utils/async-lock.js +39 -0
- package/esm/utils/async-lock.js.map +1 -0
- package/esm/utils/bigint-utils.d.ts +40 -0
- package/esm/utils/bigint-utils.js +92 -0
- package/esm/utils/bigint-utils.js.map +1 -0
- package/esm/utils/binary/asn1-parser.d.ts +17 -0
- package/esm/utils/binary/asn1-parser.js +116 -0
- package/esm/utils/binary/asn1-parser.js.map +1 -0
- package/esm/utils/buffer-utils.d.ts +21 -0
- package/esm/utils/buffer-utils.js +55 -0
- package/esm/utils/buffer-utils.js.map +1 -0
- package/esm/utils/condition-variable.d.ts +9 -0
- package/esm/utils/condition-variable.js +24 -0
- package/esm/utils/condition-variable.js.map +1 -0
- package/esm/utils/controllable-promise.d.ts +16 -0
- package/esm/utils/controllable-promise.js +20 -0
- package/esm/utils/controllable-promise.js.map +1 -0
- package/esm/utils/crypto/abstract.d.ts +23 -0
- package/esm/utils/crypto/abstract.js +15 -0
- package/esm/utils/crypto/abstract.js.map +1 -0
- package/esm/utils/crypto/common.d.ts +12 -0
- package/esm/utils/crypto/common.js +50 -0
- package/esm/utils/crypto/common.js.map +1 -0
- package/esm/utils/crypto/factorization.d.ts +5 -0
- package/esm/utils/crypto/factorization.js +62 -0
- package/esm/utils/crypto/factorization.js.map +1 -0
- package/esm/utils/crypto/index.d.ts +5 -0
- package/esm/utils/crypto/index.js +6 -0
- package/esm/utils/crypto/index.js.map +1 -0
- package/esm/utils/crypto/keys.d.ts +27 -0
- package/esm/utils/crypto/keys.js +64 -0
- package/esm/utils/crypto/keys.js.map +1 -0
- package/esm/utils/crypto/miller-rabin.d.ts +2 -0
- package/esm/utils/crypto/miller-rabin.js +37 -0
- package/esm/utils/crypto/miller-rabin.js.map +1 -0
- package/esm/utils/crypto/mtproto.d.ts +31 -0
- package/esm/utils/crypto/mtproto.js +60 -0
- package/esm/utils/crypto/mtproto.js.map +1 -0
- package/esm/utils/crypto/node-crypto.d.ts +10 -0
- package/esm/utils/crypto/node-crypto.js +42 -0
- package/esm/utils/crypto/node-crypto.js.map +1 -0
- package/esm/utils/crypto/password.d.ts +29 -0
- package/esm/utils/crypto/password.js +97 -0
- package/esm/utils/crypto/password.js.map +1 -0
- package/esm/utils/crypto/subtle.d.ts +12 -0
- package/esm/utils/crypto/subtle.js +59 -0
- package/esm/utils/crypto/subtle.js.map +1 -0
- package/esm/utils/crypto/utils.d.ts +14 -0
- package/esm/utils/crypto/utils.js +25 -0
- package/esm/utils/crypto/utils.js.map +1 -0
- package/esm/utils/default-dcs.d.ts +7 -0
- package/esm/utils/default-dcs.js +73 -0
- package/esm/utils/default-dcs.js.map +1 -0
- package/esm/utils/deque.d.ts +29 -0
- package/esm/utils/deque.js +206 -0
- package/esm/utils/deque.js.map +1 -0
- package/esm/utils/early-timer.d.ts +42 -0
- package/esm/utils/early-timer.js +75 -0
- package/esm/utils/early-timer.js.map +1 -0
- package/esm/utils/flood-control.d.ts +14 -0
- package/esm/utils/flood-control.js +61 -0
- package/esm/utils/flood-control.js.map +1 -0
- package/esm/utils/function-utils.d.ts +13 -0
- package/esm/utils/function-utils.js +26 -0
- package/esm/utils/function-utils.js.map +1 -0
- package/esm/utils/index.d.ts +24 -0
- package/esm/utils/index.js +25 -0
- package/esm/utils/index.js.map +1 -0
- package/esm/utils/linked-list.d.ts +21 -0
- package/esm/utils/linked-list.js +69 -0
- package/esm/utils/linked-list.js.map +1 -0
- package/esm/utils/links/bots.d.ts +71 -0
- package/esm/utils/links/bots.js +256 -0
- package/esm/utils/links/bots.js.map +1 -0
- package/esm/utils/links/bundle.d.ts +7 -0
- package/esm/utils/links/bundle.js +8 -0
- package/esm/utils/links/bundle.js.map +1 -0
- package/esm/utils/links/calls.d.ts +16 -0
- package/esm/utils/links/calls.js +56 -0
- package/esm/utils/links/calls.js.map +1 -0
- package/esm/utils/links/chat.d.ts +46 -0
- package/esm/utils/links/chat.js +157 -0
- package/esm/utils/links/chat.js.map +1 -0
- package/esm/utils/links/common.d.ts +31 -0
- package/esm/utils/links/common.js +56 -0
- package/esm/utils/links/common.js.map +1 -0
- package/esm/utils/links/index.d.ts +2 -0
- package/esm/utils/links/index.js +3 -0
- package/esm/utils/links/index.js.map +1 -0
- package/esm/utils/links/misc.d.ts +19 -0
- package/esm/utils/links/misc.js +74 -0
- package/esm/utils/links/misc.js.map +1 -0
- package/esm/utils/links/proxy.d.ts +17 -0
- package/esm/utils/links/proxy.js +58 -0
- package/esm/utils/links/proxy.js.map +1 -0
- package/esm/utils/links/stickers.d.ts +9 -0
- package/esm/utils/links/stickers.js +25 -0
- package/esm/utils/links/stickers.js.map +1 -0
- package/esm/utils/links/user.d.ts +27 -0
- package/esm/utils/links/user.js +78 -0
- package/esm/utils/links/user.js.map +1 -0
- package/esm/utils/logger.d.ts +54 -0
- package/esm/utils/logger.js +154 -0
- package/esm/utils/logger.js.map +1 -0
- package/esm/utils/long-utils.d.ts +75 -0
- package/esm/utils/long-utils.js +148 -0
- package/esm/utils/long-utils.js.map +1 -0
- package/esm/utils/lru-map.d.ts +21 -0
- package/esm/utils/lru-map.js +103 -0
- package/esm/utils/lru-map.js.map +1 -0
- package/esm/utils/lru-set.d.ts +22 -0
- package/esm/utils/lru-set.js +44 -0
- package/esm/utils/lru-set.js.map +1 -0
- package/esm/utils/misc-utils.d.ts +7 -0
- package/esm/utils/misc-utils.js +10 -0
- package/esm/utils/misc-utils.js.map +1 -0
- package/esm/utils/peer-utils.d.ts +35 -0
- package/esm/utils/peer-utils.js +179 -0
- package/esm/utils/peer-utils.js.map +1 -0
- package/esm/utils/platform/crypto.d.ts +1 -0
- package/esm/utils/platform/crypto.js +4 -0
- package/esm/utils/platform/crypto.js.map +1 -0
- package/esm/utils/platform/crypto.web.d.ts +1 -0
- package/esm/utils/platform/crypto.web.js +10 -0
- package/esm/utils/platform/crypto.web.js.map +1 -0
- package/esm/utils/platform/error-reporting.d.ts +3 -0
- package/esm/utils/platform/error-reporting.js +18 -0
- package/esm/utils/platform/error-reporting.js.map +1 -0
- package/esm/utils/platform/logging.d.ts +1 -0
- package/esm/utils/platform/logging.js +32 -0
- package/esm/utils/platform/logging.js.map +1 -0
- package/esm/utils/platform/logging.web.d.ts +1 -0
- package/esm/utils/platform/logging.web.js +31 -0
- package/esm/utils/platform/logging.web.js.map +1 -0
- package/esm/utils/platform/random.d.ts +1 -0
- package/esm/utils/platform/random.js +4 -0
- package/esm/utils/platform/random.js.map +1 -0
- package/esm/utils/platform/random.web.d.ts +1 -0
- package/esm/utils/platform/random.web.js +6 -0
- package/esm/utils/platform/random.web.js.map +1 -0
- package/esm/utils/platform/transport.d.ts +1 -0
- package/esm/utils/platform/transport.js +4 -0
- package/esm/utils/platform/transport.js.map +1 -0
- package/esm/utils/platform/transport.web.d.ts +1 -0
- package/esm/utils/platform/transport.web.js +12 -0
- package/esm/utils/platform/transport.web.js.map +1 -0
- package/esm/utils/sorted-array.d.ts +17 -0
- package/esm/utils/sorted-array.js +79 -0
- package/esm/utils/sorted-array.js.map +1 -0
- package/esm/utils/string-session.d.ts +11 -0
- package/esm/utils/string-session.js +68 -0
- package/esm/utils/string-session.js.map +1 -0
- package/esm/utils/tl-json.d.ts +13 -0
- package/esm/utils/tl-json.js +57 -0
- package/esm/utils/tl-json.js.map +1 -0
- package/esm/utils/type-assertions.d.ts +37 -0
- package/esm/utils/type-assertions.js +61 -0
- package/esm/utils/type-assertions.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../../src/utils/links/user.ts"],"names":[],"mappings":"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","sourcesContent":["import { deeplinkBuilder } from './common.js'\n\n/**\n * Public username links\n *\n * Used to link to public users, groups and channels\n */\nexport const publicUsername = deeplinkBuilder<{ username: string }>({\n internalBuild: ({ username }) => ['resolve', { domain: username }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const domain = query.get('domain')\n if (!domain) return null\n\n // might be some more precise deeplink\n if ([...query.keys()].length > 1) return null\n\n return { username: domain }\n },\n externalBuild: ({ username }) => [username, null],\n externalParse: (path, query) => {\n if (path.length <= 1 || path.includes('/') || path[0] === '+') return null\n\n if ([...query.keys()].length > 0) return null\n\n return { username: path }\n },\n})\n\n/**\n * Temporary profile links\n *\n * Used to link to user profiles, generated using contacts.exportContactToken.\n * These links can be generated even for profiles that don't have a username,\n * and they have an expiration date, specified by the expires field of the exportedContactToken\n * constructor returned by contacts.exportContactToken.\n */\nexport const temporaryProfile = deeplinkBuilder<{ token: string }>({\n internalBuild: ({ token }) => ['contact', { token }],\n internalParse: (path, query) => {\n if (path !== 'contact') return null\n\n const token = query.get('token')\n if (!token) return null\n\n return { token }\n },\n externalBuild: ({ token }) => [`contact/${token}`, null],\n externalParse: (path) => {\n const [prefix, token] = path.split('/')\n if (prefix !== 'contact') return null\n\n return { token }\n },\n})\n\n/**\n * Phone number links\n *\n * Used to link to public and private users by their phone number.\n */\nexport const phoneNumber = deeplinkBuilder<{ phone: string }>({\n internalBuild: ({ phone }) => ['resolve', { phone }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const phone = query.get('phone')\n if (!phone) return null\n\n return { phone }\n },\n externalBuild: ({ phone }) => [`+${phone}`, null],\n externalParse: (path) => {\n const m = path.match(/^\\+(\\d+)$/)\n if (!m) return null\n\n return { phone: m[1] }\n },\n})\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger created by {@link LogManager}
|
|
3
|
+
*/
|
|
4
|
+
export declare class Logger {
|
|
5
|
+
readonly mgr: LogManager;
|
|
6
|
+
readonly tag: string;
|
|
7
|
+
readonly parent: Logger;
|
|
8
|
+
private color;
|
|
9
|
+
prefix: string;
|
|
10
|
+
constructor(mgr: LogManager, tag: string, parent?: Logger);
|
|
11
|
+
getPrefix(): string;
|
|
12
|
+
log(level: number, fmt: string, ...args: unknown[]): void;
|
|
13
|
+
readonly error: (fmt: string, ...args: unknown[]) => void;
|
|
14
|
+
readonly warn: (fmt: string, ...args: unknown[]) => void;
|
|
15
|
+
readonly info: (fmt: string, ...args: unknown[]) => void;
|
|
16
|
+
readonly debug: (fmt: string, ...args: unknown[]) => void;
|
|
17
|
+
readonly verbose: (fmt: string, ...args: unknown[]) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Create a {@link Logger} with the given tag
|
|
20
|
+
* from the same {@link LogManager} as the current
|
|
21
|
+
* Logger.
|
|
22
|
+
*
|
|
23
|
+
* @param tag Logger tag
|
|
24
|
+
*/
|
|
25
|
+
create(tag: string): Logger;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Log manager. A logger that allows managing child loggers
|
|
29
|
+
*/
|
|
30
|
+
export declare class LogManager extends Logger {
|
|
31
|
+
static OFF: number;
|
|
32
|
+
static ERROR: number;
|
|
33
|
+
static WARN: number;
|
|
34
|
+
static INFO: number;
|
|
35
|
+
static DEBUG: number;
|
|
36
|
+
static VERBOSE: number;
|
|
37
|
+
constructor(tag?: string);
|
|
38
|
+
private _filter;
|
|
39
|
+
level: number;
|
|
40
|
+
handler: (color: number, level: number, tag: string, fmt: string, args: unknown[]) => void;
|
|
41
|
+
disable(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Create a {@link Logger} with the given tag
|
|
44
|
+
*
|
|
45
|
+
* @param tag Logger tag
|
|
46
|
+
*/
|
|
47
|
+
create(tag: string): Logger;
|
|
48
|
+
/**
|
|
49
|
+
* Filter logging by tags.
|
|
50
|
+
*
|
|
51
|
+
* @param cb
|
|
52
|
+
*/
|
|
53
|
+
filter(cb: ((tag: string) => boolean) | null): void;
|
|
54
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { hexEncode } from '@mtcute/tl-runtime';
|
|
2
|
+
import { _defaultLoggingHandler } from './platform/logging.js';
|
|
3
|
+
let defaultLogLevel = 3;
|
|
4
|
+
if (typeof process !== 'undefined') {
|
|
5
|
+
const envLogLevel = parseInt(process.env.MTCUTE_LOG_LEVEL ?? '');
|
|
6
|
+
if (!isNaN(envLogLevel)) {
|
|
7
|
+
defaultLogLevel = envLogLevel;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
else if (typeof localStorage !== 'undefined') {
|
|
11
|
+
const localLogLevel = parseInt(localStorage.MTCUTE_LOG_LEVEL);
|
|
12
|
+
if (!isNaN(localLogLevel)) {
|
|
13
|
+
defaultLogLevel = localLogLevel;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const FORMATTER_RE = /%[a-zA-Z]/g;
|
|
17
|
+
/**
|
|
18
|
+
* Logger created by {@link LogManager}
|
|
19
|
+
*/
|
|
20
|
+
export class Logger {
|
|
21
|
+
constructor(mgr, tag, parent = mgr) {
|
|
22
|
+
this.mgr = mgr;
|
|
23
|
+
this.tag = tag;
|
|
24
|
+
this.parent = parent;
|
|
25
|
+
this.prefix = '';
|
|
26
|
+
this.error = this.log.bind(this, LogManager.ERROR);
|
|
27
|
+
this.warn = this.log.bind(this, LogManager.WARN);
|
|
28
|
+
this.info = this.log.bind(this, LogManager.INFO);
|
|
29
|
+
this.debug = this.log.bind(this, LogManager.DEBUG);
|
|
30
|
+
this.verbose = this.log.bind(this, LogManager.VERBOSE);
|
|
31
|
+
let hash = 0;
|
|
32
|
+
for (let i = 0; i < tag.length; i++) {
|
|
33
|
+
hash = (hash << 5) - hash + tag.charCodeAt(i);
|
|
34
|
+
hash |= 0; // convert to 32bit int
|
|
35
|
+
}
|
|
36
|
+
this.color = Math.abs(hash) % 6;
|
|
37
|
+
}
|
|
38
|
+
getPrefix() {
|
|
39
|
+
let s = '';
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
41
|
+
let obj = this;
|
|
42
|
+
while (obj) {
|
|
43
|
+
if (obj.prefix)
|
|
44
|
+
s = obj.prefix + s;
|
|
45
|
+
obj = obj.parent;
|
|
46
|
+
}
|
|
47
|
+
return s;
|
|
48
|
+
}
|
|
49
|
+
log(level, fmt, ...args) {
|
|
50
|
+
if (level > this.mgr.level)
|
|
51
|
+
return;
|
|
52
|
+
// eslint-disable-next-line dot-notation
|
|
53
|
+
if (!this.mgr['_filter'](this.tag))
|
|
54
|
+
return;
|
|
55
|
+
// custom formatters
|
|
56
|
+
if (fmt.includes('%h') ||
|
|
57
|
+
fmt.includes('%b') ||
|
|
58
|
+
fmt.includes('%j') ||
|
|
59
|
+
fmt.includes('%J') ||
|
|
60
|
+
fmt.includes('%l')) {
|
|
61
|
+
let idx = 0;
|
|
62
|
+
fmt = fmt.replace(FORMATTER_RE, (m) => {
|
|
63
|
+
if (m === '%h' || m === '%b' || m === '%j' || m === '%J' || m === '%l') {
|
|
64
|
+
let val = args[idx];
|
|
65
|
+
args.splice(idx, 1);
|
|
66
|
+
if (m === '%h') {
|
|
67
|
+
if (ArrayBuffer.isView(val))
|
|
68
|
+
return hexEncode(val);
|
|
69
|
+
if (typeof val === 'number')
|
|
70
|
+
return val.toString(16);
|
|
71
|
+
return String(val);
|
|
72
|
+
}
|
|
73
|
+
if (m === '%b')
|
|
74
|
+
return String(Boolean(val));
|
|
75
|
+
if (m === '%j' || m === '%J') {
|
|
76
|
+
if (m === '%J') {
|
|
77
|
+
val = [...val];
|
|
78
|
+
}
|
|
79
|
+
return JSON.stringify(val, (k, v) => {
|
|
80
|
+
if (ArrayBuffer.isView(v) ||
|
|
81
|
+
(typeof v === 'object' && v.type === 'Buffer' && Array.isArray(v.data))) {
|
|
82
|
+
// eslint-disable-next-line
|
|
83
|
+
let str = v.data ? Buffer.from(v.data).toString('hex') : hexEncode(v);
|
|
84
|
+
if (str.length > 300) {
|
|
85
|
+
str = str.slice(0, 300) + '...';
|
|
86
|
+
}
|
|
87
|
+
return str;
|
|
88
|
+
}
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
90
|
+
return v;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (m === '%l')
|
|
94
|
+
return String(val);
|
|
95
|
+
}
|
|
96
|
+
idx++;
|
|
97
|
+
return m;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
this.mgr.handler(this.color, level, this.tag, this.getPrefix() + fmt, args);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a {@link Logger} with the given tag
|
|
104
|
+
* from the same {@link LogManager} as the current
|
|
105
|
+
* Logger.
|
|
106
|
+
*
|
|
107
|
+
* @param tag Logger tag
|
|
108
|
+
*/
|
|
109
|
+
create(tag) {
|
|
110
|
+
return new Logger(this.mgr, tag, this);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const defaultFilter = () => true;
|
|
114
|
+
/**
|
|
115
|
+
* Log manager. A logger that allows managing child loggers
|
|
116
|
+
*/
|
|
117
|
+
class LogManager extends Logger {
|
|
118
|
+
constructor(tag = 'base') {
|
|
119
|
+
// workaround because we cant pass this to super
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument
|
|
121
|
+
super(null, tag);
|
|
122
|
+
this._filter = defaultFilter;
|
|
123
|
+
this.level = defaultLogLevel;
|
|
124
|
+
this.handler = _defaultLoggingHandler;
|
|
125
|
+
this.mgr = this;
|
|
126
|
+
}
|
|
127
|
+
disable() {
|
|
128
|
+
this.level = 0;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a {@link Logger} with the given tag
|
|
132
|
+
*
|
|
133
|
+
* @param tag Logger tag
|
|
134
|
+
*/
|
|
135
|
+
create(tag) {
|
|
136
|
+
return new Logger(this, tag);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Filter logging by tags.
|
|
140
|
+
*
|
|
141
|
+
* @param cb
|
|
142
|
+
*/
|
|
143
|
+
filter(cb) {
|
|
144
|
+
this._filter = cb ?? defaultFilter;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
LogManager.OFF = 0;
|
|
148
|
+
LogManager.ERROR = 1;
|
|
149
|
+
LogManager.WARN = 2;
|
|
150
|
+
LogManager.INFO = 3;
|
|
151
|
+
LogManager.DEBUG = 4;
|
|
152
|
+
LogManager.VERBOSE = 5;
|
|
153
|
+
export { LogManager };
|
|
154
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { hexEncode } from '@mtcute/tl-runtime'\n\nimport { _defaultLoggingHandler } from './platform/logging.js'\n\nlet defaultLogLevel = 3\n\nif (typeof process !== 'undefined') {\n const envLogLevel = parseInt(process.env.MTCUTE_LOG_LEVEL ?? '')\n\n if (!isNaN(envLogLevel)) {\n defaultLogLevel = envLogLevel\n }\n} else if (typeof localStorage !== 'undefined') {\n const localLogLevel = parseInt(localStorage.MTCUTE_LOG_LEVEL as string)\n\n if (!isNaN(localLogLevel)) {\n defaultLogLevel = localLogLevel\n }\n}\n\nconst FORMATTER_RE = /%[a-zA-Z]/g\n\n/**\n * Logger created by {@link LogManager}\n */\nexport class Logger {\n private color: number\n\n prefix = ''\n\n constructor(\n readonly mgr: LogManager,\n readonly tag: string,\n readonly parent: Logger = mgr,\n ) {\n let hash = 0\n\n for (let i = 0; i < tag.length; i++) {\n hash = (hash << 5) - hash + tag.charCodeAt(i)\n hash |= 0 // convert to 32bit int\n }\n\n this.color = Math.abs(hash) % 6\n }\n\n getPrefix(): string {\n let s = ''\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let obj: Logger | undefined = this\n\n while (obj) {\n if (obj.prefix) s = obj.prefix + s\n obj = obj.parent\n }\n\n return s\n }\n\n log(level: number, fmt: string, ...args: unknown[]): void {\n if (level > this.mgr.level) return\n // eslint-disable-next-line dot-notation\n if (!this.mgr['_filter'](this.tag)) return\n\n // custom formatters\n if (\n fmt.includes('%h') ||\n fmt.includes('%b') ||\n fmt.includes('%j') ||\n fmt.includes('%J') ||\n fmt.includes('%l')\n ) {\n let idx = 0\n fmt = fmt.replace(FORMATTER_RE, (m) => {\n if (m === '%h' || m === '%b' || m === '%j' || m === '%J' || m === '%l') {\n let val = args[idx]\n\n args.splice(idx, 1)\n\n if (m === '%h') {\n if (ArrayBuffer.isView(val)) return hexEncode(val as Uint8Array)\n if (typeof val === 'number') return val.toString(16)\n\n return String(val)\n }\n if (m === '%b') return String(Boolean(val))\n\n if (m === '%j' || m === '%J') {\n if (m === '%J') {\n val = [...(val as IterableIterator<unknown>)]\n }\n\n return JSON.stringify(val, (k, v) => {\n if (\n ArrayBuffer.isView(v) ||\n (typeof v === 'object' && v.type === 'Buffer' && Array.isArray(v.data))\n ) {\n // eslint-disable-next-line\n let str = v.data ? Buffer.from(v.data as number[]).toString('hex') : hexEncode(v)\n\n if (str.length > 300) {\n str = str.slice(0, 300) + '...'\n }\n\n return str\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return v\n })\n }\n if (m === '%l') return String(val)\n }\n\n idx++\n\n return m\n })\n }\n\n this.mgr.handler(this.color, level, this.tag, this.getPrefix() + fmt, args)\n }\n\n readonly error = this.log.bind(this, LogManager.ERROR)\n readonly warn = this.log.bind(this, LogManager.WARN)\n readonly info = this.log.bind(this, LogManager.INFO)\n readonly debug = this.log.bind(this, LogManager.DEBUG)\n readonly verbose = this.log.bind(this, LogManager.VERBOSE)\n\n /**\n * Create a {@link Logger} with the given tag\n * from the same {@link LogManager} as the current\n * Logger.\n *\n * @param tag Logger tag\n */\n create(tag: string): Logger {\n return new Logger(this.mgr, tag, this)\n }\n}\n\nconst defaultFilter = () => true\n\n/**\n * Log manager. A logger that allows managing child loggers\n */\nexport class LogManager extends Logger {\n static OFF = 0\n static ERROR = 1\n static WARN = 2\n static INFO = 3\n static DEBUG = 4\n static VERBOSE = 5\n\n constructor(tag = 'base') {\n // workaround because we cant pass this to super\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument\n super(null as any, tag)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this as any).mgr = this\n }\n\n private _filter: (tag: string) => boolean = defaultFilter\n\n level = defaultLogLevel\n handler = _defaultLoggingHandler\n\n disable(): void {\n this.level = 0\n }\n\n /**\n * Create a {@link Logger} with the given tag\n *\n * @param tag Logger tag\n */\n create(tag: string): Logger {\n return new Logger(this, tag)\n }\n\n /**\n * Filter logging by tags.\n *\n * @param cb\n */\n filter(cb: ((tag: string) => boolean) | null): void {\n this._filter = cb ?? defaultFilter\n }\n}\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import Long from 'long';
|
|
2
|
+
/**
|
|
3
|
+
* Get a random Long
|
|
4
|
+
*
|
|
5
|
+
* @param unsigned Whether the number should be unsigned
|
|
6
|
+
*/
|
|
7
|
+
export declare function randomLong(unsigned?: boolean): Long;
|
|
8
|
+
/**
|
|
9
|
+
* Read a Long from a buffer
|
|
10
|
+
*
|
|
11
|
+
* @param buf Buffer to read from
|
|
12
|
+
* @param unsigned Whether the number should be unsigned
|
|
13
|
+
* @param le Whether the number is little-endian
|
|
14
|
+
*/
|
|
15
|
+
export declare function longFromBuffer(buf: Uint8Array, unsigned?: boolean, le?: boolean): Long;
|
|
16
|
+
/**
|
|
17
|
+
* Remove a Long from an array
|
|
18
|
+
*
|
|
19
|
+
* @param arr Array to remove from
|
|
20
|
+
* @param val Value to remove
|
|
21
|
+
*/
|
|
22
|
+
export declare function removeFromLongArray(arr: Long[], val: Long): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Serialize a Long (int64) to its fast string representation:
|
|
25
|
+
* `$high|$low`.
|
|
26
|
+
*
|
|
27
|
+
* This method is about 500* times faster than using `Long.toString()`,
|
|
28
|
+
* and very useful when the string will only ever be used internally
|
|
29
|
+
* (e.g. for keying a map)
|
|
30
|
+
*
|
|
31
|
+
* _\* benchmark result, YMMV_
|
|
32
|
+
*
|
|
33
|
+
* @param val
|
|
34
|
+
*/
|
|
35
|
+
export declare function longToFastString(val: Long): string;
|
|
36
|
+
/**
|
|
37
|
+
* Parse a Long (int64) from its fast string representation:
|
|
38
|
+
* `$high|$low`.
|
|
39
|
+
*
|
|
40
|
+
* This method is about 2 times faster than using Long.fromString.
|
|
41
|
+
*
|
|
42
|
+
* @param val
|
|
43
|
+
* @param unsigned
|
|
44
|
+
*/
|
|
45
|
+
export declare function longFromFastString(val: string, unsigned?: boolean): Long;
|
|
46
|
+
/**
|
|
47
|
+
* Map with Longs as key.
|
|
48
|
+
*
|
|
49
|
+
* Uses fast string representation internally.
|
|
50
|
+
*/
|
|
51
|
+
export declare class LongMap<V> {
|
|
52
|
+
private _map;
|
|
53
|
+
set(key: Long, value: V): void;
|
|
54
|
+
has(key: Long): boolean;
|
|
55
|
+
get(key: Long): V | undefined;
|
|
56
|
+
delete(key: Long): void;
|
|
57
|
+
keys(unsigned?: boolean): IterableIterator<Long>;
|
|
58
|
+
values(): IterableIterator<V>;
|
|
59
|
+
clear(): void;
|
|
60
|
+
size(): number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Set for Longs.
|
|
64
|
+
*
|
|
65
|
+
* Uses fast string representation internally
|
|
66
|
+
*/
|
|
67
|
+
export declare class LongSet {
|
|
68
|
+
private _set;
|
|
69
|
+
get size(): number;
|
|
70
|
+
add(val: Long): void;
|
|
71
|
+
delete(val: Long): void;
|
|
72
|
+
has(val: Long): boolean;
|
|
73
|
+
clear(): void;
|
|
74
|
+
toArray(): Long[];
|
|
75
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import Long from 'long';
|
|
2
|
+
import { dataViewFromBuffer } from './buffer-utils.js';
|
|
3
|
+
import { getRandomInt } from './misc-utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get a random Long
|
|
6
|
+
*
|
|
7
|
+
* @param unsigned Whether the number should be unsigned
|
|
8
|
+
*/
|
|
9
|
+
export function randomLong(unsigned = false) {
|
|
10
|
+
const lo = getRandomInt(0xffffffff);
|
|
11
|
+
const hi = getRandomInt(0xffffffff);
|
|
12
|
+
return new Long(lo, hi, unsigned);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Read a Long from a buffer
|
|
16
|
+
*
|
|
17
|
+
* @param buf Buffer to read from
|
|
18
|
+
* @param unsigned Whether the number should be unsigned
|
|
19
|
+
* @param le Whether the number is little-endian
|
|
20
|
+
*/
|
|
21
|
+
export function longFromBuffer(buf, unsigned = false, le = true) {
|
|
22
|
+
const dv = dataViewFromBuffer(buf);
|
|
23
|
+
if (le) {
|
|
24
|
+
return new Long(dv.getInt32(0, true), dv.getInt32(4, true), unsigned);
|
|
25
|
+
}
|
|
26
|
+
return new Long(dv.getInt32(4, false), dv.getInt32(0, false), unsigned);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Remove a Long from an array
|
|
30
|
+
*
|
|
31
|
+
* @param arr Array to remove from
|
|
32
|
+
* @param val Value to remove
|
|
33
|
+
*/
|
|
34
|
+
export function removeFromLongArray(arr, val) {
|
|
35
|
+
for (let i = 0; i < arr.length; i++) {
|
|
36
|
+
const v = arr[i];
|
|
37
|
+
// v === val for the case when the exact same object was passed
|
|
38
|
+
if (v === val || v.eq(val)) {
|
|
39
|
+
arr.splice(i, 1);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Serialize a Long (int64) to its fast string representation:
|
|
47
|
+
* `$high|$low`.
|
|
48
|
+
*
|
|
49
|
+
* This method is about 500* times faster than using `Long.toString()`,
|
|
50
|
+
* and very useful when the string will only ever be used internally
|
|
51
|
+
* (e.g. for keying a map)
|
|
52
|
+
*
|
|
53
|
+
* _\* benchmark result, YMMV_
|
|
54
|
+
*
|
|
55
|
+
* @param val
|
|
56
|
+
*/
|
|
57
|
+
export function longToFastString(val) {
|
|
58
|
+
return `${val.low}|${val.high}`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse a Long (int64) from its fast string representation:
|
|
62
|
+
* `$high|$low`.
|
|
63
|
+
*
|
|
64
|
+
* This method is about 2 times faster than using Long.fromString.
|
|
65
|
+
*
|
|
66
|
+
* @param val
|
|
67
|
+
* @param unsigned
|
|
68
|
+
*/
|
|
69
|
+
export function longFromFastString(val, unsigned = false) {
|
|
70
|
+
const parts = val.split('|');
|
|
71
|
+
if (parts.length !== 2)
|
|
72
|
+
throw new Error(`Invalid long fast string: ${val}`);
|
|
73
|
+
const low = parseInt(parts[0]);
|
|
74
|
+
const high = parseInt(parts[1]);
|
|
75
|
+
if (isNaN(low) || isNaN(high)) {
|
|
76
|
+
throw new Error(`Invalid long fast string: ${val}`);
|
|
77
|
+
}
|
|
78
|
+
return new Long(low, high, unsigned);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Map with Longs as key.
|
|
82
|
+
*
|
|
83
|
+
* Uses fast string representation internally.
|
|
84
|
+
*/
|
|
85
|
+
export class LongMap {
|
|
86
|
+
constructor() {
|
|
87
|
+
this._map = new Map();
|
|
88
|
+
}
|
|
89
|
+
set(key, value) {
|
|
90
|
+
this._map.set(longToFastString(key), value);
|
|
91
|
+
}
|
|
92
|
+
has(key) {
|
|
93
|
+
return this._map.has(longToFastString(key));
|
|
94
|
+
}
|
|
95
|
+
get(key) {
|
|
96
|
+
return this._map.get(longToFastString(key));
|
|
97
|
+
}
|
|
98
|
+
delete(key) {
|
|
99
|
+
this._map.delete(longToFastString(key));
|
|
100
|
+
}
|
|
101
|
+
*keys(unsigned) {
|
|
102
|
+
for (const v of this._map.keys()) {
|
|
103
|
+
yield longFromFastString(v, unsigned);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
values() {
|
|
107
|
+
return this._map.values();
|
|
108
|
+
}
|
|
109
|
+
clear() {
|
|
110
|
+
this._map.clear();
|
|
111
|
+
}
|
|
112
|
+
size() {
|
|
113
|
+
return this._map.size;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Set for Longs.
|
|
118
|
+
*
|
|
119
|
+
* Uses fast string representation internally
|
|
120
|
+
*/
|
|
121
|
+
export class LongSet {
|
|
122
|
+
constructor() {
|
|
123
|
+
this._set = new Set();
|
|
124
|
+
}
|
|
125
|
+
get size() {
|
|
126
|
+
return this._set.size;
|
|
127
|
+
}
|
|
128
|
+
add(val) {
|
|
129
|
+
this._set.add(longToFastString(val));
|
|
130
|
+
}
|
|
131
|
+
delete(val) {
|
|
132
|
+
this._set.delete(longToFastString(val));
|
|
133
|
+
}
|
|
134
|
+
has(val) {
|
|
135
|
+
return this._set.has(longToFastString(val));
|
|
136
|
+
}
|
|
137
|
+
clear() {
|
|
138
|
+
this._set.clear();
|
|
139
|
+
}
|
|
140
|
+
toArray() {
|
|
141
|
+
const arr = [];
|
|
142
|
+
for (const v of this._set) {
|
|
143
|
+
arr.push(longFromFastString(v));
|
|
144
|
+
}
|
|
145
|
+
return arr;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=long-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-utils.js","sourceRoot":"","sources":["../../../src/utils/long-utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAQ,GAAG,KAAK;IACvC,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACnC,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IAEnC,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,GAAG,IAAI;IACvE,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAElC,IAAI,EAAE,EAAE;QACJ,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;KACxE;IAED,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,GAAS;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAEhB,+DAA+D;QAC/D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAEhB,OAAO,IAAI,CAAA;SACd;KACJ;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAS;IACtC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,QAAQ,GAAG,KAAK;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;IAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;KACtD;IAED,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,OAAO;IAApB;QACY,SAAI,GAAG,IAAI,GAAG,EAAa,CAAA;IAmCvC,CAAC;IAjCG,GAAG,CAAC,GAAS,EAAE,KAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IAC/C,CAAC;IAED,GAAG,CAAC,GAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,GAAG,CAAC,GAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,GAAS;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,CAAC,IAAI,CAAC,QAAkB;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;SACxC;IACL,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACzB,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,OAAO,OAAO;IAApB;QACY,SAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IA+BpC,CAAC;IA7BG,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACzB,CAAC;IAED,GAAG,CAAC,GAAS;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,GAAS;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,GAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,OAAO;QACH,MAAM,GAAG,GAAW,EAAE,CAAA;QAEtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACvB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;SAClC;QAED,OAAO,GAAG,CAAA;IACd,CAAC;CACJ","sourcesContent":["import Long from 'long'\n\nimport { dataViewFromBuffer } from './buffer-utils.js'\nimport { getRandomInt } from './misc-utils.js'\n\n/**\n * Get a random Long\n *\n * @param unsigned Whether the number should be unsigned\n */\nexport function randomLong(unsigned = false): Long {\n const lo = getRandomInt(0xffffffff)\n const hi = getRandomInt(0xffffffff)\n\n return new Long(lo, hi, unsigned)\n}\n\n/**\n * Read a Long from a buffer\n *\n * @param buf Buffer to read from\n * @param unsigned Whether the number should be unsigned\n * @param le Whether the number is little-endian\n */\nexport function longFromBuffer(buf: Uint8Array, unsigned = false, le = true): Long {\n const dv = dataViewFromBuffer(buf)\n\n if (le) {\n return new Long(dv.getInt32(0, true), dv.getInt32(4, true), unsigned)\n }\n\n return new Long(dv.getInt32(4, false), dv.getInt32(0, false), unsigned)\n}\n\n/**\n * Remove a Long from an array\n *\n * @param arr Array to remove from\n * @param val Value to remove\n */\nexport function removeFromLongArray(arr: Long[], val: Long): boolean {\n for (let i = 0; i < arr.length; i++) {\n const v = arr[i]\n\n // v === val for the case when the exact same object was passed\n if (v === val || v.eq(val)) {\n arr.splice(i, 1)\n\n return true\n }\n }\n\n return false\n}\n\n/**\n * Serialize a Long (int64) to its fast string representation:\n * `$high|$low`.\n *\n * This method is about 500* times faster than using `Long.toString()`,\n * and very useful when the string will only ever be used internally\n * (e.g. for keying a map)\n *\n * _\\* benchmark result, YMMV_\n *\n * @param val\n */\nexport function longToFastString(val: Long): string {\n return `${val.low}|${val.high}`\n}\n\n/**\n * Parse a Long (int64) from its fast string representation:\n * `$high|$low`.\n *\n * This method is about 2 times faster than using Long.fromString.\n *\n * @param val\n * @param unsigned\n */\nexport function longFromFastString(val: string, unsigned = false): Long {\n const parts = val.split('|')\n\n if (parts.length !== 2) throw new Error(`Invalid long fast string: ${val}`)\n const low = parseInt(parts[0])\n const high = parseInt(parts[1])\n\n if (isNaN(low) || isNaN(high)) {\n throw new Error(`Invalid long fast string: ${val}`)\n }\n\n return new Long(low, high, unsigned)\n}\n\n/**\n * Map with Longs as key.\n *\n * Uses fast string representation internally.\n */\nexport class LongMap<V> {\n private _map = new Map<string, V>()\n\n set(key: Long, value: V): void {\n this._map.set(longToFastString(key), value)\n }\n\n has(key: Long): boolean {\n return this._map.has(longToFastString(key))\n }\n\n get(key: Long): V | undefined {\n return this._map.get(longToFastString(key))\n }\n\n delete(key: Long): void {\n this._map.delete(longToFastString(key))\n }\n\n *keys(unsigned?: boolean): IterableIterator<Long> {\n for (const v of this._map.keys()) {\n yield longFromFastString(v, unsigned)\n }\n }\n\n values(): IterableIterator<V> {\n return this._map.values()\n }\n\n clear(): void {\n this._map.clear()\n }\n\n size(): number {\n return this._map.size\n }\n}\n\n/**\n * Set for Longs.\n *\n * Uses fast string representation internally\n */\nexport class LongSet {\n private _set = new Set<string>()\n\n get size(): number {\n return this._set.size\n }\n\n add(val: Long) {\n this._set.add(longToFastString(val))\n }\n\n delete(val: Long) {\n this._set.delete(longToFastString(val))\n }\n\n has(val: Long) {\n return this._set.has(longToFastString(val))\n }\n\n clear() {\n this._set.clear()\n }\n\n toArray() {\n const arr: Long[] = []\n\n for (const v of this._set) {\n arr.push(longFromFastString(v))\n }\n\n return arr\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple class implementing LRU-like behaviour for a Map
|
|
3
|
+
*
|
|
4
|
+
* Can be used to handle local cache of *something*
|
|
5
|
+
*
|
|
6
|
+
* Uses two-way linked list internally to keep track of insertion/access order
|
|
7
|
+
*/
|
|
8
|
+
export declare class LruMap<K extends string | number, V> {
|
|
9
|
+
private _capacity;
|
|
10
|
+
private _first?;
|
|
11
|
+
private _last?;
|
|
12
|
+
private _map;
|
|
13
|
+
private _size;
|
|
14
|
+
constructor(capacity: number, forLong?: boolean);
|
|
15
|
+
private _markUsed;
|
|
16
|
+
get(key: K): V | undefined;
|
|
17
|
+
has(key: K): boolean;
|
|
18
|
+
private _remove;
|
|
19
|
+
set(key: K, value: V): void;
|
|
20
|
+
delete(key: K): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
|
+
// ^^ because of performance reasons
|
|
4
|
+
import { LongMap } from './long-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Simple class implementing LRU-like behaviour for a Map
|
|
7
|
+
*
|
|
8
|
+
* Can be used to handle local cache of *something*
|
|
9
|
+
*
|
|
10
|
+
* Uses two-way linked list internally to keep track of insertion/access order
|
|
11
|
+
*/
|
|
12
|
+
export class LruMap {
|
|
13
|
+
constructor(capacity, forLong = false) {
|
|
14
|
+
this._size = 0;
|
|
15
|
+
this._capacity = capacity;
|
|
16
|
+
this._map = forLong ? new LongMap() : new Map();
|
|
17
|
+
}
|
|
18
|
+
_markUsed(item) {
|
|
19
|
+
if (item === this._first) {
|
|
20
|
+
return; // already the most recently used
|
|
21
|
+
}
|
|
22
|
+
if (item.p) {
|
|
23
|
+
if (item === this._last) {
|
|
24
|
+
this._last = item.p;
|
|
25
|
+
}
|
|
26
|
+
item.p.n = item.n;
|
|
27
|
+
}
|
|
28
|
+
if (item.n) {
|
|
29
|
+
item.n.p = item.p;
|
|
30
|
+
}
|
|
31
|
+
item.p = undefined;
|
|
32
|
+
item.n = this._first;
|
|
33
|
+
if (this._first) {
|
|
34
|
+
this._first.p = item;
|
|
35
|
+
}
|
|
36
|
+
this._first = item;
|
|
37
|
+
}
|
|
38
|
+
get(key) {
|
|
39
|
+
const item = this._map.get(key);
|
|
40
|
+
if (!item)
|
|
41
|
+
return undefined;
|
|
42
|
+
this._markUsed(item);
|
|
43
|
+
return item.v;
|
|
44
|
+
}
|
|
45
|
+
has(key) {
|
|
46
|
+
return this._map.has(key);
|
|
47
|
+
}
|
|
48
|
+
_remove(item) {
|
|
49
|
+
if (item.p) {
|
|
50
|
+
this._last = item.p;
|
|
51
|
+
this._last.n = undefined;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// exhausted
|
|
55
|
+
this._last = undefined;
|
|
56
|
+
this._first = undefined;
|
|
57
|
+
}
|
|
58
|
+
// remove strong refs to and from the item
|
|
59
|
+
item.p = item.n = undefined;
|
|
60
|
+
this._map.delete(item.k);
|
|
61
|
+
this._size -= 1;
|
|
62
|
+
}
|
|
63
|
+
set(key, value) {
|
|
64
|
+
let item = this._map.get(key);
|
|
65
|
+
if (item) {
|
|
66
|
+
// already in cache, update
|
|
67
|
+
item.v = value;
|
|
68
|
+
this._markUsed(item);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
item = {
|
|
72
|
+
k: key,
|
|
73
|
+
v: value,
|
|
74
|
+
// for jit to optimize stuff
|
|
75
|
+
n: undefined,
|
|
76
|
+
p: undefined,
|
|
77
|
+
};
|
|
78
|
+
this._map.set(key, item);
|
|
79
|
+
if (this._first) {
|
|
80
|
+
this._first.p = item;
|
|
81
|
+
item.n = this._first;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// first item ever
|
|
85
|
+
this._last = item;
|
|
86
|
+
}
|
|
87
|
+
this._first = item;
|
|
88
|
+
this._size += 1;
|
|
89
|
+
if (this._size > this._capacity) {
|
|
90
|
+
// remove the last item
|
|
91
|
+
const oldest = this._last;
|
|
92
|
+
if (oldest) {
|
|
93
|
+
this._remove(oldest);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
delete(key) {
|
|
98
|
+
const item = this._map.get(key);
|
|
99
|
+
if (item)
|
|
100
|
+
this._remove(item);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=lru-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-map.js","sourceRoot":"","sources":["../../../src/utils/lru-map.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n// ^^ because of performance reasons\nimport { LongMap } from './long-utils.js'\n\ninterface TwoWayLinkedList<K, T> {\n // k = key\n k: K\n // v = value\n v: T\n // p = previous\n p?: TwoWayLinkedList<K, T>\n // n = next\n n?: TwoWayLinkedList<K, T>\n}\n\n/**\n * Simple class implementing LRU-like behaviour for a Map\n *\n * Can be used to handle local cache of *something*\n *\n * Uses two-way linked list internally to keep track of insertion/access order\n */\nexport class LruMap<K extends string | number, V> {\n private _capacity: number\n private _first?: TwoWayLinkedList<K, V>\n private _last?: TwoWayLinkedList<K, V>\n\n private _map: Map<K, TwoWayLinkedList<K, V>>\n\n private _size = 0\n\n constructor(capacity: number, forLong = false) {\n this._capacity = capacity\n\n this._map = forLong ? (new LongMap() as any) : new Map()\n }\n\n private _markUsed(item: TwoWayLinkedList<K, V>): void {\n if (item === this._first) {\n return // already the most recently used\n }\n\n if (item.p) {\n if (item === this._last) {\n this._last = item.p\n }\n item.p.n = item.n\n }\n\n if (item.n) {\n item.n.p = item.p\n }\n\n item.p = undefined\n item.n = this._first\n\n if (this._first) {\n this._first.p = item\n }\n this._first = item\n }\n\n get(key: K): V | undefined {\n const item = this._map.get(key)\n if (!item) return undefined\n\n this._markUsed(item)\n\n return item.v\n }\n\n has(key: K): boolean {\n return this._map.has(key)\n }\n\n private _remove(item: TwoWayLinkedList<K, V>): void {\n if (item.p) {\n this._last = item.p\n this._last.n = undefined\n } else {\n // exhausted\n this._last = undefined\n this._first = undefined\n }\n\n // remove strong refs to and from the item\n item.p = item.n = undefined\n this._map.delete(item.k)\n this._size -= 1\n }\n\n set(key: K, value: V): void {\n let item = this._map.get(key)\n\n if (item) {\n // already in cache, update\n item.v = value\n this._markUsed(item)\n\n return\n }\n\n item = {\n k: key,\n v: value,\n // for jit to optimize stuff\n n: undefined,\n p: undefined,\n }\n this._map.set(key, item as any)\n\n if (this._first) {\n this._first.p = item\n item.n = this._first\n } else {\n // first item ever\n this._last = item\n }\n\n this._first = item\n this._size += 1\n\n if (this._size > this._capacity) {\n // remove the last item\n const oldest = this._last\n\n if (oldest) {\n this._remove(oldest)\n }\n }\n }\n\n delete(key: K): void {\n const item = this._map.get(key)\n if (item) this._remove(item)\n }\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Long from 'long';
|
|
2
|
+
/**
|
|
3
|
+
* Simple class implementing LRU-like behaviour for a Set.
|
|
4
|
+
*
|
|
5
|
+
* Note: this is not exactly LRU, but rather "least recently added"
|
|
6
|
+
* and doesn't mark items as recently added if they are already in the set.
|
|
7
|
+
* This is enough for our use case, so we don't bother with more complex implementation.
|
|
8
|
+
*
|
|
9
|
+
* Used to store recently received message IDs in {@link SessionConnection}
|
|
10
|
+
*
|
|
11
|
+
* Uses one-way linked list internally to keep track of insertion order
|
|
12
|
+
*/
|
|
13
|
+
export declare class LruSet<T extends string | number | Long> {
|
|
14
|
+
private _capacity;
|
|
15
|
+
private _first?;
|
|
16
|
+
private _last?;
|
|
17
|
+
private _set;
|
|
18
|
+
constructor(capacity: number, forLong?: boolean);
|
|
19
|
+
clear(): void;
|
|
20
|
+
add(val: T): void;
|
|
21
|
+
has(val: T): boolean;
|
|
22
|
+
}
|