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.
Files changed (204) hide show
  1. package/dist/core/delegatesCache/DelegatesCache.cjs +1 -5
  2. package/dist/core/handler/AbstractHandler.cjs +24 -9
  3. package/dist/core/handler/ArrayGetItemHandler.cjs +5 -4
  4. package/dist/core/handler/ArrayGetRankHandler.cjs +4 -3
  5. package/dist/core/handler/ArrayGetSizeHandler.cjs +4 -3
  6. package/dist/core/handler/ArrayHandler.cjs +3 -0
  7. package/dist/core/handler/ArraySetItemHandler.cjs +5 -4
  8. package/dist/core/handler/CastingHandler.cjs +3 -1
  9. package/dist/core/handler/ConvertTypeHandler.cjs +4 -4
  10. package/dist/core/handler/CreateClassInstanceHandler.cjs +6 -5
  11. package/dist/core/handler/DestructReferenceHandler.cjs +3 -0
  12. package/dist/core/handler/EnableNamespaceHandler.cjs +3 -0
  13. package/dist/core/handler/EnableTypeHandler.cjs +4 -3
  14. package/dist/core/handler/GetGlobalStaticFieldHandler.cjs +4 -3
  15. package/dist/core/handler/GetInstanceFieldHandler.cjs +4 -3
  16. package/dist/core/handler/GetInstanceMethodAsDelegateHandler.cjs +15 -4
  17. package/dist/core/handler/GetStaticFieldHandler.cjs +5 -3
  18. package/dist/core/handler/GetStaticMethodAsDelegateHandler.cjs +10 -10
  19. package/dist/core/handler/GetTypeHandler.cjs +10 -2
  20. package/dist/core/handler/Handler.cjs +8 -11
  21. package/dist/core/handler/InvokeGlobalFunctionHandler.cjs +4 -3
  22. package/dist/core/handler/InvokeInstanceMethodHandler.cjs +4 -3
  23. package/dist/core/handler/InvokeStaticMethodHandler.cjs +4 -3
  24. package/dist/core/handler/LoadLibraryHandler.cjs +11 -10
  25. package/dist/core/handler/PassDelegateHandler.cjs +2 -4
  26. package/dist/core/handler/SetGlobalStaticFieldHandler.cjs +4 -3
  27. package/dist/core/handler/SetInstanceFieldHandler.cjs +4 -3
  28. package/dist/core/handler/SetStaticFieldHandler.cjs +4 -3
  29. package/dist/core/handler/ValueHandler.cjs +4 -0
  30. package/dist/core/interpreter/Interpreter.cjs +29 -17
  31. package/dist/core/namespaceCache/NamespaceCache.cjs +19 -10
  32. package/dist/core/protocol/CommandDeserializer.cjs +10 -2
  33. package/dist/core/protocol/CommandSerializer.cjs +24 -4
  34. package/dist/core/protocol/TypeDeserializer.cjs +35 -0
  35. package/dist/core/protocol/TypeSerializer.cjs +51 -7
  36. package/dist/core/receiver/Receiver.cjs +3 -5
  37. package/dist/core/receiver/ReceiverNative.cjs +6 -0
  38. package/dist/core/transmitter/Transmitter.cjs +19 -5
  39. package/dist/core/transmitter/TransmitterWebsocket.cjs +8 -5
  40. package/dist/core/transmitter/TransmitterWebsocketBrowser.cjs +1 -1
  41. package/dist/core/transmitter/TransmitterWrapper.cjs +25 -8
  42. package/dist/core/typeCache/TypeCache.cjs +15 -10
  43. package/dist/core/webSocketClient/WebSocketClient.cjs +22 -12
  44. package/dist/core/webSocketClient/WebSocketClientBrowser.cjs +2 -2
  45. package/dist/sdk/ConfigRuntimeFactory.cjs +92 -98
  46. package/dist/sdk/InvocationContext.cjs +229 -203
  47. package/dist/sdk/Javonet.cjs +14 -33
  48. package/dist/sdk/RuntimeContext.cjs +138 -99
  49. package/dist/sdk/RuntimeFactory.cjs +3 -0
  50. package/dist/sdk/tools/ActivationHelper.cjs +66 -0
  51. package/dist/sdk/tools/JsonResolver.cjs +214 -0
  52. package/dist/types/core/handler/AbstractHandler.d.ts +23 -4
  53. package/dist/types/core/handler/ArrayGetItemHandler.d.ts +8 -1
  54. package/dist/types/core/handler/ArrayGetRankHandler.d.ts +8 -1
  55. package/dist/types/core/handler/ArrayGetSizeHandler.d.ts +8 -1
  56. package/dist/types/core/handler/ArrayHandler.d.ts +8 -1
  57. package/dist/types/core/handler/ArraySetItemHandler.d.ts +8 -1
  58. package/dist/types/core/handler/CastingHandler.d.ts +4 -0
  59. package/dist/types/core/handler/ConvertTypeHandler.d.ts +8 -4
  60. package/dist/types/core/handler/CreateClassInstanceHandler.d.ts +8 -1
  61. package/dist/types/core/handler/DestructReferenceHandler.d.ts +8 -1
  62. package/dist/types/core/handler/EnableNamespaceHandler.d.ts +8 -1
  63. package/dist/types/core/handler/EnableTypeHandler.d.ts +8 -1
  64. package/dist/types/core/handler/GetGlobalStaticFieldHandler.d.ts +8 -1
  65. package/dist/types/core/handler/GetInstanceFieldHandler.d.ts +8 -1
  66. package/dist/types/core/handler/GetStaticFieldHandler.d.ts +9 -1
  67. package/dist/types/core/handler/GetStaticMethodAsDelegateHandler.d.ts +4 -3
  68. package/dist/types/core/handler/GetTypeHandler.d.ts +17 -8
  69. package/dist/types/core/handler/Handler.d.ts +8 -8
  70. package/dist/types/core/handler/InvokeDelegateHandler.d.ts +4 -0
  71. package/dist/types/core/handler/InvokeGlobalFunctionHandler.d.ts +8 -1
  72. package/dist/types/core/handler/InvokeInstanceMethodHandler.d.ts +8 -1
  73. package/dist/types/core/handler/InvokeStaticMethodHandler.d.ts +8 -1
  74. package/dist/types/core/handler/LoadLibraryHandler.d.ts +8 -3
  75. package/dist/types/core/handler/SetGlobalStaticFieldHandler.d.ts +4 -0
  76. package/dist/types/core/handler/SetInstanceFieldHandler.d.ts +8 -1
  77. package/dist/types/core/handler/SetStaticFieldHandler.d.ts +8 -1
  78. package/dist/types/core/handler/ValueHandler.d.ts +9 -1
  79. package/dist/types/core/interpreter/Interpreter.d.ts +11 -10
  80. package/dist/types/core/namespaceCache/NamespaceCache.d.ts +17 -5
  81. package/dist/types/core/protocol/CommandDeserializer.d.ts +10 -3
  82. package/dist/types/core/protocol/CommandSerializer.d.ts +19 -2
  83. package/dist/types/core/protocol/TypeDeserializer.d.ts +46 -11
  84. package/dist/types/core/protocol/TypeSerializer.d.ts +53 -13
  85. package/dist/types/core/receiver/Receiver.d.ts +2 -2
  86. package/dist/types/core/receiver/ReceiverNative.d.ts +8 -2
  87. package/dist/types/core/transmitter/Transmitter.d.ts +20 -4
  88. package/dist/types/core/transmitter/TransmitterWebsocket.d.ts +8 -4
  89. package/dist/types/core/transmitter/TransmitterWebsocketBrowser.d.ts +4 -7
  90. package/dist/types/core/transmitter/TransmitterWrapper.d.ts +12 -3
  91. package/dist/types/core/typeCache/TypeCache.d.ts +15 -5
  92. package/dist/types/core/webSocketClient/WebSocketClient.d.ts +17 -21
  93. package/dist/types/sdk/ConfigRuntimeFactory.d.ts +9 -6
  94. package/dist/types/sdk/InvocationContext.d.ts +38 -6
  95. package/dist/types/sdk/Javonet.d.ts +12 -7
  96. package/dist/types/sdk/RuntimeContext.d.ts +23 -7
  97. package/dist/types/sdk/RuntimeFactory.d.ts +9 -2
  98. package/dist/types/sdk/tools/ActivationHelper.d.ts +20 -0
  99. package/dist/types/sdk/tools/JsonResolver.d.ts +87 -0
  100. package/dist/types/utils/Command.d.ts +18 -14
  101. package/dist/types/utils/CreateRequire.browser.d.ts +1 -0
  102. package/dist/types/utils/CreateRequire.node.d.ts +2 -0
  103. package/dist/types/utils/CustomError.d.ts +5 -1
  104. package/dist/types/utils/Runtime.d.ts +2 -3
  105. package/dist/types/utils/RuntimeNameHandler.d.ts +6 -2
  106. package/dist/types/utils/Type.d.ts +1 -0
  107. package/dist/types/utils/TypesHandler.d.ts +16 -0
  108. package/dist/types/utils/UtilsConst.d.ts +32 -0
  109. package/dist/types/utils/connectionData/IConnectionData.d.ts +16 -3
  110. package/dist/types/utils/connectionData/InMemoryConnectionData.d.ts +4 -3
  111. package/dist/types/utils/connectionData/WsConnectionData.d.ts +7 -10
  112. package/dist/types/utils/nodejs/connectionData/TcpConnectionData.d.ts +17 -10
  113. package/dist/utils/Command.cjs +9 -9
  114. package/dist/utils/CreateRequire.browser.cjs +30 -0
  115. package/dist/utils/CreateRequire.node.cjs +28 -0
  116. package/dist/utils/CustomError.cjs +4 -0
  117. package/dist/utils/Runtime.cjs +24 -18
  118. package/dist/utils/RuntimeLogger.cjs +2 -4
  119. package/dist/utils/RuntimeLoggerBrowser.cjs +1 -3
  120. package/dist/utils/RuntimeNameHandler.cjs +1 -1
  121. package/dist/utils/Type.cjs +2 -1
  122. package/dist/utils/TypesHandler.cjs +55 -0
  123. package/dist/utils/UtilsConst.cjs +101 -0
  124. package/dist/utils/connectionData/IConnectionData.cjs +9 -0
  125. package/dist/utils/connectionData/InMemoryConnectionData.cjs +10 -0
  126. package/dist/utils/connectionData/WsConnectionData.cjs +4 -0
  127. package/dist/utils/nodejs/connectionData/TcpConnectionData.cjs +45 -25
  128. package/lib/core/delegatesCache/DelegatesCache.js +1 -0
  129. package/lib/core/handler/AbstractHandler.js +27 -9
  130. package/lib/core/handler/ArrayGetItemHandler.js +9 -1
  131. package/lib/core/handler/ArrayGetRankHandler.js +9 -0
  132. package/lib/core/handler/ArrayGetSizeHandler.js +8 -0
  133. package/lib/core/handler/ArrayHandler.js +8 -0
  134. package/lib/core/handler/ArraySetItemHandler.js +11 -1
  135. package/lib/core/handler/CastingHandler.js +8 -1
  136. package/lib/core/handler/ConvertTypeHandler.js +9 -4
  137. package/lib/core/handler/CreateClassInstanceHandler.js +10 -4
  138. package/lib/core/handler/DestructReferenceHandler.js +8 -0
  139. package/lib/core/handler/EnableNamespaceHandler.js +8 -0
  140. package/lib/core/handler/EnableTypeHandler.js +8 -0
  141. package/lib/core/handler/GetGlobalStaticFieldHandler.js +9 -0
  142. package/lib/core/handler/GetInstanceFieldHandler.js +8 -0
  143. package/lib/core/handler/GetInstanceMethodAsDelegateHandler.js +9 -4
  144. package/lib/core/handler/GetStaticFieldHandler.js +9 -0
  145. package/lib/core/handler/GetStaticMethodAsDelegateHandler.js +8 -7
  146. package/lib/core/handler/GetTypeHandler.js +15 -5
  147. package/lib/core/handler/Handler.js +13 -18
  148. package/lib/core/handler/InvokeDelegateHandler.js +5 -0
  149. package/lib/core/handler/InvokeGlobalFunctionHandler.js +11 -1
  150. package/lib/core/handler/InvokeInstanceMethodHandler.js +8 -0
  151. package/lib/core/handler/InvokeStaticMethodHandler.js +8 -0
  152. package/lib/core/handler/LoadLibraryHandler.js +11 -0
  153. package/lib/core/handler/SetGlobalStaticFieldHandler.js +10 -0
  154. package/lib/core/handler/SetInstanceFieldHandler.js +7 -0
  155. package/lib/core/handler/SetStaticFieldHandler.js +8 -0
  156. package/lib/core/handler/ValueHandler.js +9 -0
  157. package/lib/core/interpreter/Interpreter.js +42 -24
  158. package/lib/core/namespaceCache/NamespaceCache.js +14 -0
  159. package/lib/core/protocol/CommandDeserializer.js +11 -2
  160. package/lib/core/protocol/CommandSerializer.js +40 -9
  161. package/lib/core/protocol/TypeDeserializer.js +36 -0
  162. package/lib/core/protocol/TypeSerializer.js +62 -7
  163. package/lib/core/receiver/Receiver.js +3 -2
  164. package/lib/core/receiver/ReceiverNative.js +8 -0
  165. package/lib/core/transmitter/Transmitter.js +18 -1
  166. package/lib/core/transmitter/TransmitterWebsocket.js +12 -5
  167. package/lib/core/transmitter/TransmitterWebsocketBrowser.js +2 -4
  168. package/lib/core/transmitter/TransmitterWrapper.js +27 -6
  169. package/lib/core/typeCache/TypeCache.js +9 -0
  170. package/lib/core/webSocketClient/WebSocketClient.js +33 -30
  171. package/lib/core/webSocketClient/WebSocketClientBrowser.js +5 -6
  172. package/lib/sdk/ConfigRuntimeFactory.js +70 -68
  173. package/lib/sdk/InvocationContext.js +94 -26
  174. package/lib/sdk/Javonet.js +18 -36
  175. package/lib/sdk/RuntimeContext.js +109 -29
  176. package/lib/sdk/RuntimeFactory.js +7 -0
  177. package/lib/sdk/tools/ActivationHelper.js +51 -0
  178. package/lib/sdk/tools/JsonResolver.js +226 -0
  179. package/lib/types.d.ts +57 -0
  180. package/lib/utils/Command.js +14 -9
  181. package/lib/utils/CreateRequire.browser.js +5 -0
  182. package/lib/utils/CreateRequire.node.js +3 -0
  183. package/lib/utils/CustomError.js +5 -0
  184. package/lib/utils/Runtime.js +25 -6
  185. package/lib/utils/RuntimeLogger.js +3 -0
  186. package/lib/utils/RuntimeNameHandler.js +6 -1
  187. package/lib/utils/Type.js +2 -1
  188. package/lib/utils/TypesHandler.js +35 -0
  189. package/lib/utils/UtilsConst.js +88 -0
  190. package/lib/utils/connectionData/IConnectionData.js +14 -0
  191. package/lib/utils/connectionData/InMemoryConnectionData.js +15 -0
  192. package/lib/utils/connectionData/WsConnectionData.js +9 -0
  193. package/lib/utils/nodejs/connectionData/TcpConnectionData.js +35 -5
  194. package/package.json +13 -3
  195. package/dist/sdk/tools/browser/ConfigSourceResolver.cjs +0 -153
  196. package/dist/sdk/tools/nodejs/JsonFileResolver.cjs +0 -120
  197. package/dist/types/sdk/tools/browser/ConfigSourceResolver.d.ts +0 -46
  198. package/dist/types/sdk/tools/nodejs/JsonFileResolver.d.ts +0 -13
  199. package/dist/types/utils/nodejs/TypesConverter.d.ts +0 -48
  200. package/dist/utils/nodejs/TypesConverter.cjs +0 -102
  201. package/lib/declarations.d.ts +0 -35
  202. package/lib/sdk/tools/browser/ConfigSourceResolver.js +0 -146
  203. package/lib/sdk/tools/nodejs/JsonFileResolver.js +0 -106
  204. 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 {number[]} messageByteArray
