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.
- package/GUIDE.md +1 -1
- package/README.md +3 -2
- package/dist/ApiConstants.d.ts +6 -6
- package/dist/ApiConstants.js +7 -7
- package/dist/NodeSocket.d.ts +4 -4
- package/dist/NodeSocket.js +24 -24
- package/dist/Promise.d.ts +8 -8
- package/dist/Promise.js +26 -26
- package/dist/PublicHelpers.d.ts +2 -2
- package/dist/PublicHelpers.js +94 -99
- package/dist/PublicHelpers.js.map +1 -1
- package/dist/SocketBase.d.ts +4 -4
- package/dist/SocketBase.js +351 -343
- package/dist/SocketBase.js.map +1 -1
- package/dist/SocketLogger.d.ts +9 -9
- package/dist/SocketLogger.js +74 -74
- package/dist/SocketLogger.js.map +1 -1
- package/dist/SocketRequestHandler.d.ts +14 -14
- package/dist/SocketRequestHandler.js +168 -162
- package/dist/SocketRequestHandler.js.map +1 -1
- package/dist/SocketSubscriptionHandler.d.ts +11 -11
- package/dist/SocketSubscriptionHandler.js +161 -158
- package/dist/SocketSubscriptionHandler.js.map +1 -1
- package/dist/types/api.d.ts +30 -30
- package/dist/types/api.js +3 -3
- package/dist/types/api_internal.d.ts +24 -24
- package/dist/types/api_internal.js +2 -2
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +23 -23
- package/dist/types/logger.d.ts +6 -6
- package/dist/types/logger.js +2 -2
- package/dist/types/options.d.ts +31 -31
- package/dist/types/options.js +3 -3
- package/dist/types/public_helpers.d.ts +19 -14
- package/dist/types/public_helpers.js +2 -2
- package/dist/types/public_helpers_internal.d.ts +27 -25
- package/dist/types/public_helpers_internal.js +2 -2
- package/dist/types/requests.d.ts +14 -14
- package/dist/types/requests.js +2 -2
- package/dist/types/socket.d.ts +23 -23
- package/dist/types/socket.js +2 -2
- package/dist/types/subscriptions.d.ts +20 -20
- package/dist/types/subscriptions.js +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +15 -15
- package/dist-es/ApiConstants.d.ts +6 -6
- package/dist-es/ApiConstants.js +5 -5
- package/dist-es/NodeSocket.d.ts +4 -4
- package/dist-es/NodeSocket.js +4 -4
- package/dist-es/Promise.d.ts +8 -8
- package/dist-es/Promise.js +24 -24
- package/dist-es/PublicHelpers.d.ts +2 -2
- package/dist-es/PublicHelpers.js +90 -95
- package/dist-es/PublicHelpers.js.map +1 -1
- package/dist-es/SocketBase.d.ts +4 -4
- package/dist-es/SocketBase.js +346 -338
- package/dist-es/SocketBase.js.map +1 -1
- package/dist-es/SocketLogger.d.ts +9 -9
- package/dist-es/SocketLogger.js +68 -68
- package/dist-es/SocketLogger.js.map +1 -1
- package/dist-es/SocketRequestHandler.d.ts +14 -14
- package/dist-es/SocketRequestHandler.js +163 -157
- package/dist-es/SocketRequestHandler.js.map +1 -1
- package/dist-es/SocketSubscriptionHandler.d.ts +11 -11
- package/dist-es/SocketSubscriptionHandler.js +156 -153
- package/dist-es/SocketSubscriptionHandler.js.map +1 -1
- package/dist-es/types/api.d.ts +30 -30
- package/dist-es/types/api.js +2 -2
- package/dist-es/types/api_internal.d.ts +24 -24
- package/dist-es/types/api_internal.js +1 -1
- package/dist-es/types/index.d.ts +7 -7
- package/dist-es/types/index.js +7 -7
- package/dist-es/types/logger.d.ts +6 -6
- package/dist-es/types/logger.js +1 -1
- package/dist-es/types/options.d.ts +31 -31
- package/dist-es/types/options.js +2 -2
- package/dist-es/types/public_helpers.d.ts +19 -14
- package/dist-es/types/public_helpers.js +1 -1
- package/dist-es/types/public_helpers_internal.d.ts +27 -25
- package/dist-es/types/public_helpers_internal.js +1 -1
- package/dist-es/types/requests.d.ts +14 -14
- package/dist-es/types/requests.js +1 -1
- package/dist-es/types/socket.d.ts +23 -23
- package/dist-es/types/socket.js +1 -1
- package/dist-es/types/subscriptions.d.ts +20 -20
- package/dist-es/types/subscriptions.js +1 -1
- package/dist-es/utils.d.ts +2 -2
- package/dist-es/utils.js +11 -11
- package/jest.config.js +0 -3
- package/package.json +5 -5
- package/src/PublicHelpers.ts +10 -9
- package/src/SocketLogger.ts +1 -1
- package/src/SocketRequestHandler.ts +2 -2
- package/src/tests/Socket.test.ts +4 -9
- package/src/tests/helpers.ts +7 -2
- package/src/tests/public_helpers.test.ts +4 -4
- package/src/types/public_helpers.ts +7 -1
- package/src/types/public_helpers_internal.ts +3 -1
- 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
|
+
}
|
package/dist-es/types/socket.js
CHANGED
@@ -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
|
package/dist-es/utils.d.ts
CHANGED
@@ -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
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "airdcpp-apisocket",
|
3
|
-
"version": "2.
|
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
|
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": "^
|
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": "^
|
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
|
-
"
|
61
|
+
"exports": "./dist-es/NodeSocket.js",
|
62
62
|
"type": "module"
|
63
63
|
}
|
package/src/PublicHelpers.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
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
|
-
|
76
|
-
|
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
|
-
`${
|
80
|
+
`${menuTypeId}_menuitem_selected`,
|
81
81
|
async (data) => {
|
82
|
-
if (data.hook_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
|
-
`${
|
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
|
-
|
125
|
+
menu
|
125
126
|
);
|
126
127
|
|
127
128
|
return () => {
|
package/src/SocketLogger.ts
CHANGED
@@ -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:
|
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,
|
package/src/tests/Socket.test.ts
CHANGED
@@ -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 =
|
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
|
{
|
package/src/tests/helpers.ts
CHANGED
@@ -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
|
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
|
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
|
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
|
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?:
|
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": "
|
6
|
-
"lib": ["
|
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,
|