airdcpp-apisocket 2.4.5-beta.1 → 2.5.0-beta.2

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 (99) hide show
  1. package/GUIDE.md +1 -1
  2. package/README.md +3 -2
  3. package/dist/ApiConstants.d.ts +6 -6
  4. package/dist/ApiConstants.js +7 -7
  5. package/dist/NodeSocket.d.ts +4 -4
  6. package/dist/NodeSocket.js +24 -24
  7. package/dist/Promise.d.ts +8 -8
  8. package/dist/Promise.js +26 -26
  9. package/dist/PublicHelpers.d.ts +2 -2
  10. package/dist/PublicHelpers.js +94 -99
  11. package/dist/PublicHelpers.js.map +1 -1
  12. package/dist/SocketBase.d.ts +4 -4
  13. package/dist/SocketBase.js +351 -343
  14. package/dist/SocketBase.js.map +1 -1
  15. package/dist/SocketLogger.d.ts +9 -9
  16. package/dist/SocketLogger.js +74 -74
  17. package/dist/SocketLogger.js.map +1 -1
  18. package/dist/SocketRequestHandler.d.ts +14 -14
  19. package/dist/SocketRequestHandler.js +168 -162
  20. package/dist/SocketRequestHandler.js.map +1 -1
  21. package/dist/SocketSubscriptionHandler.d.ts +11 -11
  22. package/dist/SocketSubscriptionHandler.js +161 -158
  23. package/dist/SocketSubscriptionHandler.js.map +1 -1
  24. package/dist/types/api.d.ts +30 -30
  25. package/dist/types/api.js +3 -3
  26. package/dist/types/api_internal.d.ts +24 -24
  27. package/dist/types/api_internal.js +2 -2
  28. package/dist/types/index.d.ts +7 -7
  29. package/dist/types/index.js +23 -23
  30. package/dist/types/logger.d.ts +6 -6
  31. package/dist/types/logger.js +2 -2
  32. package/dist/types/options.d.ts +31 -31
  33. package/dist/types/options.js +3 -3
  34. package/dist/types/public_helpers.d.ts +19 -14
  35. package/dist/types/public_helpers.js +2 -2
  36. package/dist/types/public_helpers_internal.d.ts +27 -25
  37. package/dist/types/public_helpers_internal.js +2 -2
  38. package/dist/types/requests.d.ts +14 -14
  39. package/dist/types/requests.js +2 -2
  40. package/dist/types/socket.d.ts +23 -23
  41. package/dist/types/socket.js +2 -2
  42. package/dist/types/subscriptions.d.ts +20 -20
  43. package/dist/types/subscriptions.js +2 -2
  44. package/dist/utils.d.ts +2 -2
  45. package/dist/utils.js +15 -15
  46. package/dist-es/ApiConstants.d.ts +6 -6
  47. package/dist-es/ApiConstants.js +5 -5
  48. package/dist-es/NodeSocket.d.ts +4 -4
  49. package/dist-es/NodeSocket.js +4 -4
  50. package/dist-es/Promise.d.ts +8 -8
  51. package/dist-es/Promise.js +24 -24
  52. package/dist-es/PublicHelpers.d.ts +2 -2
  53. package/dist-es/PublicHelpers.js +90 -95
  54. package/dist-es/PublicHelpers.js.map +1 -1
  55. package/dist-es/SocketBase.d.ts +4 -4
  56. package/dist-es/SocketBase.js +346 -338
  57. package/dist-es/SocketBase.js.map +1 -1
  58. package/dist-es/SocketLogger.d.ts +9 -9
  59. package/dist-es/SocketLogger.js +68 -68
  60. package/dist-es/SocketLogger.js.map +1 -1
  61. package/dist-es/SocketRequestHandler.d.ts +14 -14
  62. package/dist-es/SocketRequestHandler.js +163 -157
  63. package/dist-es/SocketRequestHandler.js.map +1 -1
  64. package/dist-es/SocketSubscriptionHandler.d.ts +11 -11
  65. package/dist-es/SocketSubscriptionHandler.js +156 -153
  66. package/dist-es/SocketSubscriptionHandler.js.map +1 -1
  67. package/dist-es/types/api.d.ts +30 -30
  68. package/dist-es/types/api.js +2 -2
  69. package/dist-es/types/api_internal.d.ts +24 -24
  70. package/dist-es/types/api_internal.js +1 -1
  71. package/dist-es/types/index.d.ts +7 -7
  72. package/dist-es/types/index.js +7 -7
  73. package/dist-es/types/logger.d.ts +6 -6
  74. package/dist-es/types/logger.js +1 -1
  75. package/dist-es/types/options.d.ts +31 -31
  76. package/dist-es/types/options.js +2 -2
  77. package/dist-es/types/public_helpers.d.ts +19 -14
  78. package/dist-es/types/public_helpers.js +1 -1
  79. package/dist-es/types/public_helpers_internal.d.ts +27 -25
  80. package/dist-es/types/public_helpers_internal.js +1 -1
  81. package/dist-es/types/requests.d.ts +14 -14
  82. package/dist-es/types/requests.js +1 -1
  83. package/dist-es/types/socket.d.ts +23 -23
  84. package/dist-es/types/socket.js +1 -1
  85. package/dist-es/types/subscriptions.d.ts +20 -20
  86. package/dist-es/types/subscriptions.js +1 -1
  87. package/dist-es/utils.d.ts +2 -2
  88. package/dist-es/utils.js +11 -11
  89. package/jest.config.js +0 -3
  90. package/package.json +5 -5
  91. package/src/PublicHelpers.ts +10 -9
  92. package/src/SocketLogger.ts +1 -1
  93. package/src/SocketRequestHandler.ts +2 -2
  94. package/src/tests/Socket.test.ts +4 -9
  95. package/src/tests/helpers.ts +7 -2
  96. package/src/tests/public_helpers.test.ts +4 -4
  97. package/src/types/public_helpers.ts +7 -1
  98. package/src/types/public_helpers_internal.ts +3 -1
  99. package/tsconfig.json +2 -3