22
- * @param {WsConnectionData} connectionData
23
- * @returns {Promise<number[]>} responseByteArray
25
+ * @param {Int8Array} messageByteArray
26
+ * @param {IConnectionData} connectionData
27
+ * @returns {Promise<Int8Array>} responseByteArray
24
28
  */
25
- static async sendCommand(messageByteArray, connectionData) {
29
+ static sendCommand(messageByteArray, connectionData) {
26
30
  const { hostname } = connectionData
27
- return new WebSocketClient(hostname).send(messageByteArray)
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 {object} ConnectionData
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 {ConnectionData} connectionData
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
- let library
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 !== undefined
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
- const path = requireDynamic('path')
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(binariesRootPath, 'build', 'Release', 'JavonetNodejsRuntimeAddon.node')
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
- library.setReceiverNative(global.ReceiverNative)
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 {object} options
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<WebSocket>} - A promise that resolves when the connection is established.
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 (error.code === 'MODULE_NOT_FOUND') {
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 {Buffer|ArrayBuffer|Buffer[]} messageArray
90
- * @returns {Promise<Buffer|ArrayBuffer|Buffer[]>}
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(messageArray, (err) => {
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<WebSocket>} - A promise that resolves when the connection is established.
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 (!WsClient || WsClient === null) {
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 { ConfigSourceResolver } from './tools/browser/ConfigSourceResolver.js'
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 {object | string} configSource
23
- * @param {import('../core/transmitter/Transmitter.js') | null} transmitter
25
+ * @param {ConfigSource | string} configSource
24
26
  */
25
- constructor(configSource, transmitter = null) {
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 {number} runtime
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 jfr = new ConfigSourceResolver(this.configSource)
123
- const connType = jfr.getChannelType(RuntimeNameHandler.getName(runtime), configName)
124
- let connData = null
125
+ const channelType = jsonResolver.getChannelType(RuntimeNameHandler.getName(runtime), configName)
126
+ let connectionData = null
125
127
 
126
- if (connType === 'webSocket') {
127
- connData = new WsConnectionData(
128
- jfr.getChannelHost(RuntimeNameHandler.getName(runtime), configName)
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: ' + connType)
133
+ throw new Error('Unsupported connection type: ' + channelType)
132
134
  }
133
135
 
134
- const rtmCtx = RuntimeContext.getInstance(runtime, connData)
135
- this.#loadModules(runtime, configName, jfr, rtmCtx)
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 licenseKey = jfr.getLicenseKey()
144
- this.transmitter?.activate(licenseKey)
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
- // @ts-ignore
175
- #loadModules(runtime, configName, jfr, rtmCtx) {
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 = jfr
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
- if (typeof this.configSource !== 'string') {
185
- throw new Error('configSource is not a string')
186
- }
187
-
188
- const path = requireDynamic('path')
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?.isAbsolute(module)) {
196
+ if (path.isAbsolute(module)) {
193
197
  rtmCtx.loadLibrary(module)
194
198
  } else {
195
- rtmCtx.loadLibrary(path?.join(configDirectoryAbsolutePath, module))
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
  }