javonet-nodejs-sdk 2.5.16 → 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/delegatesCache/DelegatesCache.cjs +1 -5
- package/dist/core/handler/AbstractHandler.cjs +24 -9
- package/dist/core/handler/ArrayGetItemHandler.cjs +5 -4
- package/dist/core/handler/ArrayGetRankHandler.cjs +4 -3
- package/dist/core/handler/ArrayGetSizeHandler.cjs +4 -3
- package/dist/core/handler/ArrayHandler.cjs +3 -0
- package/dist/core/handler/ArraySetItemHandler.cjs +5 -4
- package/dist/core/handler/CastingHandler.cjs +3 -1
- package/dist/core/handler/ConvertTypeHandler.cjs +4 -4
- package/dist/core/handler/CreateClassInstanceHandler.cjs +6 -5
- package/dist/core/handler/DestructReferenceHandler.cjs +3 -0
- package/dist/core/handler/EnableNamespaceHandler.cjs +3 -0
- package/dist/core/handler/EnableTypeHandler.cjs +4 -3
- package/dist/core/handler/GetGlobalStaticFieldHandler.cjs +4 -3
- package/dist/core/handler/GetInstanceFieldHandler.cjs +4 -3
- package/dist/core/handler/GetInstanceMethodAsDelegateHandler.cjs +15 -4
- package/dist/core/handler/GetStaticFieldHandler.cjs +5 -3
- package/dist/core/handler/GetStaticMethodAsDelegateHandler.cjs +10 -10
- package/dist/core/handler/GetTypeHandler.cjs +10 -2
- package/dist/core/handler/Handler.cjs +8 -11
- package/dist/core/handler/InvokeGlobalFunctionHandler.cjs +4 -3
- package/dist/core/handler/InvokeInstanceMethodHandler.cjs +4 -3
- package/dist/core/handler/InvokeStaticMethodHandler.cjs +4 -3
- package/dist/core/handler/LoadLibraryHandler.cjs +11 -10
- package/dist/core/handler/PassDelegateHandler.cjs +2 -4
- package/dist/core/handler/SetGlobalStaticFieldHandler.cjs +4 -3
- package/dist/core/handler/SetInstanceFieldHandler.cjs +4 -3
- package/dist/core/handler/SetStaticFieldHandler.cjs +4 -3
- package/dist/core/handler/ValueHandler.cjs +4 -0
- package/dist/core/interpreter/Interpreter.cjs +29 -17
- package/dist/core/namespaceCache/NamespaceCache.cjs +19 -10
- 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 +3 -5
- package/dist/core/receiver/ReceiverNative.cjs +6 -0
- package/dist/core/transmitter/Transmitter.cjs +19 -5
- 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 +15 -10
- package/dist/core/webSocketClient/WebSocketClient.cjs +22 -12
- package/dist/core/webSocketClient/WebSocketClientBrowser.cjs +2 -2
- package/dist/sdk/ConfigRuntimeFactory.cjs +92 -98
- package/dist/sdk/InvocationContext.cjs +229 -203
- package/dist/sdk/Javonet.cjs +14 -33
- package/dist/sdk/RuntimeContext.cjs +138 -99
- 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/CreateRequire.browser.d.ts +1 -0
- package/dist/types/utils/CreateRequire.node.d.ts +2 -0
- package/dist/types/utils/CustomError.d.ts +5 -1
- package/dist/types/utils/Runtime.d.ts +2 -3
- 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/CreateRequire.browser.cjs +30 -0
- package/dist/utils/CreateRequire.node.cjs +28 -0
- package/dist/utils/CustomError.cjs +4 -0
- package/dist/utils/Runtime.cjs +24 -18
- package/dist/utils/RuntimeLogger.cjs +2 -4
- package/dist/utils/RuntimeLoggerBrowser.cjs +1 -3
- 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 +45 -25
- 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/CreateRequire.browser.js +5 -0
- package/lib/utils/CreateRequire.node.js +3 -0
- package/lib/utils/CustomError.js +5 -0
- package/lib/utils/Runtime.js +25 -6
- 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 +13 -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,9 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { WebSocketClient } from '../webSocketClient/WebSocketClient.js'
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../../utils/connectionData/IConnectionData.js').IConnectionData} IConnectionData
|
|
6
|
+
*/
|
|
3
7
|
export class TransmitterWebsocket {
|
|
4
8
|
/**
|
|
5
9
|
* @returns {void}
|
|
@@ -18,12 +22,15 @@ export class TransmitterWebsocket {
|
|
|
18
22
|
|
|
19
23
|
/**
|
|
20
24
|
* @async
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {
|
|
23
|
-
* @returns {Promise<
|
|
25
|
+
* @param {Int8Array} messageByteArray
|
|
26
|
+
* @param {IConnectionData} connectionData
|
|
27
|
+
* @returns {Promise<Int8Array>} responseByteArray
|
|
24
28
|
*/
|
|
25
|
-
static
|
|
29
|
+
static sendCommand(messageByteArray, connectionData) {
|
|
26
30
|
const { hostname } = connectionData
|
|
27
|
-
|
|
31
|
+
const options = {
|
|
32
|
+
isDisconnectedAfterMessage: true,
|
|
33
|
+
}
|
|
34
|
+
return new WebSocketClient(hostname, options).send(messageByteArray)
|
|
28
35
|
}
|
|
29
36
|
}
|
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
import { WebSocketClientBrowser } from '../webSocketClient/WebSocketClientBrowser.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @typedef {
|
|
6
|
-
* @property {string} hostname
|
|
5
|
+
* @typedef {import('../../utils/connectionData/IConnectionData.js').IConnectionData} IConnectionData
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
7
|
export class TransmitterWebsocketBrowser {
|
|
10
8
|
/**
|
|
11
9
|
* @returns {void}
|
|
@@ -20,7 +18,7 @@ export class TransmitterWebsocketBrowser {
|
|
|
20
18
|
/**
|
|
21
19
|
* @async
|
|
22
20
|
* @param {Int8Array} messageByteArray
|
|
23
|
-
* @param {
|
|
21
|
+
* @param {IConnectionData} connectionData
|
|
24
22
|
* @returns {Promise<Int8Array>} responseByteArray
|
|
25
23
|
*/
|
|
26
24
|
static async sendCommand(messageByteArray, connectionData) {
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { getDependency, getRequire, isNodejsRuntime } from '../../utils/Runtime.js'
|
|
2
3
|
import { ReceiverNative } from '../receiver/ReceiverNative.js'
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
/** @type {any | null} */
|
|
6
|
+
let library = null
|
|
7
|
+
/** @type {any | null} */
|
|
8
|
+
let path = null
|
|
5
9
|
|
|
6
10
|
/** @type {import('module').createRequire} */
|
|
7
11
|
const requireDynamic = getRequire(import.meta.url)
|
|
8
12
|
|
|
9
13
|
class TransmitterWrapper {
|
|
10
14
|
static isNativeLibraryLoaded() {
|
|
11
|
-
return library
|
|
15
|
+
return Boolean(library)
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
static loadNativeLibrary() {
|
|
@@ -19,38 +23,55 @@ class TransmitterWrapper {
|
|
|
19
23
|
return
|
|
20
24
|
}
|
|
21
25
|
try {
|
|
22
|
-
|
|
26
|
+
if (!path) {
|
|
27
|
+
path = requireDynamic('path')
|
|
28
|
+
}
|
|
23
29
|
const packagePath = getDependency('javonet-binaries', import.meta.url)
|
|
24
30
|
|
|
25
31
|
const binariesRootPath = path.dirname(packagePath)
|
|
26
|
-
const nativeAddonPath = path.join(
|
|
32
|
+
const nativeAddonPath = path.join(
|
|
33
|
+
binariesRootPath,
|
|
34
|
+
'build',
|
|
35
|
+
'Release',
|
|
36
|
+
'JavonetNodejsRuntimeAddon.node'
|
|
37
|
+
)
|
|
27
38
|
|
|
28
39
|
library = requireDynamic(nativeAddonPath)
|
|
29
40
|
library.initializeTransmitter(binariesRootPath)
|
|
30
|
-
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
library.setReceiverNative(global?.ReceiverNative)
|
|
31
43
|
} catch (error) {
|
|
32
44
|
throw error
|
|
33
45
|
}
|
|
34
46
|
}
|
|
35
47
|
|
|
36
48
|
/**
|
|
37
|
-
* @param {string} licenseKey
|
|
49
|
+
* @param {string} licenseKey
|
|
38
50
|
*/
|
|
39
51
|
static activate(licenseKey) {
|
|
40
52
|
this.loadNativeLibrary()
|
|
41
53
|
return library.activate(licenseKey)
|
|
42
54
|
}
|
|
43
55
|
|
|
56
|
+
/**
|
|
57
|
+
* @param {Int8Array} messageArray
|
|
58
|
+
*/
|
|
44
59
|
static sendCommand(messageArray) {
|
|
45
60
|
this.loadNativeLibrary()
|
|
46
61
|
return library.sendCommand(messageArray)
|
|
47
62
|
}
|
|
48
63
|
|
|
64
|
+
/**
|
|
65
|
+
* @param {string} configSource
|
|
66
|
+
*/
|
|
49
67
|
static setConfigSource(configSource) {
|
|
50
68
|
this.loadNativeLibrary()
|
|
51
69
|
return library.setConfigSource(configSource)
|
|
52
70
|
}
|
|
53
71
|
|
|
72
|
+
/**
|
|
73
|
+
* @param {string} path
|
|
74
|
+
*/
|
|
54
75
|
static setJavonetWorkingDirectory(path) {
|
|
55
76
|
this.loadNativeLibrary()
|
|
56
77
|
library.setJavonetWorkingDirectory(path)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
class TypeCache {
|
|
3
|
+
/** @type {TypeCache | null} */
|
|
2
4
|
static _instance = null
|
|
5
|
+
/** @type {string[]} */
|
|
3
6
|
typeCache = []
|
|
4
7
|
|
|
5
8
|
constructor() {
|
|
@@ -9,6 +12,9 @@ class TypeCache {
|
|
|
9
12
|
return TypeCache._instance
|
|
10
13
|
}
|
|
11
14
|
|
|
15
|
+
/**
|
|
16
|
+
* @param {string} typRegex
|
|
17
|
+
*/
|
|
12
18
|
cacheType(typRegex) {
|
|
13
19
|
this.typeCache.push(typRegex)
|
|
14
20
|
}
|
|
@@ -17,6 +23,9 @@ class TypeCache {
|
|
|
17
23
|
return this.typeCache.length === 0
|
|
18
24
|
}
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
* @param {{ name: string }} typeToCheck
|
|
28
|
+
*/
|
|
20
29
|
isTypeAllowed(typeToCheck) {
|
|
21
30
|
for (let pattern of this.typeCache) {
|
|
22
31
|
if (new RegExp(pattern).test(typeToCheck.name)) {
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
//@ts-check
|
|
1
2
|
import { getRequire, isNodejsRuntime } from '../../utils/Runtime.js'
|
|
2
3
|
|
|
3
4
|
const requireDynamic = getRequire(import.meta.url)
|
|
4
5
|
|
|
6
|
+
/** @typedef {import('ws').WebSocket} wsClient */
|
|
7
|
+
/** @typedef {typeof import('ws').WebSocket} WebSocketClass */
|
|
8
|
+
|
|
5
9
|
/**
|
|
6
10
|
* Enum for WebSocket states.
|
|
7
11
|
* @readonly
|
|
@@ -13,6 +17,7 @@ const WebSocketStateEnum = {
|
|
|
13
17
|
ERROR: 'error',
|
|
14
18
|
}
|
|
15
19
|
|
|
20
|
+
/** @type {WebSocketClass | null} */
|
|
16
21
|
let WebSocket = null
|
|
17
22
|
|
|
18
23
|
/**
|
|
@@ -21,34 +26,23 @@ let WebSocket = null
|
|
|
21
26
|
class WebSocketClient {
|
|
22
27
|
/**
|
|
23
28
|
* @param {string} url
|
|
24
|
-
* @param {
|
|
29
|
+
* @param {{ isDisconnectedAfterMessage: boolean }} options
|
|
25
30
|
*/
|
|
26
31
|
constructor(url, options) {
|
|
27
|
-
/**
|
|
28
|
-
* @type {string}
|
|
29
|
-
*/
|
|
32
|
+
/** @type {string} */
|
|
30
33
|
this.url = url
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @type {WebSocket | null}
|
|
34
|
-
*/
|
|
34
|
+
/** @type {wsClient | null} */
|
|
35
35
|
this.instance = null
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @type {boolean} isConnected indicates whether the WebSocket is connected.
|
|
39
|
-
*/
|
|
36
|
+
/** @type {boolean} */
|
|
40
37
|
this.isConnected = false
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @type {boolean}
|
|
44
|
-
*/
|
|
38
|
+
/** @type {boolean} */
|
|
45
39
|
this.isDisconnectedAfterMessage = options?.isDisconnectedAfterMessage ?? true
|
|
46
40
|
}
|
|
47
41
|
|
|
48
42
|
/**
|
|
49
43
|
* Connects to the WebSocket server.
|
|
50
44
|
* @async
|
|
51
|
-
* @returns {Promise<
|
|
45
|
+
* @returns {Promise<wsClient>} - A promise that resolves when the connection is established.
|
|
52
46
|
*/
|
|
53
47
|
async connect() {
|
|
54
48
|
if (!WebSocket) {
|
|
@@ -56,7 +50,12 @@ class WebSocketClient {
|
|
|
56
50
|
try {
|
|
57
51
|
WebSocket = requireDynamic('ws')
|
|
58
52
|
} catch (error) {
|
|
59
|
-
if (
|
|
53
|
+
if (
|
|
54
|
+
typeof error === 'object' &&
|
|
55
|
+
error &&
|
|
56
|
+
'code' in error &&
|
|
57
|
+
error.code === 'MODULE_NOT_FOUND'
|
|
58
|
+
) {
|
|
60
59
|
throw new Error('ws module not found. Please install it using npm install ws')
|
|
61
60
|
}
|
|
62
61
|
throw error
|
|
@@ -65,6 +64,10 @@ class WebSocketClient {
|
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
return new Promise((resolve, reject) => {
|
|
67
|
+
if (!WebSocket) {
|
|
68
|
+
reject(new Error('ws client is null'))
|
|
69
|
+
return
|
|
70
|
+
}
|
|
68
71
|
const client = new WebSocket(this.url)
|
|
69
72
|
|
|
70
73
|
client.on(WebSocketStateEnum.OPEN, () => {
|
|
@@ -73,7 +76,7 @@ class WebSocketClient {
|
|
|
73
76
|
})
|
|
74
77
|
|
|
75
78
|
// eslint-disable-next-line no-unused-vars
|
|
76
|
-
client.on(WebSocketStateEnum.ERROR, (error) => {
|
|
79
|
+
client.on(WebSocketStateEnum.ERROR, (/** @type {unknown} */ error) => {
|
|
77
80
|
reject(error)
|
|
78
81
|
})
|
|
79
82
|
|
|
@@ -86,20 +89,16 @@ class WebSocketClient {
|
|
|
86
89
|
/**
|
|
87
90
|
* Sends messageArray through websocket connection
|
|
88
91
|
* @async
|
|
89
|
-
* @param {
|
|
90
|
-
* @returns {Promise<
|
|
92
|
+
* @param {Int8Array} messageArray
|
|
93
|
+
* @returns {Promise<Int8Array>}
|
|
91
94
|
*/
|
|
92
95
|
send(messageArray) {
|
|
93
96
|
return new Promise((resolve, reject) => {
|
|
94
97
|
;(this.instance ? Promise.resolve(this.instance) : this._connect())
|
|
95
98
|
.then((client) => {
|
|
96
|
-
client.send(
|
|
97
|
-
if (err) {
|
|
98
|
-
reject(err)
|
|
99
|
-
}
|
|
100
|
-
})
|
|
99
|
+
client.send(/** @type {any} */ (messageArray))
|
|
101
100
|
|
|
102
|
-
client.on('message', (message) => {
|
|
101
|
+
client.on('message', (/** @type {any} */ message) => {
|
|
103
102
|
resolve(message)
|
|
104
103
|
|
|
105
104
|
if (this.isDisconnectedAfterMessage) {
|
|
@@ -128,7 +127,7 @@ class WebSocketClient {
|
|
|
128
127
|
* Connects to the WebSocket server.
|
|
129
128
|
* @private
|
|
130
129
|
* @async
|
|
131
|
-
* @returns {Promise<
|
|
130
|
+
* @returns {Promise<wsClient>} - A promise that resolves when the connection is established.
|
|
132
131
|
*/
|
|
133
132
|
_connect() {
|
|
134
133
|
if (!WebSocket) {
|
|
@@ -136,7 +135,7 @@ class WebSocketClient {
|
|
|
136
135
|
try {
|
|
137
136
|
WebSocket = requireDynamic('ws')
|
|
138
137
|
} catch (error) {
|
|
139
|
-
if (error.code === 'MODULE_NOT_FOUND') {
|
|
138
|
+
if (/** @type {{ code?: string }} */ (error).code === 'MODULE_NOT_FOUND') {
|
|
140
139
|
throw new Error('ws module not found. Please install it using npm install ws')
|
|
141
140
|
}
|
|
142
141
|
throw error
|
|
@@ -145,6 +144,10 @@ class WebSocketClient {
|
|
|
145
144
|
}
|
|
146
145
|
|
|
147
146
|
return new Promise((resolve, reject) => {
|
|
147
|
+
if (!WebSocket) {
|
|
148
|
+
reject(new Error('ws client is null'))
|
|
149
|
+
return
|
|
150
|
+
}
|
|
148
151
|
const client = new WebSocket(this.url)
|
|
149
152
|
|
|
150
153
|
client.on(WebSocketStateEnum.OPEN, () => {
|
|
@@ -154,7 +157,7 @@ class WebSocketClient {
|
|
|
154
157
|
})
|
|
155
158
|
|
|
156
159
|
// eslint-disable-next-line no-unused-vars
|
|
157
|
-
client.on(WebSocketStateEnum.ERROR, (error) => {
|
|
160
|
+
client.on(WebSocketStateEnum.ERROR, (/** @type {unknown} */ error) => {
|
|
158
161
|
reject(error)
|
|
159
162
|
})
|
|
160
163
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { isBrowserRuntime } from "../../utils/Runtime.js"
|
|
2
3
|
|
|
3
|
-
// @ts-nocheck
|
|
4
4
|
const WebSocketState = /** @type {const} */ ({
|
|
5
5
|
OPEN: 'open',
|
|
6
6
|
CLOSE: 'close',
|
|
@@ -9,13 +9,12 @@ const WebSocketState = /** @type {const} */ ({
|
|
|
9
9
|
})
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* @type {WebSocket | null}
|
|
12
|
+
* @type {typeof WebSocket | null}
|
|
13
13
|
*/
|
|
14
14
|
let WsClient = null
|
|
15
15
|
|
|
16
16
|
if (isBrowserRuntime()) {
|
|
17
|
-
/** @type {WebSocket} */
|
|
18
|
-
// @ts-ignore
|
|
17
|
+
/** @type {typeof WebSocket} */
|
|
19
18
|
WsClient = WebSocket
|
|
20
19
|
}
|
|
21
20
|
|
|
@@ -96,8 +95,8 @@ class WebSocketClientBrowser {
|
|
|
96
95
|
*/
|
|
97
96
|
_connect() {
|
|
98
97
|
return new Promise((resolve, reject) => {
|
|
99
|
-
if (
|
|
100
|
-
reject(new Error('missing WebSocket client'))
|
|
98
|
+
if (WsClient === null) {
|
|
99
|
+
return reject(new Error('missing WebSocket client'))
|
|
101
100
|
}
|
|
102
101
|
this.instance = new WsClient(this.url)
|
|
103
102
|
this.instance.binaryType = 'arraybuffer'
|
|
@@ -1,35 +1,31 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { WsConnectionData } from '../utils/connectionData/WsConnectionData.js'
|
|
2
3
|
import { TcpConnectionData } from '../utils/nodejs/connectionData/TcpConnectionData.js'
|
|
3
4
|
import { RuntimeName } from '../utils/RuntimeName.js'
|
|
4
5
|
import { RuntimeNameHandler } from '../utils/RuntimeNameHandler.js'
|
|
5
6
|
import { RuntimeContext } from './RuntimeContext.js'
|
|
6
|
-
import {
|
|
7
|
-
import { isNodejsRuntime, isBrowserRuntime, getRequire } from '../utils/Runtime.js'
|
|
8
|
-
import { JsonFileResolver } from './tools/nodejs/JsonFileResolver.js'
|
|
7
|
+
import { isNodejsRuntime, isBrowserRuntime, getRequire, getDirname } from '../utils/Runtime.js'
|
|
9
8
|
import { InMemoryConnectionData } from '../utils/connectionData/InMemoryConnectionData.js'
|
|
9
|
+
import { JsonResolver } from './tools/JsonResolver.js'
|
|
10
|
+
import { UtilsConst } from '../utils/UtilsConst.js'
|
|
10
11
|
|
|
11
12
|
const requireDynamic = getRequire(import.meta.url)
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {import('../types.d.ts').ConfigSource} ConfigSource
|
|
16
|
+
* @typedef {import('../types.d.ts').RuntimeName} RuntimeNameType
|
|
17
|
+
*/
|
|
12
18
|
/**
|
|
13
19
|
* The ConfigRuntimeFactory class provides methods for creating runtime contexts.
|
|
14
20
|
* Each method corresponds to a specific runtime (CLR, JVM, .NET Core, Perl, Ruby, Node.js, Python) and returns a RuntimeContext instance for that runtime.
|
|
15
21
|
* @see [Javonet Guides](https://www.javonet.com/guides/v2/javascript/foundations/runtime-context)
|
|
16
22
|
*/
|
|
17
23
|
export class ConfigRuntimeFactory {
|
|
18
|
-
/** @type {import('../core/transmitter/Transmitter.js') | null} */
|
|
19
|
-
transmitter = null
|
|
20
|
-
|
|
21
24
|
/**
|
|
22
|
-
* @param {
|
|
23
|
-
* @param {import('../core/transmitter/Transmitter.js') | null} transmitter
|
|
25
|
+
* @param {ConfigSource | string} configSource
|
|
24
26
|
*/
|
|
25
|
-
constructor(configSource
|
|
27
|
+
constructor(configSource) {
|
|
26
28
|
this.configSource = configSource
|
|
27
|
-
this.transmitter = transmitter
|
|
28
|
-
|
|
29
|
-
if (isNodejsRuntime()) {
|
|
30
|
-
// @ts-ignore
|
|
31
|
-
this.transmitter?.setConfigSource(configSource)
|
|
32
|
-
}
|
|
33
29
|
}
|
|
34
30
|
|
|
35
31
|
/**
|
|
@@ -113,93 +109,99 @@ export class ConfigRuntimeFactory {
|
|
|
113
109
|
}
|
|
114
110
|
|
|
115
111
|
/**
|
|
116
|
-
* @param {
|
|
112
|
+
* @param {RuntimeNameType} runtime
|
|
117
113
|
* @param {string} configName
|
|
118
|
-
* @returns
|
|
114
|
+
* @returns {RuntimeContext}
|
|
119
115
|
*/
|
|
120
116
|
#getRuntimeContext(runtime, configName = 'default') {
|
|
117
|
+
const jsonResolver = new JsonResolver(this.configSource)
|
|
118
|
+
|
|
119
|
+
UtilsConst.setLicenseKey(jsonResolver.getLicenseKey())
|
|
120
|
+
if (jsonResolver.getWorkingDirectory()) {
|
|
121
|
+
UtilsConst.setJavonetWorkingDirectory(jsonResolver.getWorkingDirectory())
|
|
122
|
+
}
|
|
123
|
+
|
|
121
124
|
if (isBrowserRuntime()) {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
let connData = null
|
|
125
|
+
const channelType = jsonResolver.getChannelType(RuntimeNameHandler.getName(runtime), configName)
|
|
126
|
+
let connectionData = null
|
|
125
127
|
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
if (channelType === 'webSocket') {
|
|
129
|
+
connectionData = new WsConnectionData(
|
|
130
|
+
jsonResolver.getChannelHost(RuntimeNameHandler.getName(runtime), configName)
|
|
129
131
|
)
|
|
130
132
|
} else {
|
|
131
|
-
throw new Error('Unsupported connection type: ' +
|
|
133
|
+
throw new Error('Unsupported connection type: ' + channelType)
|
|
132
134
|
}
|
|
133
135
|
|
|
134
|
-
const rtmCtx = RuntimeContext.getInstance(runtime,
|
|
135
|
-
this.#loadModules(runtime, configName,
|
|
136
|
+
const rtmCtx = RuntimeContext.getInstance(runtime, connectionData)
|
|
137
|
+
this.#loadModules(runtime, configName, jsonResolver, rtmCtx)
|
|
136
138
|
return rtmCtx
|
|
137
139
|
}
|
|
138
140
|
|
|
139
141
|
if (isNodejsRuntime()) {
|
|
140
|
-
let jfr = new JsonFileResolver(this.configSource)
|
|
141
|
-
|
|
142
142
|
try {
|
|
143
|
-
const
|
|
144
|
-
|
|
143
|
+
const channelType = jsonResolver.getChannelType(
|
|
144
|
+
RuntimeNameHandler.getName(runtime),
|
|
145
|
+
configName
|
|
146
|
+
)
|
|
147
|
+
const licenseKey = jsonResolver.getLicenseKey()
|
|
148
|
+
|
|
149
|
+
let connectionData = null
|
|
150
|
+
if (channelType === 'inMemory') {
|
|
151
|
+
connectionData = new InMemoryConnectionData()
|
|
152
|
+
} else if (channelType === 'tcp') {
|
|
153
|
+
connectionData = new TcpConnectionData(
|
|
154
|
+
jsonResolver.getChannelHost(RuntimeNameHandler.getName(runtime), configName),
|
|
155
|
+
/** @type {number} */ (jsonResolver.getChannelPort(RuntimeNameHandler.getName(runtime), configName))
|
|
156
|
+
)
|
|
157
|
+
} else if (channelType === 'webSocket') {
|
|
158
|
+
connectionData = new WsConnectionData(
|
|
159
|
+
jsonResolver.getChannelHost(RuntimeNameHandler.getName(runtime), configName)
|
|
160
|
+
)
|
|
161
|
+
} else {
|
|
162
|
+
throw new Error('Unsupported connection type: ' + channelType)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const rtmCtx = RuntimeContext.getInstance(runtime, connectionData)
|
|
166
|
+
this.#loadModules(runtime, configName, jsonResolver, rtmCtx)
|
|
167
|
+
return rtmCtx
|
|
145
168
|
} catch (error) {
|
|
146
169
|
throw error
|
|
147
170
|
}
|
|
148
|
-
|
|
149
|
-
let rtmCtx = null
|
|
150
|
-
let connData = null
|
|
151
|
-
let connType = jfr.getChannelType(RuntimeNameHandler.getName(runtime), configName)
|
|
152
|
-
|
|
153
|
-
if (connType === 'inMemory') {
|
|
154
|
-
connData = new InMemoryConnectionData()
|
|
155
|
-
} else if (connType === 'tcp') {
|
|
156
|
-
connData = new TcpConnectionData(
|
|
157
|
-
jfr.getChannelHost(RuntimeNameHandler.getName(runtime), configName),
|
|
158
|
-
jfr.getChannelPort(RuntimeNameHandler.getName(runtime), configName)
|
|
159
|
-
)
|
|
160
|
-
} else if (connType === 'webSocket') {
|
|
161
|
-
connData = new WsConnectionData(
|
|
162
|
-
jfr.getChannelHost(RuntimeNameHandler.getName(runtime), configName)
|
|
163
|
-
)
|
|
164
|
-
} else {
|
|
165
|
-
throw new Error('Unsupported connection type: ' + connType)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
rtmCtx = RuntimeContext.getInstance(runtime, connData)
|
|
169
|
-
this.#loadModules(runtime, configName, jfr, rtmCtx)
|
|
170
|
-
return rtmCtx
|
|
171
171
|
}
|
|
172
|
+
|
|
173
|
+
throw new Error('Unsupported runtime environment')
|
|
172
174
|
}
|
|
173
175
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
+
/**
|
|
177
|
+
* @param {number} runtime
|
|
178
|
+
* @param {string} configName
|
|
179
|
+
* @param {JsonResolver} jsonResolver
|
|
180
|
+
* @param {RuntimeContext} rtmCtx
|
|
181
|
+
*/
|
|
182
|
+
#loadModules(runtime, configName, jsonResolver, rtmCtx) {
|
|
176
183
|
try {
|
|
177
|
-
const modules =
|
|
184
|
+
const modules = jsonResolver
|
|
178
185
|
.getModules(RuntimeNameHandler.getName(runtime), configName)
|
|
179
186
|
.split(',')
|
|
180
|
-
// @ts-ignore
|
|
181
187
|
.filter((module) => module.trim() !== '')
|
|
182
188
|
|
|
183
189
|
if (isNodejsRuntime()) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
const configDirectoryAbsolutePath = path?.dirname(this.configSource)
|
|
190
|
-
// @ts-ignore
|
|
190
|
+
const path = /** @type {import('path').PlatformPath} */ (
|
|
191
|
+
/** @type {unknown} */ (requireDynamic('path'))
|
|
192
|
+
)
|
|
193
|
+
// TODO: make sure that relative path works
|
|
194
|
+
const configDirectoryAbsolutePath = process.cwd()
|
|
191
195
|
modules.forEach((module) => {
|
|
192
|
-
if (path
|
|
196
|
+
if (path.isAbsolute(module)) {
|
|
193
197
|
rtmCtx.loadLibrary(module)
|
|
194
198
|
} else {
|
|
195
|
-
rtmCtx.loadLibrary(path
|
|
199
|
+
rtmCtx.loadLibrary(path.join(configDirectoryAbsolutePath, module))
|
|
196
200
|
}
|
|
197
201
|
})
|
|
198
202
|
}
|
|
199
|
-
// eslint-disable-next-line no-unused-vars
|
|
200
203
|
} catch (error) {
|
|
201
204
|
throw error
|
|
202
|
-
// most likely browser will never support this
|
|
203
205
|
}
|
|
204
206
|
}
|
|
205
207
|
}
|