@tma.js/sdk 1.4.4 → 1.4.7

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.
Files changed (298) hide show
  1. package/README.md +2 -2
  2. package/dist/dts/bridge/env/index.d.ts +0 -1
  3. package/dist/dts/bridge/events/events.d.ts +16 -16
  4. package/dist/dts/bridge/methods/methods.d.ts +27 -27
  5. package/dist/dts/bridge/methods/popup.d.ts +1 -1
  6. package/dist/dts/index.d.ts +3 -3
  7. package/dist/dts/init-data/types.d.ts +3 -3
  8. package/dist/dts/launch-params/index.d.ts +1 -4
  9. package/dist/dts/launch-params/retrieveFromLocation.d.ts +2 -2
  10. package/dist/dts/launch-params/retrieveFromPerformance.d.ts +3 -4
  11. package/dist/dts/launch-params/retrieveFromUrl.d.ts +3 -2
  12. package/dist/dts/launch-params/retrieveLaunchData.d.ts +1 -0
  13. package/dist/dts/launch-params/retrieveLaunchParams.d.ts +6 -0
  14. package/dist/dts/launch-params/storage.d.ts +3 -5
  15. package/dist/dts/launch-params/types.d.ts +1 -1
  16. package/dist/dts/{launch-params → misc}/getFirstNavigationEntry.d.ts +1 -1
  17. package/dist/dts/misc/index.d.ts +3 -0
  18. package/dist/dts/{bridge/env → misc}/isIframe.d.ts +1 -1
  19. package/dist/dts/misc/isPageReload.d.ts +5 -0
  20. package/dist/dts/theme-params/types.d.ts +1 -1
  21. package/dist/index.cjs +1 -2
  22. package/dist/index.iife.js +1 -2
  23. package/dist/index.mjs +841 -866
  24. package/package.json +2 -3
  25. package/dist/dts/launch-params/computeLaunchData.d.ts +0 -6
  26. package/dist/dts/launch-params/computePageReload.d.ts +0 -6
  27. package/dist/dts/launch-params/retrieveCurrent.d.ts +0 -5
  28. package/dist/index.cjs.map +0 -1
  29. package/dist/index.iife.js.map +0 -1
  30. package/dist/index.mjs.map +0 -1
  31. package/src/__tests__/globals.ts +0 -39
  32. package/src/back-button/BackButton.ts +0 -90
  33. package/src/back-button/__tests__/BackButton.ts +0 -129
  34. package/src/back-button/index.ts +0 -2
  35. package/src/back-button/types.ts +0 -14
  36. package/src/bridge/__tests__/parseMessage.ts +0 -23
  37. package/src/bridge/__tests__/request.ts +0 -236
  38. package/src/bridge/env/__tests__/hasExternalNotify.ts +0 -15
  39. package/src/bridge/env/__tests__/hasWebviewProxy.ts +0 -15
  40. package/src/bridge/env/__tests__/isIframe.ts +0 -30
  41. package/src/bridge/env/hasExternalNotify.ts +0 -19
  42. package/src/bridge/env/hasWebviewProxy.ts +0 -19
  43. package/src/bridge/env/index.ts +0 -3
  44. package/src/bridge/env/isIframe.ts +0 -11
  45. package/src/bridge/errors/MethodUnsupportedError.ts +0 -13
  46. package/src/bridge/errors/ParameterUnsupportedError.ts +0 -13
  47. package/src/bridge/errors/index.ts +0 -2
  48. package/src/bridge/events/__tests__/createEmitter.ts +0 -143
  49. package/src/bridge/events/__tests__/off.ts +0 -34
  50. package/src/bridge/events/__tests__/on.ts +0 -49
  51. package/src/bridge/events/__tests__/onTelegramEvent.ts +0 -49
  52. package/src/bridge/events/__tests__/once.ts +0 -64
  53. package/src/bridge/events/__tests__/singletonEmitter.ts +0 -22
  54. package/src/bridge/events/__tests__/subscribe.ts +0 -49
  55. package/src/bridge/events/__tests__/unsubscribe.ts +0 -34
  56. package/src/bridge/events/createEmitter.ts +0 -108
  57. package/src/bridge/events/events.ts +0 -170
  58. package/src/bridge/events/index.ts +0 -9
  59. package/src/bridge/events/off.ts +0 -14
  60. package/src/bridge/events/on.ts +0 -19
  61. package/src/bridge/events/onTelegramEvent.ts +0 -81
  62. package/src/bridge/events/once.ts +0 -18
  63. package/src/bridge/events/parsers/__tests__/clipboardTextReceived.ts +0 -21
  64. package/src/bridge/events/parsers/__tests__/invoiceClosed.ts +0 -12
  65. package/src/bridge/events/parsers/__tests__/popupClosed.ts +0 -10
  66. package/src/bridge/events/parsers/__tests__/qrTextReceived.ts +0 -9
  67. package/src/bridge/events/parsers/__tests__/theme-changed.ts +0 -42
  68. package/src/bridge/events/parsers/__tests__/viewportChanged.ts +0 -49
  69. package/src/bridge/events/parsers/clipboardTextReceived.ts +0 -26
  70. package/src/bridge/events/parsers/customMethodInvoked.ts +0 -25
  71. package/src/bridge/events/parsers/index.ts +0 -9
  72. package/src/bridge/events/parsers/invoiceClosed.ts +0 -26
  73. package/src/bridge/events/parsers/phoneRequested.ts +0 -14
  74. package/src/bridge/events/parsers/popupClosed.ts +0 -19
  75. package/src/bridge/events/parsers/qrTextReceived.ts +0 -14
  76. package/src/bridge/events/parsers/theme-changed.ts +0 -58
  77. package/src/bridge/events/parsers/viewportChanged.ts +0 -33
  78. package/src/bridge/events/parsers/writeAccessRequested.ts +0 -14
  79. package/src/bridge/events/singletonEmitter.ts +0 -19
  80. package/src/bridge/events/subscribe.ts +0 -15
  81. package/src/bridge/events/unsubscribe.ts +0 -10
  82. package/src/bridge/index.ts +0 -7
  83. package/src/bridge/invokeCustomMethod.ts +0 -56
  84. package/src/bridge/methods/__tests__/createPostEvent.ts +0 -37
  85. package/src/bridge/methods/__tests__/postEvent.ts +0 -137
  86. package/src/bridge/methods/createPostEvent.ts +0 -40
  87. package/src/bridge/methods/custom-methods.ts +0 -68
  88. package/src/bridge/methods/haptic.ts +0 -52
  89. package/src/bridge/methods/index.ts +0 -6
  90. package/src/bridge/methods/methods.ts +0 -370
  91. package/src/bridge/methods/popup.ts +0 -53
  92. package/src/bridge/methods/postEvent.ts +0 -101
  93. package/src/bridge/parseMessage.ts +0 -28
  94. package/src/bridge/request.ts +0 -176
  95. package/src/classnames/__tests__/classNames.ts +0 -20
  96. package/src/classnames/__tests__/mergeClassNames.ts +0 -21
  97. package/src/classnames/classNames.ts +0 -34
  98. package/src/classnames/index.ts +0 -2
  99. package/src/classnames/mergeClassNames.ts +0 -60
  100. package/src/closing-behavior/ClosingBehavior.ts +0 -64
  101. package/src/closing-behavior/__tests__/ClosingBehavior.ts +0 -86
  102. package/src/closing-behavior/index.ts +0 -2
  103. package/src/closing-behavior/types.ts +0 -12
  104. package/src/cloud-storage/CloudStorage.ts +0 -138
  105. package/src/cloud-storage/index.ts +0 -1
  106. package/src/colors/__tests__/isColorDark.ts +0 -12
  107. package/src/colors/__tests__/isRGB.ts +0 -13
  108. package/src/colors/__tests__/isRGBShort.ts +0 -13
  109. package/src/colors/__tests__/toRGB.ts +0 -23
  110. package/src/colors/index.ts +0 -5
  111. package/src/colors/isColorDark.ts +0 -22
  112. package/src/colors/isRGB.ts +0 -9
  113. package/src/colors/isRGBShort.ts +0 -9
  114. package/src/colors/toRGB.ts +0 -49
  115. package/src/colors/types.ts +0 -9
  116. package/src/css/__tests__/bindMiniAppCSSVars.ts +0 -175
  117. package/src/css/__tests__/bindThemeCSSVars.ts +0 -52
  118. package/src/css/__tests__/bindViewportCSSVars.ts +0 -55
  119. package/src/css/__tests__/setCSSVar.ts +0 -14
  120. package/src/css/bindMiniAppCSSVars.ts +0 -51
  121. package/src/css/bindThemeCSSVars.ts +0 -31
  122. package/src/css/bindViewportCSSVars.ts +0 -36
  123. package/src/css/index.ts +0 -4
  124. package/src/css/setCSSVar.ts +0 -8
  125. package/src/event-emitter/EventEmitter.ts +0 -146
  126. package/src/event-emitter/__tests__/EventEmitter.ts +0 -145
  127. package/src/event-emitter/index.ts +0 -2
  128. package/src/event-emitter/types.ts +0 -60
  129. package/src/globals.ts +0 -38
  130. package/src/haptic-feedback/HapticFeedback.ts +0 -70
  131. package/src/haptic-feedback/__tests__/HapticFeedback.ts +0 -68
  132. package/src/haptic-feedback/index.ts +0 -1
  133. package/src/index.ts +0 -185
  134. package/src/init/catchCustomStyles.ts +0 -17
  135. package/src/init/creators/__tests__/createViewport.ts +0 -96
  136. package/src/init/creators/createBackButton.ts +0 -25
  137. package/src/init/creators/createClosingBehavior.ts +0 -24
  138. package/src/init/creators/createMainButton.ts +0 -51
  139. package/src/init/creators/createMiniApp.ts +0 -48
  140. package/src/init/creators/createRequestIdGenerator.ts +0 -13
  141. package/src/init/creators/createSettingsButton.ts +0 -25
  142. package/src/init/creators/createThemeParams.ts +0 -11
  143. package/src/init/creators/createViewport.ts +0 -94
  144. package/src/init/creators/index.ts +0 -8
  145. package/src/init/css/index.ts +0 -1
  146. package/src/init/css/processCSSVarsOption.ts +0 -55
  147. package/src/init/index.ts +0 -2
  148. package/src/init/init.ts +0 -134
  149. package/src/init/types.ts +0 -94
  150. package/src/init-data/InitData.ts +0 -96
  151. package/src/init-data/__tests__/InitData.ts +0 -98
  152. package/src/init-data/__tests__/chatParser.ts +0 -102
  153. package/src/init-data/__tests__/initDataParser.ts +0 -136
  154. package/src/init-data/__tests__/parseInitData.ts +0 -136
  155. package/src/init-data/__tests__/userParser.ts +0 -96
  156. package/src/init-data/chatParser.ts +0 -19
  157. package/src/init-data/index.ts +0 -6
  158. package/src/init-data/initDataParser.ts +0 -41
  159. package/src/init-data/parseInitData.ts +0 -10
  160. package/src/init-data/types.ts +0 -164
  161. package/src/init-data/userParser.ts +0 -45
  162. package/src/invoice/Invoice.ts +0 -123
  163. package/src/invoice/index.ts +0 -2
  164. package/src/invoice/types.ts +0 -11
  165. package/src/launch-params/__tests__/retrieveFromUrl.ts +0 -19
  166. package/src/launch-params/computeLaunchData.ts +0 -81
  167. package/src/launch-params/computePageReload.ts +0 -13
  168. package/src/launch-params/getFirstNavigationEntry.ts +0 -10
  169. package/src/launch-params/index.ts +0 -13
  170. package/src/launch-params/launchParamsParser.ts +0 -45
  171. package/src/launch-params/parseLaunchParams.ts +0 -10
  172. package/src/launch-params/retrieveCurrent.ts +0 -27
  173. package/src/launch-params/retrieveFromLocation.ts +0 -10
  174. package/src/launch-params/retrieveFromPerformance.ts +0 -18
  175. package/src/launch-params/retrieveFromUrl.ts +0 -19
  176. package/src/launch-params/retrieveLaunchData.ts +0 -30
  177. package/src/launch-params/serializeLaunchParams.ts +0 -37
  178. package/src/launch-params/storage.ts +0 -33
  179. package/src/launch-params/types.ts +0 -62
  180. package/src/logger/Logger.ts +0 -72
  181. package/src/logger/__tests__/Logger.ts +0 -107
  182. package/src/logger/index.ts +0 -1
  183. package/src/main-button/MainButton.ts +0 -239
  184. package/src/main-button/__tests__/MainButton.ts +0 -346
  185. package/src/main-button/index.ts +0 -2
  186. package/src/main-button/types.ts +0 -26
  187. package/src/mini-app/MiniApp.ts +0 -348
  188. package/src/mini-app/__tests__/MiniApp.ts +0 -140
  189. package/src/mini-app/contactParser.ts +0 -29
  190. package/src/mini-app/index.ts +0 -2
  191. package/src/mini-app/types.ts +0 -38
  192. package/src/misc/__tests__/isRecord.ts +0 -21
  193. package/src/misc/index.ts +0 -2
  194. package/src/misc/isRecord.ts +0 -7
  195. package/src/misc/isTMA.ts +0 -13
  196. package/src/navigation/HashNavigator/HashNavigator.ts +0 -220
  197. package/src/navigation/HashNavigator/__tests__/HashNavigator.ts +0 -144
  198. package/src/navigation/HashNavigator/__tests__/drop.ts +0 -42
  199. package/src/navigation/HashNavigator/__tests__/go.ts +0 -9
  200. package/src/navigation/HashNavigator/drop.ts +0 -36
  201. package/src/navigation/HashNavigator/go.ts +0 -28
  202. package/src/navigation/HashNavigator/index.ts +0 -2
  203. package/src/navigation/HashNavigator/types.ts +0 -41
  204. package/src/navigation/Navigator/Navigator.ts +0 -282
  205. package/src/navigation/Navigator/index.ts +0 -2
  206. package/src/navigation/Navigator/types.ts +0 -55
  207. package/src/navigation/ensurePrefix.ts +0 -9
  208. package/src/navigation/getHash.ts +0 -17
  209. package/src/navigation/index.ts +0 -4
  210. package/src/parsing/ArrayValueParser.ts +0 -79
  211. package/src/parsing/ParseError.ts +0 -27
  212. package/src/parsing/ParseSchemaFieldError.ts +0 -21
  213. package/src/parsing/ValueParser.ts +0 -71
  214. package/src/parsing/__tests__/ArrayValueParser.ts +0 -18
  215. package/src/parsing/__tests__/toRecord.ts +0 -10
  216. package/src/parsing/createValueParserGenerator.ts +0 -16
  217. package/src/parsing/index.ts +0 -10
  218. package/src/parsing/parseBySchema.ts +0 -65
  219. package/src/parsing/parsers/__tests__/array.ts +0 -39
  220. package/src/parsing/parsers/__tests__/boolean.ts +0 -31
  221. package/src/parsing/parsers/__tests__/date.ts +0 -25
  222. package/src/parsing/parsers/__tests__/json.ts +0 -80
  223. package/src/parsing/parsers/__tests__/number.ts +0 -23
  224. package/src/parsing/parsers/__tests__/rgb.ts +0 -22
  225. package/src/parsing/parsers/__tests__/searchParams.ts +0 -105
  226. package/src/parsing/parsers/__tests__/string.ts +0 -25
  227. package/src/parsing/parsers/array.ts +0 -9
  228. package/src/parsing/parsers/boolean.ts +0 -22
  229. package/src/parsing/parsers/date.ts +0 -11
  230. package/src/parsing/parsers/index.ts +0 -8
  231. package/src/parsing/parsers/json.ts +0 -17
  232. package/src/parsing/parsers/number.ts +0 -21
  233. package/src/parsing/parsers/rgb.ts +0 -10
  234. package/src/parsing/parsers/searchParams.ts +0 -24
  235. package/src/parsing/parsers/string.ts +0 -12
  236. package/src/parsing/toRecord.ts +0 -27
  237. package/src/parsing/types.ts +0 -32
  238. package/src/parsing/unexpectedTypeError.ts +0 -6
  239. package/src/popup/Popup.ts +0 -91
  240. package/src/popup/__tests__/Popup.ts +0 -130
  241. package/src/popup/__tests__/preparePopupParams.ts +0 -85
  242. package/src/popup/index.ts +0 -2
  243. package/src/popup/preparePopupParams.ts +0 -59
  244. package/src/popup/types.ts +0 -69
  245. package/src/qr-scanner/QRScanner.ts +0 -95
  246. package/src/qr-scanner/index.ts +0 -2
  247. package/src/qr-scanner/types.ts +0 -11
  248. package/src/settings-button/SettingsButton.ts +0 -85
  249. package/src/settings-button/index.ts +0 -2
  250. package/src/settings-button/types.ts +0 -15
  251. package/src/state/State.ts +0 -67
  252. package/src/state/index.ts +0 -2
  253. package/src/state/types.ts +0 -31
  254. package/src/storage.ts +0 -69
  255. package/src/supports/__tests__/supports.ts +0 -123
  256. package/src/supports/createSupportsFunc.ts +0 -18
  257. package/src/supports/createSupportsParamFunc.ts +0 -27
  258. package/src/supports/index.ts +0 -4
  259. package/src/supports/supports.ts +0 -84
  260. package/src/supports/types.ts +0 -1
  261. package/src/theme-params/ThemeParams.ts +0 -131
  262. package/src/theme-params/__tests__/keys.ts +0 -19
  263. package/src/theme-params/__tests__/parseThemeParams.ts +0 -29
  264. package/src/theme-params/__tests__/serializeThemeParams.ts +0 -29
  265. package/src/theme-params/__tests__/themeParamsParser.ts +0 -29
  266. package/src/theme-params/index.ts +0 -6
  267. package/src/theme-params/keys.ts +0 -24
  268. package/src/theme-params/parseThemeParams.ts +0 -10
  269. package/src/theme-params/requestThemeParams.ts +0 -13
  270. package/src/theme-params/serializeThemeParams.ts +0 -20
  271. package/src/theme-params/themeParamsParser.ts +0 -22
  272. package/src/theme-params/types.ts +0 -33
  273. package/src/timeout/TimeoutError.ts +0 -6
  274. package/src/timeout/__tests__/isTimeoutError.ts +0 -9
  275. package/src/timeout/__tests__/withTimeout.ts +0 -28
  276. package/src/timeout/index.ts +0 -4
  277. package/src/timeout/isTimeoutError.ts +0 -9
  278. package/src/timeout/sleep.ts +0 -10
  279. package/src/timeout/withTimeout.ts +0 -24
  280. package/src/types/index.ts +0 -4
  281. package/src/types/methods.ts +0 -18
  282. package/src/types/platform.ts +0 -14
  283. package/src/types/request-id.ts +0 -10
  284. package/src/types/utils.ts +0 -50
  285. package/src/utils/Utils.ts +0 -107
  286. package/src/utils/index.ts +0 -1
  287. package/src/version/__tests__/compareVersions.ts +0 -19
  288. package/src/version/compareVersions.ts +0 -28
  289. package/src/version/index.ts +0 -2
  290. package/src/version/types.ts +0 -4
  291. package/src/viewport/Viewport.ts +0 -171
  292. package/src/viewport/__tests__/isStableViewportPlatform.ts +0 -15
  293. package/src/viewport/__tests__/utils.ts +0 -12
  294. package/src/viewport/index.ts +0 -4
  295. package/src/viewport/isStableViewportPlatform.ts +0 -10
  296. package/src/viewport/requestViewport.ts +0 -23
  297. package/src/viewport/types.ts +0 -23
  298. package/src/viewport/utils.ts +0 -7
