javonet-nodejs-sdk 2.5.17 → 2.5.18
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/dist/core/handler/AbstractHandler.cjs +23 -6
- package/dist/core/handler/ArrayGetItemHandler.cjs +4 -1
- package/dist/core/handler/ArrayGetRankHandler.cjs +3 -0
- package/dist/core/handler/ArrayGetSizeHandler.cjs +3 -0
- package/dist/core/handler/ArrayHandler.cjs +3 -0
- package/dist/core/handler/ArraySetItemHandler.cjs +4 -1
- package/dist/core/handler/CastingHandler.cjs +3 -1
- package/dist/core/handler/ConvertTypeHandler.cjs +4 -4
- package/dist/core/handler/CreateClassInstanceHandler.cjs +5 -2
- package/dist/core/handler/DestructReferenceHandler.cjs +3 -0
- package/dist/core/handler/EnableNamespaceHandler.cjs +3 -0
- package/dist/core/handler/EnableTypeHandler.cjs +3 -0
- package/dist/core/handler/GetGlobalStaticFieldHandler.cjs +3 -0
- package/dist/core/handler/GetInstanceFieldHandler.cjs +3 -0
- package/dist/core/handler/GetInstanceMethodAsDelegateHandler.cjs +15 -4
- package/dist/core/handler/GetStaticFieldHandler.cjs +4 -0
- package/dist/core/handler/GetStaticMethodAsDelegateHandler.cjs +8 -6
- package/dist/core/handler/GetTypeHandler.cjs +10 -2
- package/dist/core/handler/Handler.cjs +8 -11
- package/dist/core/handler/InvokeGlobalFunctionHandler.cjs +3 -0
- package/dist/core/handler/InvokeInstanceMethodHandler.cjs +3 -0
- package/dist/core/handler/InvokeStaticMethodHandler.cjs +3 -0
- package/dist/core/handler/LoadLibraryHandler.cjs +4 -0
- package/dist/core/handler/SetGlobalStaticFieldHandler.cjs +3 -0
- package/dist/core/handler/SetInstanceFieldHandler.cjs +3 -0
- package/dist/core/handler/SetStaticFieldHandler.cjs +3 -0
- package/dist/core/handler/ValueHandler.cjs +4 -0
- package/dist/core/interpreter/Interpreter.cjs +28 -12
- package/dist/core/namespaceCache/NamespaceCache.cjs +12 -0
- package/dist/core/protocol/CommandDeserializer.cjs +10 -2
- package/dist/core/protocol/CommandSerializer.cjs +24 -4
- package/dist/core/protocol/TypeDeserializer.cjs +35 -0
- package/dist/core/protocol/TypeSerializer.cjs +51 -7
- package/dist/core/receiver/Receiver.cjs +1 -1
- package/dist/core/receiver/ReceiverNative.cjs +6 -0
- package/dist/core/transmitter/Transmitter.cjs +18 -2
- package/dist/core/transmitter/TransmitterWebsocket.cjs +8 -5
- package/dist/core/transmitter/TransmitterWebsocketBrowser.cjs +1 -1
- package/dist/core/transmitter/TransmitterWrapper.cjs +25 -8
- package/dist/core/typeCache/TypeCache.cjs +8 -0
- package/dist/core/webSocketClient/WebSocketClient.cjs +22 -12
- package/dist/core/webSocketClient/WebSocketClientBrowser.cjs +2 -2
- package/dist/sdk/ConfigRuntimeFactory.cjs +60 -55
- package/dist/sdk/InvocationContext.cjs +81 -23
- package/dist/sdk/Javonet.cjs +14 -33
- package/dist/sdk/RuntimeContext.cjs +85 -30
- package/dist/sdk/RuntimeFactory.cjs +3 -0
- package/dist/sdk/tools/ActivationHelper.cjs +66 -0
- package/dist/sdk/tools/JsonResolver.cjs +214 -0
- package/dist/types/core/handler/AbstractHandler.d.ts +23 -4
- package/dist/types/core/handler/ArrayGetItemHandler.d.ts +8 -1
- package/dist/types/core/handler/ArrayGetRankHandler.d.ts +8 -1
- package/dist/types/core/handler/ArrayGetSizeHandler.d.ts +8 -1
- package/dist/types/core/handler/ArrayHandler.d.ts +8 -1
- package/dist/types/core/handler/ArraySetItemHandler.d.ts +8 -1
- package/dist/types/core/handler/CastingHandler.d.ts +4 -0
- package/dist/types/core/handler/ConvertTypeHandler.d.ts +8 -4
- package/dist/types/core/handler/CreateClassInstanceHandler.d.ts +8 -1
- package/dist/types/core/handler/DestructReferenceHandler.d.ts +8 -1
- package/dist/types/core/handler/EnableNamespaceHandler.d.ts +8 -1
- package/dist/types/core/handler/EnableTypeHandler.d.ts +8 -1
- package/dist/types/core/handler/GetGlobalStaticFieldHandler.d.ts +8 -1
- package/dist/types/core/handler/GetInstanceFieldHandler.d.ts +8 -1
- package/dist/types/core/handler/GetStaticFieldHandler.d.ts +9 -1
- package/dist/types/core/handler/GetStaticMethodAsDelegateHandler.d.ts +4 -3
- package/dist/types/core/handler/GetTypeHandler.d.ts +17 -8
- package/dist/types/core/handler/Handler.d.ts +8 -8
- package/dist/types/core/handler/InvokeDelegateHandler.d.ts +4 -0
- package/dist/types/core/handler/InvokeGlobalFunctionHandler.d.ts +8 -1
- package/dist/types/core/handler/InvokeInstanceMethodHandler.d.ts +8 -1
- package/dist/types/core/handler/InvokeStaticMethodHandler.d.ts +8 -1
- package/dist/types/core/handler/LoadLibraryHandler.d.ts +8 -3
- package/dist/types/core/handler/SetGlobalStaticFieldHandler.d.ts +4 -0
- package/dist/types/core/handler/SetInstanceFieldHandler.d.ts +8 -1
- package/dist/types/core/handler/SetStaticFieldHandler.d.ts +8 -1
- package/dist/types/core/handler/ValueHandler.d.ts +9 -1
- package/dist/types/core/interpreter/Interpreter.d.ts +11 -10
- package/dist/types/core/namespaceCache/NamespaceCache.d.ts +17 -5
- package/dist/types/core/protocol/CommandDeserializer.d.ts +10 -3
- package/dist/types/core/protocol/CommandSerializer.d.ts +19 -2
- package/dist/types/core/protocol/TypeDeserializer.d.ts +46 -11
- package/dist/types/core/protocol/TypeSerializer.d.ts +53 -13
- package/dist/types/core/receiver/Receiver.d.ts +2 -2
- package/dist/types/core/receiver/ReceiverNative.d.ts +8 -2
- package/dist/types/core/transmitter/Transmitter.d.ts +20 -4
- package/dist/types/core/transmitter/TransmitterWebsocket.d.ts +8 -4
- package/dist/types/core/transmitter/TransmitterWebsocketBrowser.d.ts +4 -7
- package/dist/types/core/transmitter/TransmitterWrapper.d.ts +12 -3
- package/dist/types/core/typeCache/TypeCache.d.ts +15 -5
- package/dist/types/core/webSocketClient/WebSocketClient.d.ts +17 -21
- package/dist/types/sdk/ConfigRuntimeFactory.d.ts +9 -6
- package/dist/types/sdk/InvocationContext.d.ts +38 -6
- package/dist/types/sdk/Javonet.d.ts +12 -7
- package/dist/types/sdk/RuntimeContext.d.ts +23 -7
- package/dist/types/sdk/RuntimeFactory.d.ts +9 -2
- package/dist/types/sdk/tools/ActivationHelper.d.ts +20 -0
- package/dist/types/sdk/tools/JsonResolver.d.ts +87 -0
- package/dist/types/utils/Command.d.ts +18 -14
- package/dist/types/utils/CustomError.d.ts +5 -1
- package/dist/types/utils/Runtime.d.ts +1 -2
- package/dist/types/utils/RuntimeNameHandler.d.ts +6 -2
- package/dist/types/utils/Type.d.ts +1 -0
- package/dist/types/utils/TypesHandler.d.ts +16 -0
- package/dist/types/utils/UtilsConst.d.ts +32 -0
- package/dist/types/utils/connectionData/IConnectionData.d.ts +16 -3
- package/dist/types/utils/connectionData/InMemoryConnectionData.d.ts +4 -3
- package/dist/types/utils/connectionData/WsConnectionData.d.ts +7 -10
- package/dist/types/utils/nodejs/connectionData/TcpConnectionData.d.ts +17 -10
- package/dist/utils/Command.cjs +9 -9
- package/dist/utils/CustomError.cjs +4 -0
- package/dist/utils/RuntimeNameHandler.cjs +1 -1
- package/dist/utils/Type.cjs +2 -1
- package/dist/utils/TypesHandler.cjs +55 -0
- package/dist/utils/UtilsConst.cjs +101 -0
- package/dist/utils/connectionData/IConnectionData.cjs +9 -0
- package/dist/utils/connectionData/InMemoryConnectionData.cjs +10 -0
- package/dist/utils/connectionData/WsConnectionData.cjs +4 -0
- package/dist/utils/nodejs/connectionData/TcpConnectionData.cjs +33 -3
- package/lib/core/delegatesCache/DelegatesCache.js +1 -0
- package/lib/core/handler/AbstractHandler.js +27 -9
- package/lib/core/handler/ArrayGetItemHandler.js +9 -1
- package/lib/core/handler/ArrayGetRankHandler.js +9 -0
- package/lib/core/handler/ArrayGetSizeHandler.js +8 -0
- package/lib/core/handler/ArrayHandler.js +8 -0
- package/lib/core/handler/ArraySetItemHandler.js +11 -1
- package/lib/core/handler/CastingHandler.js +8 -1
- package/lib/core/handler/ConvertTypeHandler.js +9 -4
- package/lib/core/handler/CreateClassInstanceHandler.js +10 -4
- package/lib/core/handler/DestructReferenceHandler.js +8 -0
- package/lib/core/handler/EnableNamespaceHandler.js +8 -0
- package/lib/core/handler/EnableTypeHandler.js +8 -0
- package/lib/core/handler/GetGlobalStaticFieldHandler.js +9 -0
- package/lib/core/handler/GetInstanceFieldHandler.js +8 -0
- package/lib/core/handler/GetInstanceMethodAsDelegateHandler.js +9 -4
- package/lib/core/handler/GetStaticFieldHandler.js +9 -0
- package/lib/core/handler/GetStaticMethodAsDelegateHandler.js +8 -7
- package/lib/core/handler/GetTypeHandler.js +15 -5
- package/lib/core/handler/Handler.js +13 -18
- package/lib/core/handler/InvokeDelegateHandler.js +5 -0
- package/lib/core/handler/InvokeGlobalFunctionHandler.js +11 -1
- package/lib/core/handler/InvokeInstanceMethodHandler.js +8 -0
- package/lib/core/handler/InvokeStaticMethodHandler.js +8 -0
- package/lib/core/handler/LoadLibraryHandler.js +11 -0
- package/lib/core/handler/SetGlobalStaticFieldHandler.js +10 -0
- package/lib/core/handler/SetInstanceFieldHandler.js +7 -0
- package/lib/core/handler/SetStaticFieldHandler.js +8 -0
- package/lib/core/handler/ValueHandler.js +9 -0
- package/lib/core/interpreter/Interpreter.js +42 -24
- package/lib/core/namespaceCache/NamespaceCache.js +14 -0
- package/lib/core/protocol/CommandDeserializer.js +11 -2
- package/lib/core/protocol/CommandSerializer.js +40 -9
- package/lib/core/protocol/TypeDeserializer.js +36 -0
- package/lib/core/protocol/TypeSerializer.js +62 -7
- package/lib/core/receiver/Receiver.js +3 -2
- package/lib/core/receiver/ReceiverNative.js +8 -0
- package/lib/core/transmitter/Transmitter.js +18 -1
- package/lib/core/transmitter/TransmitterWebsocket.js +12 -5
- package/lib/core/transmitter/TransmitterWebsocketBrowser.js +2 -4
- package/lib/core/transmitter/TransmitterWrapper.js +27 -6
- package/lib/core/typeCache/TypeCache.js +9 -0
- package/lib/core/webSocketClient/WebSocketClient.js +33 -30
- package/lib/core/webSocketClient/WebSocketClientBrowser.js +5 -6
- package/lib/sdk/ConfigRuntimeFactory.js +70 -68
- package/lib/sdk/InvocationContext.js +94 -26
- package/lib/sdk/Javonet.js +18 -36
- package/lib/sdk/RuntimeContext.js +109 -29
- package/lib/sdk/RuntimeFactory.js +7 -0
- package/lib/sdk/tools/ActivationHelper.js +51 -0
- package/lib/sdk/tools/JsonResolver.js +226 -0
- package/lib/types.d.ts +57 -0
- package/lib/utils/Command.js +14 -9
- package/lib/utils/CustomError.js +5 -0
- package/lib/utils/Runtime.js +1 -1
- package/lib/utils/RuntimeLogger.js +3 -0
- package/lib/utils/RuntimeNameHandler.js +6 -1
- package/lib/utils/Type.js +2 -1
- package/lib/utils/TypesHandler.js +35 -0
- package/lib/utils/UtilsConst.js +88 -0
- package/lib/utils/connectionData/IConnectionData.js +14 -0
- package/lib/utils/connectionData/InMemoryConnectionData.js +15 -0
- package/lib/utils/connectionData/WsConnectionData.js +9 -0
- package/lib/utils/nodejs/connectionData/TcpConnectionData.js +35 -5
- package/package.json +4 -3
- package/dist/sdk/tools/browser/ConfigSourceResolver.cjs +0 -153
- package/dist/sdk/tools/nodejs/JsonFileResolver.cjs +0 -120
- package/dist/types/sdk/tools/browser/ConfigSourceResolver.d.ts +0 -46
- package/dist/types/sdk/tools/nodejs/JsonFileResolver.d.ts +0 -13
- package/dist/types/utils/nodejs/TypesConverter.d.ts +0 -48
- package/dist/utils/nodejs/TypesConverter.cjs +0 -102
- package/lib/declarations.d.ts +0 -35
- package/lib/sdk/tools/browser/ConfigSourceResolver.js +0 -146
- package/lib/sdk/tools/nodejs/JsonFileResolver.js +0 -106
- package/lib/utils/nodejs/TypesConverter.js +0 -91
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class GetStaticFieldHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 2
|
|
5
10
|
|
|
@@ -7,6 +12,10 @@ class GetStaticFieldHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
* @returns {any}
|
|
18
|
+
*/
|
|
10
19
|
process(command) {
|
|
11
20
|
try {
|
|
12
21
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
//
|
|
1
|
+
// @ts-check
|
|
2
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
4
8
|
/**
|
|
5
9
|
* Handles retrieving a static method as a delegate.
|
|
6
10
|
*/
|
|
@@ -19,7 +23,6 @@ class GetStaticMethodAsDelegateHandler extends AbstractHandler {
|
|
|
19
23
|
/**
|
|
20
24
|
* Processes a command to retrieve a static method as a delegate.
|
|
21
25
|
* @param {Command} command - The command containing payload data.
|
|
22
|
-
* @param {Array<*>} command.payload - The payload containing type, method name, and arguments.
|
|
23
26
|
* @returns {Function} The delegate for the static method.
|
|
24
27
|
* @throws {Error} If the parameters mismatch or the method cannot be found.
|
|
25
28
|
*/
|
|
@@ -47,12 +50,10 @@ class GetStaticMethodAsDelegateHandler extends AbstractHandler {
|
|
|
47
50
|
* Retrieves the method from the type.
|
|
48
51
|
* @param {Object} type - The class or constructor to search for the method.
|
|
49
52
|
* @param {string} methodName - The name of the method.
|
|
50
|
-
* @param {Array<Function>} argsType - The argument types.
|
|
51
|
-
* @param {Object} modifier - Parameter modifier (not used in JS implementation).
|
|
52
53
|
* @returns {Function|null} The found method or null if not found.
|
|
53
54
|
*/
|
|
54
55
|
getMethod(type, methodName) {
|
|
55
|
-
const method = type[methodName]
|
|
56
|
+
const method = /** @type {any} */ (type)[methodName]
|
|
56
57
|
return typeof method === 'function' ? method : null
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -63,9 +64,9 @@ class GetStaticMethodAsDelegateHandler extends AbstractHandler {
|
|
|
63
64
|
* @returns {Error} The error with detailed message.
|
|
64
65
|
*/
|
|
65
66
|
createMethodNotFoundError(type, methodName) {
|
|
66
|
-
const methods = Object.keys(type).filter((key) => typeof type[key] === 'function')
|
|
67
|
+
const methods = Object.keys(type).filter((key) => typeof /** @type {any} */ (type)[key] === 'function')
|
|
67
68
|
const availableMethods = methods.map((name) => `${name}()`)
|
|
68
|
-
const message = `Method ${methodName} not found in class ${type.name}. Available public static methods:\n${availableMethods.join('\n')}`
|
|
69
|
+
const message = `Method ${methodName} not found in class ${/** @type {{name: string}} */ (type).name}. Available public static methods:\n${availableMethods.join('\n')}`
|
|
69
70
|
return new Error(message)
|
|
70
71
|
}
|
|
71
72
|
}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
import { LoadLibraryHandler } from './LoadLibraryHandler.js'
|
|
3
4
|
import { NamespaceCache } from '../namespaceCache/NamespaceCache.js'
|
|
4
5
|
import { TypeCache } from '../typeCache/TypeCache.js'
|
|
5
6
|
import { getRequire } from '../../utils/Runtime.js'
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
10
|
+
*/
|
|
7
11
|
class GetTypeHandler extends AbstractHandler {
|
|
8
12
|
constructor() {
|
|
9
13
|
super()
|
|
10
14
|
/** @type {number} */
|
|
11
15
|
this.requiredParametersCount = 1
|
|
12
|
-
/** @type {NamespaceCache
|
|
16
|
+
/** @type {NamespaceCache} */
|
|
13
17
|
this.namespaceCache = new NamespaceCache()
|
|
14
|
-
/** @type {TypeCache
|
|
18
|
+
/** @type {TypeCache} */
|
|
15
19
|
this.typeCache = new TypeCache()
|
|
16
|
-
/** @type {LoadLibraryHandler
|
|
20
|
+
/** @type {LoadLibraryHandler} */
|
|
17
21
|
this.loadLibaryHandler = new LoadLibraryHandler()
|
|
18
22
|
}
|
|
19
23
|
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
* @param {Command} command
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
20
29
|
process(command) {
|
|
21
30
|
try {
|
|
22
31
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -25,7 +34,7 @@ class GetTypeHandler extends AbstractHandler {
|
|
|
25
34
|
const { payload } = command
|
|
26
35
|
let typeName = payload[0]
|
|
27
36
|
typeName = typeName.replace('.js', '')
|
|
28
|
-
|
|
37
|
+
const typeToReturn = /** @type {any} */ (global)[typeName]
|
|
29
38
|
if (typeToReturn === undefined) {
|
|
30
39
|
let message = `Type ${typeName} not found\n`
|
|
31
40
|
message += 'Available types:\n'
|
|
@@ -54,7 +63,8 @@ class GetTypeHandler extends AbstractHandler {
|
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
getAvailableTypes() {
|
|
57
|
-
|
|
66
|
+
/** @type {string[]} */
|
|
67
|
+
const availableTypes = []
|
|
58
68
|
this.loadLibaryHandler.getLoadedLibraries().forEach((lib) => {
|
|
59
69
|
const dynamicRequire = getRequire(import.meta.url)
|
|
60
70
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//@ts-check
|
|
1
2
|
import { ReferencesCache } from '../referenceCache/ReferencesCache.js'
|
|
2
3
|
import { ValueHandler } from './ValueHandler.js'
|
|
3
4
|
import { LoadLibraryHandler } from './LoadLibraryHandler.js'
|
|
@@ -26,26 +27,14 @@ import { InvokeDelegateHandler } from './InvokeDelegateHandler.js'
|
|
|
26
27
|
import { InvokeGlobalFunctionHandler } from './InvokeGlobalFunctionHandler.js'
|
|
27
28
|
import { CommandType } from '../../utils/CommandType.js'
|
|
28
29
|
import { Command } from '../../utils/Command.js'
|
|
30
|
+
import { TypesHandler } from '../../utils/TypesHandler.js'
|
|
29
31
|
import { ExceptionSerializer } from '../../utils/exception/ExceptionSerializer.js'
|
|
30
32
|
import { ConvertTypeHandler } from './ConvertTypeHandler.js'
|
|
31
33
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
32
34
|
|
|
33
35
|
/**
|
|
34
|
-
* @
|
|
35
|
-
* @returns {boolean}
|
|
36
|
+
* @typedef {import('../../types.d.ts').RuntimeName} RuntimeName
|
|
36
37
|
*/
|
|
37
|
-
function isResponseSimpleType(response) {
|
|
38
|
-
let type = typeof response
|
|
39
|
-
return ['string', 'boolean', 'number'].includes(type)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @param {any} response
|
|
44
|
-
* @returns {boolean}
|
|
45
|
-
*/
|
|
46
|
-
function isResponseNull(response) {
|
|
47
|
-
return response === null
|
|
48
|
-
}
|
|
49
38
|
|
|
50
39
|
/**
|
|
51
40
|
* @type {Record<number, AbstractHandler>}
|
|
@@ -86,16 +75,22 @@ class Handler {
|
|
|
86
75
|
constructor(interpreter) {
|
|
87
76
|
this.interpreter = interpreter
|
|
88
77
|
|
|
78
|
+
if (!this.interpreter) {
|
|
79
|
+
throw new Error('interpreter is undefined in Handler constructor')
|
|
80
|
+
}
|
|
81
|
+
|
|
89
82
|
// dynamically create pass delegate handler with interpreter
|
|
90
|
-
|
|
83
|
+
// @ts-expect-error
|
|
84
|
+
handlers[CommandType.PassDelegate] = new PassDelegateHandler(this.interpreter)
|
|
91
85
|
|
|
92
86
|
Object.keys(handlers).forEach((commandTypeHandler) => {
|
|
87
|
+
// @ts-expect-error
|
|
93
88
|
handlers[commandTypeHandler].handlers = handlers
|
|
94
89
|
})
|
|
95
90
|
}
|
|
96
91
|
|
|
97
92
|
/**
|
|
98
|
-
* @param {
|
|
93
|
+
* @param {Command} command
|
|
99
94
|
*/
|
|
100
95
|
handleCommand(command) {
|
|
101
96
|
try {
|
|
@@ -112,11 +107,11 @@ class Handler {
|
|
|
112
107
|
|
|
113
108
|
/**
|
|
114
109
|
* @param {any} response
|
|
115
|
-
* @param {
|
|
110
|
+
* @param {RuntimeName} runtimeName
|
|
116
111
|
* @returns {Command}
|
|
117
112
|
*/
|
|
118
113
|
parseCommand(response, runtimeName) {
|
|
119
|
-
if (
|
|
114
|
+
if (TypesHandler.isPrimitiveOrNullOrUndefined(response)) {
|
|
120
115
|
return Command.createResponse(response, runtimeName)
|
|
121
116
|
} else {
|
|
122
117
|
let cache = ReferencesCache.getInstance()
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { delegatesCacheInstance } from '../delegatesCache/DelegatesCache.js'
|
|
2
3
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
3
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
7
|
+
*/
|
|
8
|
+
|
|
4
9
|
/**
|
|
5
10
|
* Handles invoking a delegate by GUID.
|
|
6
11
|
*/
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class InvokeGlobalFunctionHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 1
|
|
5
10
|
|
|
@@ -7,6 +12,9 @@ class InvokeGlobalFunctionHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
*/
|
|
10
18
|
process(command) {
|
|
11
19
|
try {
|
|
12
20
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -15,11 +23,13 @@ class InvokeGlobalFunctionHandler extends AbstractHandler {
|
|
|
15
23
|
const { payload } = command
|
|
16
24
|
const functionName = payload[0]
|
|
17
25
|
const args = payload.slice(1)
|
|
18
|
-
|
|
26
|
+
// @ts-expect-error
|
|
19
27
|
if (typeof global[functionName] === 'function') {
|
|
28
|
+
// @ts-expect-error
|
|
20
29
|
return Reflect.apply(global[functionName], undefined, args)
|
|
21
30
|
} else {
|
|
22
31
|
let methods = Object.getOwnPropertyNames(global).filter(function (property) {
|
|
32
|
+
// @ts-expect-error
|
|
23
33
|
return typeof global[property] === 'function'
|
|
24
34
|
})
|
|
25
35
|
let message = `Method ${functionName} not found in global. Available methods:\n`
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class InvokeInstanceMethodHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 2
|
|
5
10
|
|
|
@@ -7,6 +12,9 @@ class InvokeInstanceMethodHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
*/
|
|
10
18
|
process(command) {
|
|
11
19
|
try {
|
|
12
20
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class InvokeStaticMethodHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 2
|
|
5
10
|
|
|
@@ -7,6 +12,9 @@ class InvokeStaticMethodHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
*/
|
|
10
18
|
process(command) {
|
|
11
19
|
try {
|
|
12
20
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -1,15 +1,24 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { getRequire } from '../../utils/Runtime.js'
|
|
2
3
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
3
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
7
|
+
*/
|
|
8
|
+
|
|
4
9
|
const dynamicImport = getRequire(import.meta.url)
|
|
5
10
|
class LoadLibraryHandler extends AbstractHandler {
|
|
6
11
|
requiredParametersCount = 1
|
|
12
|
+
/** @type {string[]} */
|
|
7
13
|
static loadedLibraries = []
|
|
8
14
|
|
|
9
15
|
constructor() {
|
|
10
16
|
super()
|
|
11
17
|
}
|
|
12
18
|
|
|
19
|
+
/**
|
|
20
|
+
* @param {Command} command
|
|
21
|
+
*/
|
|
13
22
|
process(command) {
|
|
14
23
|
if (command.payload.length < this.requiredParametersCount) {
|
|
15
24
|
throw new Error('Load Library parameters mismatch')
|
|
@@ -34,10 +43,12 @@ class LoadLibraryHandler extends AbstractHandler {
|
|
|
34
43
|
throw this.process_stack_trace(error, this.constructor.name)
|
|
35
44
|
}
|
|
36
45
|
}
|
|
46
|
+
// @ts-expect-error
|
|
37
47
|
global[libraryName] = moduleExports
|
|
38
48
|
|
|
39
49
|
for (const [key, value] of Object.entries(moduleExports)) {
|
|
40
50
|
// Here, `key` is the name of the export, and `value` is the exported type itself.
|
|
51
|
+
// @ts-expect-error
|
|
41
52
|
global[key] = value
|
|
42
53
|
}
|
|
43
54
|
return 0
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class SetGlobalStaticFieldHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 2
|
|
5
10
|
|
|
@@ -7,6 +12,9 @@ class SetGlobalStaticFieldHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
*/
|
|
10
18
|
process(command) {
|
|
11
19
|
try {
|
|
12
20
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -18,6 +26,7 @@ class SetGlobalStaticFieldHandler extends AbstractHandler {
|
|
|
18
26
|
let fieldToSet
|
|
19
27
|
|
|
20
28
|
for (let i = 0; i < splitted.length; i++) {
|
|
29
|
+
// @ts-expect-error
|
|
21
30
|
if (typeof (fieldToSet ? fieldToSet[splitted[i]] : global[splitted[i]]) === 'undefined') {
|
|
22
31
|
let fields = Object.keys(fieldToSet ? fieldToSet : global)
|
|
23
32
|
let message = `Field ${splitted[i]} not found in object. Available fields:\n`
|
|
@@ -26,6 +35,7 @@ class SetGlobalStaticFieldHandler extends AbstractHandler {
|
|
|
26
35
|
})
|
|
27
36
|
throw new Error(message)
|
|
28
37
|
}
|
|
38
|
+
// @ts-expect-error
|
|
29
39
|
fieldToSet = !fieldToSet ? global[splitted[i]] : fieldToSet[splitted[i]]
|
|
30
40
|
}
|
|
31
41
|
fieldToSet = value
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
3
7
|
class SetInstanceFieldHandler extends AbstractHandler {
|
|
4
8
|
requiredParametersCount = 3
|
|
5
9
|
|
|
@@ -7,6 +11,9 @@ class SetInstanceFieldHandler extends AbstractHandler {
|
|
|
7
11
|
super()
|
|
8
12
|
}
|
|
9
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @param {Command} command
|
|
16
|
+
*/
|
|
10
17
|
process(command) {
|
|
11
18
|
try {
|
|
12
19
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
7
|
+
|
|
3
8
|
class SetStaticFieldHandler extends AbstractHandler {
|
|
4
9
|
requiredParametersCount = 3
|
|
5
10
|
|
|
@@ -7,6 +12,9 @@ class SetStaticFieldHandler extends AbstractHandler {
|
|
|
7
12
|
super()
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {Command} command
|
|
17
|
+
*/
|
|
10
18
|
process(command) {
|
|
11
19
|
try {
|
|
12
20
|
if (command.payload.length < this.requiredParametersCount) {
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { AbstractHandler } from './AbstractHandler.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
6
|
+
*/
|
|
3
7
|
class ValueHandler extends AbstractHandler {
|
|
4
8
|
constructor() {
|
|
5
9
|
super()
|
|
6
10
|
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {Command} command
|
|
14
|
+
* @returns {unknown}
|
|
15
|
+
*/
|
|
7
16
|
process(command) {
|
|
8
17
|
const { payload } = command
|
|
9
18
|
return payload[0]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { ConnectionType } from '../../utils/ConnectionType.js'
|
|
2
|
-
import { isNodejsRuntime,
|
|
3
|
+
import { isNodejsRuntime, getRequire } from '../../utils/Runtime.js'
|
|
3
4
|
import { RuntimeName } from '../../utils/RuntimeName.js'
|
|
4
5
|
import { CommandDeserializer } from '../protocol/CommandDeserializer.js'
|
|
5
6
|
import { CommandSerializer } from '../protocol/CommandSerializer.js'
|
|
@@ -8,17 +9,16 @@ import { TransmitterWebsocket } from '../transmitter/TransmitterWebsocket.js'
|
|
|
8
9
|
import { Handler } from '../handler/Handler.js'
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
* @typedef {import('
|
|
12
|
-
* @typedef {import('
|
|
13
|
-
* @typedef {import('
|
|
14
|
-
* @typedef {import('../transmitter/TransmitterWebsocketBrowser.js').TransmitterWebsocketBrowser} TransmitterWebsocketBrowser
|
|
12
|
+
* @typedef {import('../../utils/connectionData/IConnectionData.js').IConnectionData} IConnectionData
|
|
13
|
+
* @typedef {typeof import('../../types.d.ts').RuntimeName} RuntimeNameType
|
|
14
|
+
* @typedef {import('../../utils/Command.js').Command} Command
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
/** @type {Receiver | null} */
|
|
17
|
+
/** @type {typeof import('../receiver/Receiver.js').Receiver | null} */
|
|
18
18
|
let _Receiver = null
|
|
19
|
-
/** @type {Transmitter | null} */
|
|
19
|
+
/** @type {typeof import('../transmitter/Transmitter.js').Transmitter | null} */
|
|
20
20
|
let _Transmitter = null
|
|
21
|
-
/** @type {TransmitterWebsocket | null} */
|
|
21
|
+
/** @type {typeof import('../transmitter/TransmitterWebsocket.js').TransmitterWebsocket | typeof import('../transmitter/TransmitterWebsocketBrowser.js').TransmitterWebsocketBrowser | null} */
|
|
22
22
|
let _TransmitterWebsocket = null
|
|
23
23
|
|
|
24
24
|
if (!_TransmitterWebsocket) {
|
|
@@ -28,7 +28,8 @@ if (!_TransmitterWebsocket) {
|
|
|
28
28
|
const requireDynamic = getRequire(import.meta.url)
|
|
29
29
|
|
|
30
30
|
export class Interpreter {
|
|
31
|
-
|
|
31
|
+
/** @type {Handler | null} */
|
|
32
|
+
handler = null
|
|
32
33
|
/**
|
|
33
34
|
*
|
|
34
35
|
* @param {Command} command
|
|
@@ -37,8 +38,12 @@ export class Interpreter {
|
|
|
37
38
|
*/
|
|
38
39
|
async executeAsync(command, connectionData) {
|
|
39
40
|
try {
|
|
41
|
+
if (!this.handler) {
|
|
42
|
+
this.handler = new Handler(this)
|
|
43
|
+
}
|
|
40
44
|
let messageByteArray = new CommandSerializer().serialize(command, connectionData)
|
|
41
|
-
|
|
45
|
+
/** @type {Int8Array | undefined} */
|
|
46
|
+
let responseByteArray = undefined
|
|
42
47
|
|
|
43
48
|
if (
|
|
44
49
|
command.runtimeName === RuntimeName.Nodejs &&
|
|
@@ -47,16 +52,16 @@ export class Interpreter {
|
|
|
47
52
|
if (isNodejsRuntime()) {
|
|
48
53
|
// lazy receiver loading
|
|
49
54
|
if (!_Receiver) {
|
|
50
|
-
const { Receiver } = requireDynamic('../receiver/Receiver.js')
|
|
55
|
+
const { Receiver } = requireDynamic('../receiver/Receiver.js')
|
|
51
56
|
_Receiver = Receiver
|
|
52
57
|
}
|
|
53
|
-
responseByteArray = _Receiver
|
|
58
|
+
responseByteArray = _Receiver?.sendCommand(messageByteArray)
|
|
54
59
|
} else {
|
|
55
60
|
throw new Error('Node.js runtime not found')
|
|
56
61
|
}
|
|
57
62
|
} else if (connectionData.connectionType === ConnectionType.WEB_SOCKET) {
|
|
58
63
|
try {
|
|
59
|
-
const _response = await _TransmitterWebsocket
|
|
64
|
+
const _response = await _TransmitterWebsocket?.sendCommand(
|
|
60
65
|
messageByteArray,
|
|
61
66
|
connectionData
|
|
62
67
|
)
|
|
@@ -76,13 +81,15 @@ export class Interpreter {
|
|
|
76
81
|
const { Transmitter } = requireDynamic('../transmitter/Transmitter.js')
|
|
77
82
|
_Transmitter = Transmitter
|
|
78
83
|
}
|
|
79
|
-
responseByteArray = await _Transmitter
|
|
84
|
+
responseByteArray = await _Transmitter?.sendCommand(messageByteArray)
|
|
80
85
|
} else {
|
|
81
86
|
throw new Error('Allowed only to run in nodejs runtime')
|
|
82
87
|
}
|
|
83
88
|
}
|
|
89
|
+
if (!responseByteArray) {
|
|
90
|
+
throw new Error('No response received from Transmitter')
|
|
91
|
+
}
|
|
84
92
|
return new CommandDeserializer(responseByteArray).deserialize()
|
|
85
|
-
// eslint-disable-next-line no-unused-vars
|
|
86
93
|
} catch (error) {
|
|
87
94
|
throw error
|
|
88
95
|
}
|
|
@@ -91,13 +98,17 @@ export class Interpreter {
|
|
|
91
98
|
/**
|
|
92
99
|
*
|
|
93
100
|
* @param {Command} command
|
|
94
|
-
* @param {
|
|
95
|
-
* @returns {Promise<Command>}
|
|
101
|
+
* @param {IConnectionData} connectionData
|
|
102
|
+
* @returns {Command | Promise<Command>}
|
|
96
103
|
*/
|
|
97
104
|
execute(command, connectionData) {
|
|
98
105
|
try {
|
|
106
|
+
if (!this.handler) {
|
|
107
|
+
this.handler = new Handler(this)
|
|
108
|
+
}
|
|
99
109
|
let messageByteArray = new CommandSerializer().serialize(command, connectionData)
|
|
100
|
-
|
|
110
|
+
/** @type {Int8Array | undefined} */
|
|
111
|
+
let responseByteArray = undefined
|
|
101
112
|
|
|
102
113
|
if (
|
|
103
114
|
command.runtimeName === RuntimeName.Nodejs &&
|
|
@@ -106,14 +117,18 @@ export class Interpreter {
|
|
|
106
117
|
if (isNodejsRuntime()) {
|
|
107
118
|
// lazy receiver loading
|
|
108
119
|
if (!_Receiver) {
|
|
109
|
-
const { Receiver } = requireDynamic('../receiver/Receiver.js')
|
|
120
|
+
const { Receiver } = requireDynamic('../receiver/Receiver.js')
|
|
110
121
|
_Receiver = Receiver
|
|
111
122
|
}
|
|
112
|
-
responseByteArray = _Receiver
|
|
123
|
+
responseByteArray = _Receiver?.sendCommand(messageByteArray)
|
|
113
124
|
}
|
|
114
125
|
} else if (connectionData.connectionType === ConnectionType.WEB_SOCKET) {
|
|
115
126
|
// lazy transmitter websocket loading
|
|
116
|
-
const promise = _TransmitterWebsocket
|
|
127
|
+
const promise = _TransmitterWebsocket?.sendCommand(messageByteArray, connectionData)
|
|
128
|
+
|
|
129
|
+
if (!promise) {
|
|
130
|
+
throw new Error('TransmitterWebsocket not found')
|
|
131
|
+
}
|
|
117
132
|
|
|
118
133
|
return promise
|
|
119
134
|
.then((_response) => {
|
|
@@ -133,13 +148,16 @@ export class Interpreter {
|
|
|
133
148
|
const { Transmitter } = requireDynamic('../transmitter/Transmitter.js')
|
|
134
149
|
_Transmitter = Transmitter
|
|
135
150
|
}
|
|
136
|
-
|
|
151
|
+
|
|
152
|
+
responseByteArray = _Transmitter?.sendCommand(messageByteArray)
|
|
137
153
|
} else {
|
|
138
154
|
throw new Error('Allowed only to run in nodejs runtime')
|
|
139
155
|
}
|
|
140
156
|
}
|
|
157
|
+
if (!responseByteArray) {
|
|
158
|
+
throw new Error('No response received from Transmitter')
|
|
159
|
+
}
|
|
141
160
|
return new CommandDeserializer(responseByteArray).deserialize()
|
|
142
|
-
// eslint-disable-next-line no-unused-vars
|
|
143
161
|
} catch (error) {
|
|
144
162
|
throw error
|
|
145
163
|
}
|
|
@@ -147,7 +165,7 @@ export class Interpreter {
|
|
|
147
165
|
|
|
148
166
|
/**
|
|
149
167
|
*
|
|
150
|
-
* @param {
|
|
168
|
+
* @param {Int8Array} messageByteArray
|
|
151
169
|
* @returns {Command}
|
|
152
170
|
*/
|
|
153
171
|
process(messageByteArray) {
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
1
3
|
class NamespaceCache {
|
|
4
|
+
/** @type {NamespaceCache | null} */
|
|
2
5
|
static _instance = null
|
|
6
|
+
/** @type {string[]} */
|
|
3
7
|
namespaceCache = []
|
|
4
8
|
|
|
5
9
|
constructor() {
|
|
@@ -9,14 +13,24 @@ class NamespaceCache {
|
|
|
9
13
|
return NamespaceCache._instance
|
|
10
14
|
}
|
|
11
15
|
|
|
16
|
+
/**
|
|
17
|
+
* @param {string} namespaceRegex
|
|
18
|
+
*/
|
|
12
19
|
cacheNamespace(namespaceRegex) {
|
|
13
20
|
this.namespaceCache.push(namespaceRegex)
|
|
14
21
|
}
|
|
15
22
|
|
|
23
|
+
/**
|
|
24
|
+
* @returns {boolean}
|
|
25
|
+
*/
|
|
16
26
|
isNamespaceCacheEmpty() {
|
|
17
27
|
return this.namespaceCache.length === 0
|
|
18
28
|
}
|
|
19
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @param {string} typeToCheck
|
|
32
|
+
* @returns {boolean}
|
|
33
|
+
*/
|
|
20
34
|
isTypeAllowed(typeToCheck) {
|
|
21
35
|
for (let pattern of this.namespaceCache) {
|
|
22
36
|
if (new RegExp(pattern).test(typeToCheck.constructor.name)) {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { Command } from '../../utils/Command.js'
|
|
2
|
-
import { CommandType } from '../../utils/CommandType.js'
|
|
3
3
|
import { Type } from '../../utils/Type.js'
|
|
4
4
|
import { TypeDeserializer } from './TypeDeserializer.js'
|
|
5
5
|
|
|
6
6
|
export class CommandDeserializer {
|
|
7
|
+
/**
|
|
8
|
+
* @param {Int8Array} buffer
|
|
9
|
+
*/
|
|
7
10
|
constructor(buffer) {
|
|
8
11
|
this.buffer = buffer
|
|
9
12
|
this.command = new Command(buffer[0], buffer[10], [])
|
|
@@ -24,8 +27,14 @@ export class CommandDeserializer {
|
|
|
24
27
|
return this.position === this.buffer.length
|
|
25
28
|
}
|
|
26
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @param {number} typeNum
|
|
32
|
+
* @returns {any}
|
|
33
|
+
*/
|
|
27
34
|
readObject(typeNum) {
|
|
28
|
-
const
|
|
35
|
+
const entry = Object.entries(Type).find((entry) => entry[1] === typeNum)
|
|
36
|
+
if (!entry) throw new Error('Unknown type number: ' + typeNum)
|
|
37
|
+
const type = entry[0]
|
|
29
38
|
switch (type) {
|
|
30
39
|
case 'JAVONET_COMMAND':
|
|
31
40
|
return this.readCommand()
|