@@ -1,25 +1,27 @@
1
- import { ContextMenuItem } from './public_helpers.js';
2
- export interface SelectedMenuItemListenerData<IdT, EntityIdT> {
3
- hook_id: string;
4
- menu_id: string;
5
- menuitem_id: string;
6
- selected_ids: IdT[];
7
- entity_id: EntityIdT | null;
8
- permissions: string[];
9
- supports: string[];
10
- form_values: object;
11
- }
12
- export interface MenuItemListHookData<IdT, EntityIdT> {
13
- selected_ids: IdT[];
14
- entity_id: EntityIdT | null;
15
- permissions: string[];
16
- supports: string[];
17
- }
18
- export interface ResponseMenuItemCallbackFields {
19
- urls?: string[] | undefined;
20
- form_definitions?: object[] | undefined;
21
- }
22
- export type ResponseMenuItem<IdT, EntityIdT> = Omit<ContextMenuItem<IdT, EntityIdT>, 'onClick' | 'filter' | 'urls' | 'form_definitions'> & ResponseMenuItemCallbackFields;
23
- export interface MenuItemListHookAcceptData<IdT, EntityIdT> {
24
- menuitems: ResponseMenuItem<IdT, EntityIdT>[];
25
- }
1
+ import { ContextMenuIcon, ContextMenuItem } from './public_helpers.js';
2
+ export interface SelectedMenuItemListenerData<IdT, EntityIdT> {
3
+ hook_id: string;
4
+ menu_id: string;
5
+ menuitem_id: string;
6
+ selected_ids: IdT[];
7
+ entity_id: EntityIdT | null;
8
+ permissions: string[];
9
+ supports: string[];
10
+ form_values: object;
11
+ }
12
+ export interface MenuItemListHookData<IdT, EntityIdT> {
13
+ selected_ids: IdT[];
14
+ entity_id: EntityIdT | null;
15
+ permissions: string[];
16
+ supports: string[];
17
+ }
18
+ export interface ResponseMenuItemCallbackFields {
19
+ urls?: string[] | undefined;
20
+ form_definitions?: object[] | undefined;
21
+ }
22
+ export type ResponseMenuItem<IdT, EntityIdT> = Omit<ContextMenuItem<IdT, EntityIdT>, 'onClick' | 'filter' | 'urls' | 'form_definitions'> & ResponseMenuItemCallbackFields;
23
+ export interface MenuItemListHookAcceptData<IdT, EntityIdT> {
24
+ menuitems: ResponseMenuItem<IdT, EntityIdT>[];
25
+ icon?: ContextMenuIcon;
26
+ title?: string;
27
+ }
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=public_helpers_internal.js.map
@@ -1,14 +1,14 @@
1
- import * as API from './api.js';
2
- export interface SocketRequestMethods {
3
- put: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
4
- patch: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
5
- post: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
6
- delete: <ResponseT extends object | void>(path: string) => Promise<ResponseT>;
7
- get: <ResponseT extends object | void>(path: string) => Promise<ResponseT>;
8
- getPendingRequestCount: () => number;
9
- }
10
- export interface ErrorResponse {
11
- message: string;
12
- code: number;
13
- json: API.FieldError | API.ErrorBase;
14
- }
1
+ import * as API from './api.js';
2
+ export interface SocketRequestMethods {
3
+ put: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
4
+ patch: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
5
+ post: <ResponseT extends object | void>(path: string, data?: object) => Promise<ResponseT>;
6
+ delete: <ResponseT extends object | void>(path: string) => Promise<ResponseT>;
7
+ get: <ResponseT extends object | void>(path: string) => Promise<ResponseT>;
8
+ getPendingRequestCount: () => number;
9
+ }
10
+ export interface ErrorResponse {
11
+ message: string;
12
+ code: number;
13
+ json: API.FieldError | API.ErrorBase;
14
+ }
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=requests.js.map
@@ -1,23 +1,23 @@
1
- import { AuthTokenType, LogoutResponse, AuthenticationResponse } from './api.js';
2
- import { Logger } from './logger.js';
3
- import { SocketRequestMethods } from './requests.js';
4
- import { SocketSubscriptions } from './subscriptions.js';
5
- export type ConnectedCallback = (data: AuthenticationResponse) => void;
6
- export type SessionResetCallback = () => void;
7
- export type DisconnectedCallback = (reason: string, code: number, wasClean: boolean) => void;
8
- export interface APISocket extends SocketRequestMethods, SocketSubscriptions {
9
- connect: (username?: string, password?: string, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
10
- connectRefreshToken: (refreshToken: string, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
11
- disconnect: (autoConnect?: boolean, reason?: string) => void;
12
- waitDisconnected: (timeoutMs?: number) => Promise<void>;
13
- reconnect: (token?: AuthTokenType, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
14
- logout: () => Promise<LogoutResponse>;
15
- isConnecting: () => boolean;
16
- isConnected: () => boolean;
17
- isActive: () => boolean;
18
- logger: Logger;
19
- onConnected: ConnectedCallback | null;
20
- onSessionReset: SessionResetCallback | null;
21
- onDisconnected: DisconnectedCallback | null;
22
- readonly nativeSocket: WebSocket | null;
23
- }
1
+ import { AuthTokenType, LogoutResponse, AuthenticationResponse } from './api.js';
2
+ import { Logger } from './logger.js';
3
+ import { SocketRequestMethods } from './requests.js';
4
+ import { SocketSubscriptions } from './subscriptions.js';
5
+ export type ConnectedCallback = (data: AuthenticationResponse) => void;
6
+ export type SessionResetCallback = () => void;
7
+ export type DisconnectedCallback = (reason: string, code: number, wasClean: boolean) => void;
8
+ export interface APISocket extends SocketRequestMethods, SocketSubscriptions {
9
+ connect: (username?: string, password?: string, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
10
+ connectRefreshToken: (refreshToken: string, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
11
+ disconnect: (autoConnect?: boolean, reason?: string) => void;
12
+ waitDisconnected: (timeoutMs?: number) => Promise<void>;
13
+ reconnect: (token?: AuthTokenType, reconnectOnFailure?: boolean) => Promise<AuthenticationResponse>;
14
+ logout: () => Promise<LogoutResponse>;
15
+ isConnecting: () => boolean;
16
+ isConnected: () => boolean;
17
+ isActive: () => boolean;
18
+ logger: Logger;
19
+ onConnected: ConnectedCallback | null;
20
+ onSessionReset: SessionResetCallback | null;
21
+ onDisconnected: DisconnectedCallback | null;
22
+ readonly nativeSocket: WebSocket | null;
23
+ }
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=socket.js.map
@@ -1,20 +1,20 @@
1
- import * as API from './api.js';
2
- export type SubscriptionRemoveHandler = (sendApi?: boolean) => void;
3
- export type SubscriptionCallback<DataT extends object | void = object, EntityIdT = API.EntityId | undefined> = (data: DataT, entityId: EntityIdT) => void;
4
- export interface HookSubscriberInfo {
5
- id: string;
6
- name: string;
7
- }
8
- export type HookRejectHandler = (rejectId: string, rejectMessage: string) => void;
9
- export type HookAcceptHandler<DataT extends object | undefined> = (data: DataT) => void;
10
- export type HookCallback<DataT extends object = object, CompletionDataT extends object | undefined = object | undefined> = (data: DataT, accept: HookAcceptHandler<CompletionDataT>, reject: HookRejectHandler) => void;
11
- export interface SocketSubscriptions {
12
- addHook: <DataT extends object, CompletionDataT extends object | undefined>(apiModule: string, event: string, callback: HookCallback<DataT, CompletionDataT>, subscriberInfo: HookSubscriberInfo) => Promise<SubscriptionRemoveHandler>;
13
- addListener: <DataT extends object | void, EntityIdT extends API.EntityId | undefined = undefined>(apiModule: string, event: string, callback: SubscriptionCallback<DataT, EntityIdT>, entityId?: API.EntityId) => Promise<SubscriptionRemoveHandler>;
14
- addViewUpdateListener: <DataT extends object | void, EntityIdT extends API.EntityId | undefined = undefined>(viewName: string, callback: SubscriptionCallback<DataT, EntityIdT>, entityId?: API.EntityId) => () => void;
15
- hasListeners: () => boolean;
16
- getPendingSubscriptionCount: () => number;
17
- }
18
- export type AddHook = SocketSubscriptions['addHook'];
19
- export type AddListener = SocketSubscriptions['addListener'];
20
- export type AddViewUpdateListener = SocketSubscriptions['addViewUpdateListener'];
1
+ import * as API from './api.js';
2
+ export type SubscriptionRemoveHandler = (sendApi?: boolean) => void;
3
+ export type SubscriptionCallback<DataT extends object | void = object, EntityIdT = API.EntityId | undefined> = (data: DataT, entityId: EntityIdT) => void;
4
+ export interface HookSubscriberInfo {
5
+ id: string;
6
+ name: string;
7
+ }
8
+ export type HookRejectHandler = (rejectId: string, rejectMessage: string) => void;
9
+ export type HookAcceptHandler<DataT extends object | undefined> = (data: DataT) => void;
10
+ export type HookCallback<DataT extends object = object, CompletionDataT extends object | undefined = object | undefined> = (data: DataT, accept: HookAcceptHandler<CompletionDataT>, reject: HookRejectHandler) => void;
11
+ export interface SocketSubscriptions {
12
+ addHook: <DataT extends object, CompletionDataT extends object | undefined>(apiModule: string, event: string, callback: HookCallback<DataT, CompletionDataT>, subscriberInfo: HookSubscriberInfo) => Promise<SubscriptionRemoveHandler>;
13
+ addListener: <DataT extends object | void, EntityIdT extends API.EntityId | undefined = undefined>(apiModule: string, event: string, callback: SubscriptionCallback<DataT, EntityIdT>, entityId?: API.EntityId) => Promise<SubscriptionRemoveHandler>;
14
+ addViewUpdateListener: <DataT extends object | void, EntityIdT extends API.EntityId | undefined = undefined>(viewName: string, callback: SubscriptionCallback<DataT, EntityIdT>, entityId?: API.EntityId) => () => void;
15
+ hasListeners: () => boolean;
16
+ getPendingSubscriptionCount: () => number;
17
+ }
18
+ export type AddHook = SocketSubscriptions['addHook'];
19
+ export type AddListener = SocketSubscriptions['addListener'];
20
+ export type AddViewUpdateListener = SocketSubscriptions['addViewUpdateListener'];
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=subscriptions.js.map
@@ -1,2 +1,2 @@
1
- import * as Options from './types/options.js';
2
- export declare const eventIgnored: (path: string, ignoredEvents?: Options.IgnoreMatcher) => boolean;
1
+ import * as Options from './types/options.js';
2
+ export declare const eventIgnored: (path: string, ignoredEvents?: Options.IgnoreMatcher) => boolean;
package/dist-es/utils.js CHANGED
@@ -1,12 +1,12 @@
1
- export const eventIgnored = (path, ignoredEvents) => {
2
- if (!ignoredEvents) {
3
- return false;
4
- }
5
- // Array?
6
- if (Array.isArray(ignoredEvents)) {
7
- return ignoredEvents.indexOf(path) !== -1;
8
- }
9
- // Regexp
10
- return ignoredEvents.test(path);
11
- };
1
+ export const eventIgnored = (path, ignoredEvents) => {
2
+ if (!ignoredEvents) {
3
+ return false;
4
+ }
5
+ // Array?
6
+ if (Array.isArray(ignoredEvents)) {
7
+ return ignoredEvents.indexOf(path) !== -1;
8
+ }
9
+ // Regexp
10
+ return ignoredEvents.test(path);
11
+ };
12
12
  //# sourceMappingURL=utils.js.map
package/jest.config.js CHANGED
@@ -13,9 +13,6 @@ const jestConfig = {
13
13
  roots: [
14
14
  '<rootDir>/src/'
15
15
  ],
16
- transformIgnorePatterns: [
17
- '<rootDir>\/node_modules\/(?!chalk)\/'
18
- ],
19
16
  moduleNameMapper: {
20
17
  '^(\\.{1,2}/.*)\\.js$': '$1',
21
18
  '#(.*)': '<rootDir>/node_modules/$1',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "airdcpp-apisocket",
3
- "version": "2.4.5-beta.1",
3
+ "version": "2.5.0-beta.2",
4
4
  "description": "Javascript connector for AirDC++ Web API",
5
5
  "license": "MIT",
6
6
  "authors": [
@@ -22,7 +22,7 @@
22
22
  "scripts": {
23
23
  "build": "npm run build-commonjs && npm run build-es",
24
24
  "build-commonjs": "rimraf dist && tsc -d --outDir dist --module CommonJS",
25
- "build-es": "rimraf dist-es && tsc -d --outDir dist-es --module es2015",
25
+ "build-es": "rimraf dist-es && tsc -d --outDir dist-es --module es2020",
26
26
  "clean": "rimraf dist/*",
27
27
  "lint": "tslint --project tsconfig.json",
28
28
  "lint-fix": "tslint --project tsconfig.json --fix",
@@ -33,7 +33,7 @@
33
33
  "test"
34
34
  ],
35
35
  "dependencies": {
36
- "chalk": "^5.1.2",
36
+ "chalk": "^4.1.2",
37
37
  "events": "^3.3.0",
38
38
  "invariant": "^2.2.4",
39
39
  "is-in-browser": "^2.0.0",
@@ -53,11 +53,11 @@
53
53
  "ts-jest": "^28.0.8",
54
54
  "ts-node": "^10.9.1",
55
55
  "tslint": "^6.1.3",
56
- "typescript": "^4.8.4",
56
+ "typescript": "^5.0.2",
57
57
  "wait-for-expect": "^3.0.2",
58
58
  "websocket": "^1.0.34"
59
59
  },
60
60
  "main": "./dist/NodeSocket.js",
61
- "module": "./dist-es/NodeSocket.js",
61
+ "exports": "./dist-es/NodeSocket.js",
62
62
  "type": "module"
63
63
  }
@@ -1,4 +1,4 @@
1
- import { HookSubscriberInfo, APISocket, ContextMenuItem, EntityId } from './types/index.js';
1
+ import { APISocket, ContextMenuItem, EntityId, ContextMenu } from './types/index.js';
2
2
  import {
3
3
  SelectedMenuItemListenerData, MenuItemListHookData,
4
4
  MenuItemListHookAcceptData, ResponseMenuItemCallbackFields
@@ -71,15 +71,15 @@ const parseCallbackData = async <IdT, EntityIdT extends EntityId | undefined = u
71
71
 
72
72
  export const addContextMenuItems = async <IdT, EntityIdT extends EntityId | undefined = undefined>(
73
73
  socket: APISocket,
74
- menuItems: ContextMenuItem<IdT, EntityIdT>[],
75
- menuId: string,
76
- subscriberInfo: HookSubscriberInfo
74
+ menuItems: ContextMenuItem<IdT, EntityIdT>[],
75
+ menuTypeId: string,
76
+ menu: ContextMenu
77
77
  ) => {
78
78
  const removeListener = await socket.addListener<SelectedMenuItemListenerData<IdT, EntityIdT>, EntityIdT>(
79
79
  'menus',
80
- `${menuId}_menuitem_selected`,
80
+ `${menuTypeId}_menuitem_selected`,
81
81
  async (data) => {
82
- if (data.hook_id === subscriberInfo.id) {
82
+ if (data.hook_id === menu.id) {
83
83
  const menuItem = menuItems.find(i => data.menuitem_id === i.id);
84
84
  if (!!menuItem) {
85
85
  const isValid = await validateItem(menuItem, data);
@@ -97,7 +97,7 @@ export const addContextMenuItems = async <IdT, EntityIdT extends EntityId | unde
97
97
  MenuItemListHookAcceptData<IdT, EntityIdT> | undefined
98
98
  >(
99
99
  'menus',
100
- `${menuId}_list_menuitems`,
100
+ `${menuTypeId}_list_menuitems`,
101
101
  async (data, accept, reject) => {
102
102
  const validItems = [];
103
103
  for (const item of menuItems) {
@@ -118,10 +118,11 @@ export const addContextMenuItems = async <IdT, EntityIdT extends EntityId | unde
118
118
  }
119
119
 
120
120
  accept({
121
- menuitems: validItems
121
+ menuitems: validItems,
122
+ icon: menu.icon,
122
123
  });
123
124
  },
124
- subscriberInfo
125
+ menu
125
126
  );
126
127
 
127
128
  return () => {
@@ -27,7 +27,7 @@ const Severities = {
27
27
  const shouldFormatLine = isJsDom || !isBrowser;
28
28
 
29
29
  const Logger = ({ logLevel: logSetting = LOG_VERBOSE, logOutput = console }: Options.LoggerOptions) => {
30
- const logLevel = Severities[logSetting];
30
+ const logLevel = Severities[logSetting as keyof typeof Severities];
31
31
 
32
32
  invariant(
33
33
  // @ts-ignore: This condition will always return true since the function is always defined
@@ -25,7 +25,7 @@ const SocketRequestHandler = (
25
25
  { requestTimeout = 30, ignoredRequestPaths }: Options.SocketRequestOptions
26
26
  ) => {
27
27
 
28
- let callbacks: { [key: number]: Callback } = {};
28
+ let callbacks: Record<string, Callback> = {};
29
29
  let currentCallbackId = 0;
30
30
 
31
31
  let timeoutReportInterval: any;
@@ -85,7 +85,7 @@ const SocketRequestHandler = (
85
85
  // Callback
86
86
  const resolver = Promise.pending();
87
87
 
88
- callbacks[callbackId] = {
88
+ callbacks[callbackId.toString()] = {
89
89
  time: Date.now(),
90
90
  resolver,
91
91
  ignored,
@@ -1,22 +1,17 @@
1
1
  import {
2
2
  AUTH_RESPONSE, CONNECT_PARAMS,
3
- getConnectedSocket, getMockServer, getSocket
3
+ getConnectedSocket, getMockServer, getSocket, waitForExpect
4
4
  } from './helpers.js';
5
5
 
6
6
  import ApiConstants from '../ApiConstants.js';
7
7
 
8
- import { HookCallback, HookSubscriberInfo } from '../types/subscriptions.js';
8
+ import { HookCallback, HookSubscriberInfo, SubscriptionRemoveHandler } from '../types/subscriptions.js';
9
9
  import { IncomingSubscriptionEvent } from '../types/api_internal.js';
10
10
 
11
- import waitForExpectOriginal from 'wait-for-expect';
12
11
  import { jest } from '@jest/globals';
13
12
 
14
13
  let server: ReturnType<typeof getMockServer>;
15
14
 
16
- const EXCEPT_TIMEOUT = 1000;
17
- const waitForExpect = (func: () => void | Promise<void>) => waitForExpectOriginal.default(func, EXCEPT_TIMEOUT);
18
-
19
-
20
15
  const dummyfn = () => {
21
16
  // ..
22
17
  };
@@ -302,7 +297,7 @@ describe('socket', () => {
302
297
  socket.reconnect();
303
298
 
304
299
  {
305
- const waitForExpectTask = waitForExpectOriginal.default(
300
+ const waitForExpectTask = waitForExpect(
306
301
  () => {
307
302
  jest.runOnlyPendingTimers();
308
303
  expect(authCallback.mock.calls.length).toBe(1);
@@ -494,7 +489,7 @@ describe('socket', () => {
494
489
 
495
490
  test('should handle hook actions', async () => {
496
491
  const { socket, mockConsole } = await getConnectedSocket(server);
497
- let removeListener = null;
492
+ let removeListener: SubscriptionRemoveHandler | null = null;
498
493
 
499
494
  // Add hook
500
495
  {
@@ -7,6 +7,11 @@ import * as Options from '../types/options.js';
7
7
  import ApiConstants from '../ApiConstants.js';
8
8
  import { EventEmitter } from 'events';
9
9
 
10
+ import waitForExpectOriginal from 'wait-for-expect';
11
+
12
+ const EXCEPT_TIMEOUT = 1000;
13
+ //@ts-ignore
14
+ export const waitForExpect = (func: () => void | Promise<void>) => waitForExpectOriginal.default(func, EXCEPT_TIMEOUT);
10
15
 
11
16
  const VERBOSE = false;
12
17
 
@@ -131,8 +136,8 @@ const getMockServer = () => {
131
136
  mockServer.on('connection', s => {
132
137
  socket = s;
133
138
 
134
- socket.on('message', (messageObj: string) => {
135
- const request: OutgoingRequest = JSON.parse(messageObj);
139
+ socket.on('message', (messageObj) => {
140
+ const request: OutgoingRequest = JSON.parse(messageObj as string);
136
141
  emitter.emit(toEmitId(request.path, request.method), request, s);
137
142
  });
138
143
  });
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getMockServer,
3
3
  getConnectedSocket,
4
+ waitForExpect,
4
5
  } from './helpers.js';
5
6
 
6
- import waitForExpect from 'wait-for-expect';
7
7
  import { jest } from '@jest/globals';
8
8
 
9
9
  import { addContextMenuItems } from '../PublicHelpers.js';
@@ -188,7 +188,7 @@ describe('public helpers', () => {
188
188
 
189
189
  // Validate list items results
190
190
  {
191
- await waitForExpect.default(() => {
191
+ await waitForExpect(() => {
192
192
  expect(hookResolveCallback).toHaveBeenCalledTimes(1);
193
193
  });
194
194
 
@@ -198,7 +198,7 @@ describe('public helpers', () => {
198
198
  }),
199
199
  );
200
200
 
201
- await waitForExpect.default(() => {
201
+ await waitForExpect(() => {
202
202
  expect(onGetUrlsItem3Mock).toHaveBeenCalledTimes(1);
203
203
  });
204
204
  expect(onGetUrlsItem3Mock).toHaveBeenCalledWith(selectedMenuIds, null, PERMISSIONS, SUPPORTS);
@@ -226,7 +226,7 @@ describe('public helpers', () => {
226
226
 
227
227
  // Validate select event results
228
228
  {
229
- await waitForExpect.default(() => {
229
+ await waitForExpect(() => {
230
230
  expect(onClickItem1Mock).toHaveBeenCalledTimes(1);
231
231
  });
232
232
  expect(onClickItem1Mock).toHaveBeenCalledWith(selectedMenuIds, null, PERMISSIONS, SUPPORTS, FORM_VALUES);
@@ -1,3 +1,4 @@
1
+ import { HookSubscriberInfo } from './subscriptions.js';
1
2
 
2
3
  type AsyncCallbackProperty<IdT, EntityIdT, ReturnT> = (
3
4
  selectedIds: IdT[],
@@ -6,10 +7,15 @@ type AsyncCallbackProperty<IdT, EntityIdT, ReturnT> = (
6
7
  supports: string[]
7
8
  ) => ReturnT | Promise<ReturnT>;
8
9
 
10
+ export type ContextMenuIcon = { [key in string]: string };
11
+
12
+ export interface ContextMenu extends HookSubscriberInfo {
13
+ icon?: ContextMenuIcon;
14
+ }
9
15
  export interface ContextMenuItem<IdT, EntityIdT> {
10
16
  id: string;
11
17
  title: string;
12
- icon?: { [key in string]: string };
18
+ icon?: ContextMenuIcon;
13
19
  urls?: string[] | AsyncCallbackProperty<IdT, EntityIdT, string[] | undefined>;
14
20
  onClick?: (
15
21
  selectedIds: IdT[],
@@ -1,4 +1,4 @@
1
- import { ContextMenuItem } from './public_helpers.js';
1
+ import { ContextMenuIcon, ContextMenuItem } from './public_helpers.js';
2
2
 
3
3
 
4
4
  export interface SelectedMenuItemListenerData<IdT, EntityIdT> {
@@ -28,4 +28,6 @@ export type ResponseMenuItem<IdT, EntityIdT> = Omit<ContextMenuItem<IdT, EntityI
28
28
 
29
29
  export interface MenuItemListHookAcceptData<IdT, EntityIdT> {
30
30
  menuitems: ResponseMenuItem<IdT, EntityIdT>[];
31
+ icon?: ContextMenuIcon;
32
+ title?: string;
31
33
  }
package/tsconfig.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "compilerOptions": {
3
3
  "outDir": "build/dist",
4
4
  "module": "esnext",
5
- "target": "ES2015",
6
- "lib": ["es6", "dom", "esnext.asynciterable", "es2018"],
5
+ "target": "ES2018",
6
+ "lib": ["dom", "esnext.asynciterable", "ES2018"],
7
7
  "sourceMap": true,
8
8
  "moduleResolution": "nodenext",
9
9
  "rootDir": "src",
@@ -12,7 +12,6 @@
12
12
  "noImplicitThis": true,
13
13
  "noImplicitAny": true,
14
14
  "strictNullChecks": true,
15
- "suppressImplicitAnyIndexErrors": true,
16
15
  "noUnusedLocals": true,
17
16
  "baseUrl": ".",
18
17
  "experimentalDecorators": true,