@@ -1,146 +0,0 @@
1
- import type {
2
- AnySubscribeListener,
3
- EmptyEventName,
4
- EventListener, EventName,
5
- EventParams, NonEmptyEventName, RemoveEventListener,
6
- } from './types.js';
7
-
8
- type AddedEventListener = [listener: EventListener<any>, once: boolean];
9
-
10
- /**
11
- * Opinionated event emitter implementation.
12
- */
13
- export class EventEmitter<Schema> {
14
- private readonly listeners: Map<string, AddedEventListener[]> = new Map();
15
-
16
- private readonly subscribeListeners: AnySubscribeListener<Schema>[] = [];
17
-
18
- /**
19
- * Adds specified event listener.
20
- * @param event - event name.
21
- * @param listener - event listener.
22
- * @param once - should listener called only once.
23
- */
24
- private addListener<E extends EventName<Schema>>(
25
- event: E,
26
- listener: EventListener<Schema[E]>,
27
- once: boolean,
28
- ): RemoveEventListener {
29
- let listeners = this.listeners.get(event);
30
- if (!listeners) {
31
- listeners = [];
32
- this.listeners.set(event, listeners);
33
- }
34
-
35
- listeners.push([listener, once]);
36
-
37
- return () => this.off(event, listener);
38
- }
39
-
40
- /**
41
- * Emits known event which has no parameters.
42
- * @param event - event name.
43
- */
44
- emit<E extends EmptyEventName<Schema>>(event: E): void;
45
-
46
- /**
47
- * Emits known event which has parameters.
48
- * @param event - event name.
49
- * @param args - list of event listener arguments.
50
- */
51
- emit<E extends NonEmptyEventName<Schema>>(
52
- event: E,
53
- ...args: EventParams<Schema[E]>
54
- ): void;
55
-
56
- emit(event: EventName<Schema>, ...args: any[]): void {
57
- this.subscribeListeners.forEach((l) => (l as any)(event, ...args));
58
-
59
- const listeners = this.listeners.get(event);
60
- if (!listeners) {
61
- return;
62
- }
63
-
64
- listeners.forEach(([listener, once], idx) => {
65
- listener(...args);
66
- if (once) {
67
- listeners.splice(idx, 1);
68
- }
69
- });
70
- }
71
-
72
- /**
73
- * Adds event listener.
74
- * @param event - event name.
75
- * @param listener - event listener.
76
- * @returns Function to remove event listener.
77
- */
78
- on<E extends EventName<Schema>>(
79
- event: E,
80
- listener: EventListener<Schema[E]>,
81
- ): RemoveEventListener {
82
- return this.addListener(event, listener, false);
83
- }
84
-
85
- /**
86
- * Adds event listener following the logic, described in `on` method, but calls specified
87
- * listener only once, removing it after.
88
- * @param event - event name.
89
- * @param listener - event listener.
90
- * @returns Function to remove event listener.
91
- * @see on
92
- */
93
- once<E extends EventName<Schema>>(
94
- event: E,
95
- listener: EventListener<Schema[E]>,
96
- ): RemoveEventListener {
97
- return this.addListener(event, listener, true);
98
- }
99
-
100
- /**
101
- * Removes event listener. In case, specified listener was bound several times, it removes
102
- * only a single one.
103
- * @param event - event name.
104
- * @param listener - event listener.
105
- */
106
- off<E extends EventName<Schema>>(event: E, listener: EventListener<Schema[E]>): void {
107
- const listeners = this.listeners.get(event);
108
- if (!listeners) {
109
- return;
110
- }
111
-
112
- for (let i = 0; i < listeners.length; i += 1) {
113
- if (listener === listeners[i][0]) {
114
- listeners.splice(i, 1);
115
- return;
116
- }
117
- }
118
- }
119
-
120
- /**
121
- * Adds event listener to all events.
122
- * @param listener - events listener.
123
- * @returns Function to remove event listener.
124
- * @see on
125
- * @see once
126
- */
127
- subscribe(listener: AnySubscribeListener<Schema>): RemoveEventListener {
128
- this.subscribeListeners.push(listener);
129
- return () => this.unsubscribe(listener);
130
- }
131
-
132
- /**
133
- * Removes global event listener. In case, specified listener was bound several times, it removes
134
- * only a single one.
135
- * @param listener - events listener.
136
- * @returns Function to remove event listener.
137
- */
138
- unsubscribe(listener: AnySubscribeListener<Schema>): void {
139
- for (let i = 0; i < this.subscribeListeners.length; i += 1) {
140
- if (this.subscribeListeners[i] === listener) {
141
- this.subscribeListeners.splice(i, 1);
142
- return;
143
- }
144
- }
145
- }
146
- }
@@ -1,145 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
-
3
- import { EventEmitter } from '../EventEmitter';
4
-
5
- interface EventsMap {
6
- test: (a: number, b: boolean) => void;
7
- hey: never;
8
- }
9
-
10
- let ee: EventEmitter<EventsMap>;
11
-
12
- beforeEach(() => {
13
- ee = new EventEmitter<EventsMap>();
14
- });
15
-
16
- describe('on', () => {
17
- it('should emit bound listener with specified arguments', () => {
18
- const listener = vi.fn();
19
- ee.on('test', listener);
20
- ee.emit('test', 1, true);
21
- expect(listener).toHaveBeenCalledOnce();
22
- expect(listener).toBeCalledWith(1, true);
23
- });
24
-
25
- it('should emit bound listener with specified arguments as many times as it was bound', () => {
26
- const listener = vi.fn();
27
- ee.on('test', listener);
28
- ee.on('test', listener);
29
- ee.emit('test', 1, true);
30
- expect(listener).toHaveBeenCalledTimes(2);
31
- expect(listener).toHaveBeenNthCalledWith(1, 1, true);
32
- expect(listener).toHaveBeenNthCalledWith(2, 1, true);
33
- });
34
-
35
- it('should not emit bound listener in case, event name does not match', () => {
36
- const listener = vi.fn();
37
- ee.on('test', listener);
38
- ee.emit('hey');
39
- expect(listener).not.toBeCalled();
40
- });
41
-
42
- it('should remove listener if returned function was called', () => {
43
- const listener = vi.fn();
44
- const off = ee.on('test', listener);
45
-
46
- off();
47
- ee.emit('test', 1, true);
48
- expect(listener).not.toBeCalled();
49
- });
50
- });
51
-
52
- describe('once', () => {
53
- it('should emit bound listener with specified arguments only once', () => {
54
- const listener = vi.fn();
55
- ee.once('test', listener);
56
- ee.emit('test', 1, true);
57
- ee.emit('test', 1, true);
58
- ee.emit('test', 1, true);
59
- expect(listener).toHaveBeenCalledOnce();
60
- expect(listener).toBeCalledWith(1, true);
61
- });
62
-
63
- it('should emit bound listener with specified arguments as many times as it was bound', () => {
64
- const listener = vi.fn();
65
- ee.once('test', listener);
66
- ee.once('test', listener);
67
- ee.emit('test', 1, true);
68
- ee.emit('test', 1, true);
69
- expect(listener).toHaveBeenCalledTimes(2);
70
- expect(listener).toHaveBeenNthCalledWith(1, 1, true);
71
- expect(listener).toHaveBeenNthCalledWith(2, 1, true);
72
- });
73
-
74
- it('should not emit bound listener in case, event name does not match', () => {
75
- const listener = vi.fn();
76
- ee.once('test', listener);
77
- ee.emit('hey');
78
- expect(listener).not.toBeCalled();
79
- });
80
-
81
- it('should remove listener if returned function was called', () => {
82
- const listener = vi.fn();
83
- const off = ee.once('test', listener);
84
-
85
- off();
86
- ee.emit('test', 1, true);
87
- expect(listener).not.toBeCalled();
88
- });
89
- });
90
-
91
- describe('off', () => {
92
- it('should not emit bound listener in case, it was unbound', () => {
93
- const listener = vi.fn();
94
- ee.on('test', listener);
95
- ee.off('test', listener);
96
- ee.emit('test', 1, true);
97
- expect(listener).not.toBeCalled();
98
- });
99
-
100
- it('should not do anything in case, event has no listeners', () => {
101
- expect(() => {
102
- const listener = vi.fn();
103
- ee.off('test', listener);
104
- }).not.toThrow();
105
- });
106
-
107
- it('should remove event listener bound via "once" method', () => {
108
- const listener = vi.fn();
109
- ee.once('test', listener);
110
- ee.off('test', listener);
111
- ee.emit('test', 1, true);
112
- expect(listener).not.toBeCalled();
113
- });
114
-
115
- it('should not do anything if received not bound listener', () => {
116
- ee.on('test', vi.fn());
117
- expect(() => ee.off('test', vi.fn())).not.toThrow();
118
- });
119
- });
120
-
121
- describe('subscribe', () => {
122
- it('should catch any emitted event', () => {
123
- const listener = vi.fn();
124
- ee.subscribe(listener);
125
- ee.emit('test', 1, true);
126
- ee.emit('hey');
127
- expect(listener).toBeCalledTimes(2);
128
- expect(listener).toHaveBeenNthCalledWith(1, 'test', 1, true);
129
- expect(listener).toHaveBeenNthCalledWith(2, 'hey');
130
- });
131
- });
132
-
133
- describe('unsubscribe', () => {
134
- it('should not emit event if it was unbound', () => {
135
- const listener = vi.fn();
136
- ee.subscribe(listener);
137
- ee.unsubscribe(listener);
138
- ee.emit('test', 1, true);
139
- expect(listener).not.toBeCalled();
140
- });
141
-
142
- it('should not do anything if received not bound listener', () => {
143
- expect(() => ee.unsubscribe(vi.fn())).not.toThrow();
144
- });
145
- });
@@ -1,2 +0,0 @@
1
- export * from './EventEmitter.js';
2
- export * from './types.js';
@@ -1,60 +0,0 @@
1
- import type { IsNever } from '~/types/index.js';
2
-
3
- /**
4
- * Function accepting the list of passed arguments and returning nothing.
5
- */
6
- type VoidFunc<Args extends any[] = []> = (...args: Args) => void;
7
-
8
- /**
9
- * Accepts type assuming, it is responsible for describing event listener
10
- * parameters. Covers following cases:
11
- * 1. If function is passed, return its arguments.
12
- * 2. If never or void is passed, return empty tuple.
13
- * 3. If array is passed return this type.
14
- * 4. Otherwise, return tuple with passed type.
15
- */
16
- export type EventParams<Params> = Params extends any[]
17
- ? Params
18
- : Params extends (...args: any[]) => any
19
- ? Parameters<Params>
20
- : IsNever<Params> extends true
21
- ? []
22
- : Params extends void
23
- ? []
24
- : [Params];
25
-
26
- /**
27
- * Returns function that represents event listener with specified
28
- * list of parameters.
29
- */
30
- export type EventListener<Params> = VoidFunc<EventParams<Params>>;
31
-
32
- /**
33
- * Returns event names.
34
- */
35
- export type EventName<Schema> = Extract<keyof Schema, string>;
36
-
37
- /**
38
- * Returns event names which do not require any arguments.
39
- */
40
- export type EmptyEventName<Schema> = {
41
- [E in EventName<Schema>]: EventParams<Schema[E]> extends [] ? E : never;
42
- }[EventName<Schema>];
43
-
44
- /**
45
- * Returns event names which require arguments.
46
- */
47
- export type NonEmptyEventName<Schema> =
48
- Exclude<EventName<Schema>, EmptyEventName<Schema>>;
49
-
50
- /**
51
- * Represents any listener, which could be used in EventEmitter.subscribe.
52
- */
53
- export type AnySubscribeListener<Schema> = {
54
- [E in keyof Schema]: (event: E, ...args: EventParams<Schema[E]>) => void;
55
- }[keyof Schema];
56
-
57
- /**
58
- * Function which removes event listener.
59
- */
60
- export type RemoveEventListener = () => void;
package/src/globals.ts DELETED
@@ -1,38 +0,0 @@
1
- import { Logger } from '~/logger/index.js';
2
-
3
- let currentTargetOrigin = 'https://web.telegram.org';
4
-
5
- export const logger = new Logger('[SDK]', false);
6
-
7
- /**
8
- * Sets new debug mode. Enabling debug mode leads to printing
9
- * additional messages in console, related to the processes
10
- * inside the package.
11
- * @param value - should debug mode be enabled.
12
- */
13
- export function setDebug(value: boolean): void {
14
- if (value) {
15
- logger.enable();
16
- return;
17
- }
18
- logger.disable();
19
- }
20
-
21
- /**
22
- * Sets new global targetOrigin, used by `postEvent` method.
23
- * Default value is "https://web.telegram.org". You don't need to
24
- * use this method until you know what you are doing.
25
- *
26
- * This method could be used for test purposes.
27
- * @param value - new target origin.
28
- */
29
- export function setTargetOrigin(value: string): void {
30
- currentTargetOrigin = value;
31
- }
32
-
33
- /**
34
- * Returns current global target origin.
35
- */
36
- export function targetOrigin(): string {
37
- return currentTargetOrigin;
38
- }
@@ -1,70 +0,0 @@
1
- import {
2
- type ImpactHapticFeedbackStyle,
3
- type NotificationHapticFeedbackType,
4
- type PostEvent,
5
- postEvent as defaultPostEvent,
6
- } from '~/bridge/index.js';
7
- import {
8
- createSupportsFunc,
9
- type SupportsFunc,
10
- } from '~/supports/index.js';
11
- import type { Version } from '~/version/index.js';
12
-
13
- /**
14
- * Class which controls haptic feedback. It allows calling different types of
15
- * haptic notifications which usually occur after user interaction with
16
- * application.
17
- */
18
- export class HapticFeedback {
19
- constructor(
20
- version: Version,
21
- private readonly postEvent: PostEvent = defaultPostEvent,
22
- ) {
23
- this.supports = createSupportsFunc(version, {
24
- impactOccurred: 'web_app_trigger_haptic_feedback',
25
- notificationOccurred: 'web_app_trigger_haptic_feedback',
26
- selectionChanged: 'web_app_trigger_haptic_feedback',
27
- });
28
- }
29
-
30
- /**
31
- * A method tells that an impact occurred. The Telegram app may play the
32
- * appropriate haptics based on style value passed.
33
- * @param style - impact style.
34
- */
35
- impactOccurred(style: ImpactHapticFeedbackStyle): void {
36
- this.postEvent('web_app_trigger_haptic_feedback', {
37
- type: 'impact',
38
- impact_style: style,
39
- });
40
- }
41
-
42
- /**
43
- * A method tells that a task or action has succeeded, failed, or produced
44
- * a warning. The Telegram app may play the appropriate haptics based on
45
- * type value passed.
46
- * @param type - notification type.
47
- */
48
- notificationOccurred(type: NotificationHapticFeedbackType): void {
49
- this.postEvent('web_app_trigger_haptic_feedback', {
50
- type: 'notification',
51
- notification_type: type,
52
- });
53
- }
54
-
55
- /**
56
- * A method tells that the user has changed a selection. The Telegram app
57
- * may play the appropriate haptics.
58
- *
59
- * Do not use this feedback when the user makes or confirms a selection;
60
- * use it only when the selection changes.
61
- */
62
- selectionChanged(): void {
63
- this.postEvent('web_app_trigger_haptic_feedback', { type: 'selection_change' });
64
- }
65
-
66
- /**
67
- * Checks if specified method is supported by current component.
68
- */
69
- supports: SupportsFunc<'impactOccurred' | 'notificationOccurred' | 'selectionChanged'>;
70
- }
@@ -1,68 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
-
3
- import { HapticFeedback } from '../HapticFeedback';
4
-
5
- describe('impactOccurred', () => {
6
- it('should call "web_app_trigger_haptic_feedback" method with { type: "impact", style: {{style}} }', () => {
7
- const postEvent = vi.fn();
8
- const haptic = new HapticFeedback('', postEvent);
9
-
10
- expect(postEvent).toHaveBeenCalledTimes(0);
11
- haptic.impactOccurred('heavy');
12
- expect(postEvent).toHaveBeenCalledTimes(1);
13
- expect(postEvent).toHaveBeenCalledWith('web_app_trigger_haptic_feedback', {
14
- type: 'impact',
15
- impact_style: 'heavy',
16
- });
17
- });
18
- });
19
-
20
- describe('notificationOccurred', () => {
21
- it('should call "web_app_trigger_haptic_feedback" method with { type: "notification", notification_type: {{type}} }', () => {
22
- const postEvent = vi.fn();
23
- const haptic = new HapticFeedback('', postEvent);
24
-
25
- expect(postEvent).toHaveBeenCalledTimes(0);
26
- haptic.notificationOccurred('success');
27
- expect(postEvent).toHaveBeenCalledTimes(1);
28
- expect(postEvent).toHaveBeenCalledWith('web_app_trigger_haptic_feedback', {
29
- type: 'notification',
30
- notification_type: 'success',
31
- });
32
- });
33
- });
34
-
35
- describe('selectionChanged', () => {
36
- it('should call "web_app_trigger_haptic_feedback" method with { type: "selection_change" }', () => {
37
- const postEvent = vi.fn();
38
- const haptic = new HapticFeedback('', postEvent);
39
-
40
- expect(postEvent).toHaveBeenCalledTimes(0);
41
- haptic.selectionChanged();
42
- expect(postEvent).toHaveBeenCalledTimes(1);
43
- expect(postEvent).toHaveBeenCalledWith('web_app_trigger_haptic_feedback', {
44
- type: 'selection_change',
45
- });
46
- });
47
- });
48
-
49
- describe('supports', () => {
50
- describe('impactOccurred / notificationOccurred / selectionChanged', () => {
51
- it('should return true in case, HapticFeedback version is 6.1 or higher. False, otherwise', () => {
52
- const haptic1 = new HapticFeedback('6.0');
53
- expect(haptic1.supports('impactOccurred')).toBe(false);
54
- expect(haptic1.supports('notificationOccurred')).toBe(false);
55
- expect(haptic1.supports('selectionChanged')).toBe(false);
56
-
57
- const haptic2 = new HapticFeedback('6.1');
58
- expect(haptic2.supports('impactOccurred')).toBe(true);
59
- expect(haptic2.supports('notificationOccurred')).toBe(true);
60
- expect(haptic2.supports('selectionChanged')).toBe(true);
61
-
62
- const haptic3 = new HapticFeedback('6.2');
63
- expect(haptic3.supports('impactOccurred')).toBe(true);
64
- expect(haptic3.supports('notificationOccurred')).toBe(true);
65
- expect(haptic3.supports('selectionChanged')).toBe(true);
66
- });
67
- });
68
- });
@@ -1 +0,0 @@
1
- export * from './HapticFeedback.js';