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.
Files changed (193) hide show
  1. package/dist/core/handler/AbstractHandler.cjs +23 -6
  2. package/dist/core/handler/ArrayGetItemHandler.cjs +4 -1
  3. package/dist/core/handler/ArrayGetRankHandler.cjs +3 -0
  4. package/dist/core/handler/ArrayGetSizeHandler.cjs +3 -0
  5. package/dist/core/handler/ArrayHandler.cjs +3 -0
  6. package/dist/core/handler/ArraySetItemHandler.cjs +4 -1
  7. package/dist/core/handler/CastingHandler.cjs +3 -1
  8. package/dist/core/handler/ConvertTypeHandler.cjs +4 -4
  9. package/dist/core/handler/CreateClassInstanceHandler.cjs +5 -2
  10. package/dist/core/handler/DestructReferenceHandler.cjs +3 -0
  11. package/dist/core/handler/EnableNamespaceHandler.cjs +3 -0
  12. package/dist/core/handler/EnableTypeHandler.cjs +3 -0
  13. package/dist/core/handler/GetGlobalStaticFieldHandler.cjs +3 -0
  14. package/dist/core/handler/GetInstanceFieldHandler.cjs +3 -0
  15. package/dist/core/handler/GetInstanceMethodAsDelegateHandler.cjs +15 -4
  16. package/dist/core/handler/GetStaticFieldHandler.cjs +4 -0
  17. package/dist/core/handler/GetStaticMethodAsDelegateHandler.cjs +8 -6
  18. package/dist/core/handler/GetTypeHandler.cjs +10 -2
  19. package/dist/core/handler/Handler.cjs +8 -11
  20. package/dist/core/handler/InvokeGlobalFunctionHandler.cjs +3 -0
  21. package/dist/core/handler/InvokeInstanceMethodHandler.cjs +3 -0
  22. package/dist/core/handler/InvokeStaticMethodHandler.cjs +3 -0
  23. package/dist/core/handler/LoadLibraryHandler.cjs +4 -0
  24. package/dist/core/handler/SetGlobalStaticFieldHandler.cjs +3 -0
  25. package/dist/core/handler/SetInstanceFieldHandler.cjs +3 -0
  26. package/dist/core/handler/SetStaticFieldHandler.cjs +3 -0
  27. package/dist/core/handler/ValueHandler.cjs +4 -0
  28. package/dist/core/interpreter/Interpreter.cjs +28 -12
  29. package/dist/core/namespaceCache/NamespaceCache.cjs +12 -0
  30. package/dist/core/protocol/CommandDeserializer.cjs +10 -2
  31. package/dist/core/protocol/CommandSerializer.cjs +24 -4
  32. package/dist/core/protocol/TypeDeserializer.cjs +35 -0
  33. package/dist/core/protocol/TypeSerializer.cjs +51 -7
  34. package/dist/core/receiver/Receiver.cjs +1 -1
  35. package/dist/core/receiver/ReceiverNative.cjs +6 -0
  36. package/dist/core/transmitter/Transmitter.cjs +18 -2
  37. package/dist/core/transmitter/TransmitterWebsocket.cjs +8 -5
  38. package/dist/core/transmitter/TransmitterWebsocketBrowser.cjs +1 -1
  39. package/dist/core/transmitter/TransmitterWrapper.cjs +25 -8
  40. package/dist/core/typeCache/TypeCache.cjs +8 -0
  41. package/dist/core/webSocketClient/WebSocketClient.cjs +22 -12
  42. package/dist/core/webSocketClient/WebSocketClientBrowser.cjs +2 -2
  43. package/dist/sdk/ConfigRuntimeFactory.cjs +60 -55
  44. package/dist/sdk/InvocationContext.cjs +81 -23
  45. package/dist/sdk/Javonet.cjs +14 -33
  46. package/dist/sdk/RuntimeContext.cjs +85 -30
  47. package/dist/sdk/RuntimeFactory.cjs +3 -0
  48. package/dist/sdk/tools/ActivationHelper.cjs +66 -0
  49. package/dist/sdk/tools/JsonResolver.cjs +214 -0
  50. package/dist/types/core/handler/AbstractHandler.d.ts +23 -4
  51. package/dist/types/core/handler/ArrayGetItemHandler.d.ts +8 -1
  52. package/dist/types/core/handler/ArrayGetRankHandler.d.ts +8 -1
  53. package/dist/types/core/handler/ArrayGetSizeHandler.d.ts +8 -1
  54. package/dist/types/core/handler/ArrayHandler.d.ts +8 -1
  55. package/dist/types/core/handler/ArraySetItemHandler.d.ts +8 -1
  56. package/dist/types/core/handler/CastingHandler.d.ts +4 -0
  57. package/dist/types/core/handler/ConvertTypeHandler.d.ts +8 -4
  58. package/dist/types/core/handler/CreateClassInstanceHandler.d.ts +8 -1
  59. package/dist/types/core/handler/DestructReferenceHandler.d.ts +8 -1
  60. package/dist/types/core/handler/EnableNamespaceHandler.d.ts +8 -1
  61. package/dist/types/core/handler/EnableTypeHandler.d.ts +8 -1
  62. package/dist/types/core/handler/GetGlobalStaticFieldHandler.d.ts +8 -1
  63. package/dist/types/core/handler/GetInstanceFieldHandler.d.ts +8 -1
  64. package/dist/types/core/handler/GetStaticFieldHandler.d.ts +9 -1
  65. package/dist/types/core/handler/GetStaticMethodAsDelegateHandler.d.ts +4 -3
  66. package/dist/types/core/handler/GetTypeHandler.d.ts +17 -8
  67. package/dist/types/core/handler/Handler.d.ts +8 -8
  68. package/dist/types/core/handler/InvokeDelegateHandler.d.ts +4 -0
  69. package/dist/types/core/handler/InvokeGlobalFunctionHandler.d.ts +8 -1
  70. package/dist/types/core/handler/InvokeInstanceMethodHandler.d.ts +8 -1
  71. package/dist/types/core/handler/InvokeStaticMethodHandler.d.ts +8 -1
  72. package/dist/types/core/handler/LoadLibraryHandler.d.ts +8 -3
  73. package/dist/types/core/handler/SetGlobalStaticFieldHandler.d.ts +4 -0
  74. package/dist/types/core/handler/SetInstanceFieldHandler.d.ts +8 -1
  75. package/dist/types/core/handler/SetStaticFieldHandler.d.ts +8 -1
  76. package/dist/types/core/handler/ValueHandler.d.ts +9 -1
  77. package/dist/types/core/interpreter/Interpreter.d.ts +11 -10
  78. package/dist/types/core/namespaceCache/NamespaceCache.d.ts +17 -5
  79. package/dist/types/core/protocol/CommandDeserializer.d.ts +10 -3
  80. package/dist/types/core/protocol/CommandSerializer.d.ts +19 -2
  81. package/dist/types/core/protocol/TypeDeserializer.d.ts +46 -11
  82. package/dist/types/core/protocol/TypeSerializer.d.ts +53 -13
  83. package/dist/types/core/receiver/Receiver.d.ts +2 -2
  84. package/dist/types/core/receiver/ReceiverNative.d.ts +8 -2
  85. package/dist/types/core/transmitter/Transmitter.d.ts +20 -4
  86. package/dist/types/core/transmitter/TransmitterWebsocket.d.ts +8 -4
  87. package/dist/types/core/transmitter/TransmitterWebsocketBrowser.d.ts +4 -7
  88. package/dist/types/core/transmitter/TransmitterWrapper.d.ts +12 -3
  89. package/dist/types/core/typeCache/TypeCache.d.ts +15 -5
  90. package/dist/types/core/webSocketClient/WebSocketClient.d.ts +17 -21
  91. package/dist/types/sdk/ConfigRuntimeFactory.d.ts +9 -6
  92. package/dist/types/sdk/InvocationContext.d.ts +38 -6
  93. package/dist/types/sdk/Javonet.d.ts +12 -7
  94. package/dist/types/sdk/RuntimeContext.d.ts +23 -7
  95. package/dist/types/sdk/RuntimeFactory.d.ts +9 -2
  96. package/dist/types/sdk/tools/ActivationHelper.d.ts +20 -0
  97. package/dist/types/sdk/tools/JsonResolver.d.ts +87 -0
  98. package/dist/types/utils/Command.d.ts +18 -14
  99. package/dist/types/utils/CustomError.d.ts +5 -1
  100. package/dist/types/utils/Runtime.d.ts +1 -2
  101. package/dist/types/utils/RuntimeNameHandler.d.ts +6 -2
  102. package/dist/types/utils/Type.d.ts +1 -0
  103. package/dist/types/utils/TypesHandler.d.ts +16 -0
  104. package/dist/types/utils/UtilsConst.d.ts +32 -0
  105. package/dist/types/utils/connectionData/IConnectionData.d.ts +16 -3
  106. package/dist/types/utils/connectionData/InMemoryConnectionData.d.ts +4 -3
  107. package/dist/types/utils/connectionData/WsConnectionData.d.ts +7 -10
  108. package/dist/types/utils/nodejs/connectionData/TcpConnectionData.d.ts +17 -10
  109. package/dist/utils/Command.cjs +9 -9
  110. package/dist/utils/CustomError.cjs +4 -0
  111. package/dist/utils/RuntimeNameHandler.cjs +1 -1
  112. package/dist/utils/Type.cjs +2 -1
  113. package/dist/utils/TypesHandler.cjs +55 -0
  114. package/dist/utils/UtilsConst.cjs +101 -0
  115. package/dist/utils/connectionData/IConnectionData.cjs +9 -0
  116. package/dist/utils/connectionData/InMemoryConnectionData.cjs +10 -0
  117. package/dist/utils/connectionData/WsConnectionData.cjs +4 -0
  118. package/dist/utils/nodejs/connectionData/TcpConnectionData.cjs +33 -3
  119. package/lib/core/delegatesCache/DelegatesCache.js +1 -0
  120. package/lib/core/handler/AbstractHandler.js +27 -9
  121. package/lib/core/handler/ArrayGetItemHandler.js +9 -1
  122. package/lib/core/handler/ArrayGetRankHandler.js +9 -0
  123. package/lib/core/handler/ArrayGetSizeHandler.js +8 -0
  124. package/lib/core/handler/ArrayHandler.js +8 -0
  125. package/lib/core/handler/ArraySetItemHandler.js +11 -1
  126. package/lib/core/handler/CastingHandler.js +8 -1
  127. package/lib/core/handler/ConvertTypeHandler.js +9 -4
  128. package/lib/core/handler/CreateClassInstanceHandler.js +10 -4
  129. package/lib/core/handler/DestructReferenceHandler.js +8 -0
  130. package/lib/core/handler/EnableNamespaceHandler.js +8 -0
  131. package/lib/core/handler/EnableTypeHandler.js +8 -0
  132. package/lib/core/handler/GetGlobalStaticFieldHandler.js +9 -0
  133. package/lib/core/handler/GetInstanceFieldHandler.js +8 -0
  134. package/lib/core/handler/GetInstanceMethodAsDelegateHandler.js +9 -4
  135. package/lib/core/handler/GetStaticFieldHandler.js +9 -0
  136. package/lib/core/handler/GetStaticMethodAsDelegateHandler.js +8 -7
  137. package/lib/core/handler/GetTypeHandler.js +15 -5
  138. package/lib/core/handler/Handler.js +13 -18
  139. package/lib/core/handler/InvokeDelegateHandler.js +5 -0
  140. package/lib/core/handler/InvokeGlobalFunctionHandler.js +11 -1
  141. package/lib/core/handler/InvokeInstanceMethodHandler.js +8 -0
  142. package/lib/core/handler/InvokeStaticMethodHandler.js +8 -0
  143. package/lib/core/handler/LoadLibraryHandler.js +11 -0
  144. package/lib/core/handler/SetGlobalStaticFieldHandler.js +10 -0
  145. package/lib/core/handler/SetInstanceFieldHandler.js +7 -0
  146. package/lib/core/handler/SetStaticFieldHandler.js +8 -0
  147. package/lib/core/handler/ValueHandler.js +9 -0
  148. package/lib/core/interpreter/Interpreter.js +42 -24
  149. package/lib/core/namespaceCache/NamespaceCache.js +14 -0
  150. package/lib/core/protocol/CommandDeserializer.js +11 -2
  151. package/lib/core/protocol/CommandSerializer.js +40 -9
  152. package/lib/core/protocol/TypeDeserializer.js +36 -0
  153. package/lib/core/protocol/TypeSerializer.js +62 -7
  154. package/lib/core/receiver/Receiver.js +3 -2
  155. package/lib/core/receiver/ReceiverNative.js +8 -0
  156. package/lib/core/transmitter/Transmitter.js +18 -1
  157. package/lib/core/transmitter/TransmitterWebsocket.js +12 -5
  158. package/lib/core/transmitter/TransmitterWebsocketBrowser.js +2 -4
  159. package/lib/core/transmitter/TransmitterWrapper.js +27 -6
  160. package/lib/core/typeCache/TypeCache.js +9 -0
  161. package/lib/core/webSocketClient/WebSocketClient.js +33 -30
  162. package/lib/core/webSocketClient/WebSocketClientBrowser.js +5 -6
  163. package/lib/sdk/ConfigRuntimeFactory.js +70 -68
  164. package/lib/sdk/InvocationContext.js +94 -26
  165. package/lib/sdk/Javonet.js +18 -36
  166. package/lib/sdk/RuntimeContext.js +109 -29
  167. package/lib/sdk/RuntimeFactory.js +7 -0
  168. package/lib/sdk/tools/ActivationHelper.js +51 -0
  169. package/lib/sdk/tools/JsonResolver.js +226 -0
  170. package/lib/types.d.ts +57 -0
  171. package/lib/utils/Command.js +14 -9
  172. package/lib/utils/CustomError.js +5 -0
  173. package/lib/utils/Runtime.js +1 -1
  174. package/lib/utils/RuntimeLogger.js +3 -0
  175. package/lib/utils/RuntimeNameHandler.js +6 -1
  176. package/lib/utils/Type.js +2 -1
  177. package/lib/utils/TypesHandler.js +35 -0
  178. package/lib/utils/UtilsConst.js +88 -0
  179. package/lib/utils/connectionData/IConnectionData.js +14 -0
  180. package/lib/utils/connectionData/InMemoryConnectionData.js +15 -0
  181. package/lib/utils/connectionData/WsConnectionData.js +9 -0
  182. package/lib/utils/nodejs/connectionData/TcpConnectionData.js +35 -5
  183. package/package.json +4 -3
  184. package/dist/sdk/tools/browser/ConfigSourceResolver.cjs +0 -153
  185. package/dist/sdk/tools/nodejs/JsonFileResolver.cjs +0 -120
  186. package/dist/types/sdk/tools/browser/ConfigSourceResolver.d.ts +0 -46
  187. package/dist/types/sdk/tools/nodejs/JsonFileResolver.d.ts +0 -13
  188. package/dist/types/utils/nodejs/TypesConverter.d.ts +0 -48
  189. package/dist/utils/nodejs/TypesConverter.cjs +0 -102
  190. package/lib/declarations.d.ts +0 -35
  191. package/lib/sdk/tools/browser/ConfigSourceResolver.js +0 -146
  192. package/lib/sdk/tools/nodejs/JsonFileResolver.js +0 -106
  193. 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
- // eslint-disable-next-line no-unused-vars
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 | null} */
16
+ /** @type {NamespaceCache} */
13
17
  this.namespaceCache = new NamespaceCache()
14
- /** @type {TypeCache | null} */
18
+ /** @type {TypeCache} */
15
19
  this.typeCache = new TypeCache()
16
- /** @type {LoadLibraryHandler | null} */
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
- let typeToReturn = global[typeName]
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
- let availableTypes = []
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
- * @param {any} response
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
- handlers[CommandType.PassDelegate] = new PassDelegateHandler(interpreter)
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 {{ commandType: number; payload: any[]; runtimeName: number; }} command
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 {number} runtimeName
110
+ * @param {RuntimeName} runtimeName
116
111
  * @returns {Command}
117
112
  */
118
113
  parseCommand(response, runtimeName) {
119
- if (isResponseNull(response) || isResponseSimpleType(response)) {
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, getRuntimeExtension, getRequire, getDirname } from '../../utils/Runtime.js'
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('../receiver/Receiver.js').Receiver} Receiver
12
- * @typedef {import('../transmitter/Transmitter.js').Transmitter} Transmitter
13
- * @typedef {import('../transmitter/TransmitterWebsocket.js').TransmitterWebsocket} TransmitterWebsocket
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
- handler
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
- let responseByteArray
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.sendCommand(messageByteArray)
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.sendCommand(
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.sendCommand(messageByteArray)
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 {WsConnectionData} connectionData
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
- let responseByteArray
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.sendCommand(messageByteArray)
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.sendCommand(messageByteArray, connectionData)
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
- responseByteArray = _Transmitter.sendCommand(messageByteArray)
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 {number[]} messageByteArray
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 type = Object.entries(Type).find((entry) => entry[1] === typeNum)[0]
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()