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,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()
@@ -1,42 +1,73 @@
1
- import { TypeSerializer } from './TypeSerializer.js';
2
- import { Command } from '../../utils/Command.js';
3
- import { RuntimeName } from '../../utils/RuntimeName.js';
1
+ import { TypeSerializer } from './TypeSerializer.js'
2
+ import { ReferencesCache } from '../referenceCache/ReferencesCache.js'
3
+ import { Command } from '../../utils/Command.js'
4
+ import { CommandType } from '../../utils/CommandType.js'
5
+ import { RuntimeName } from '../../utils/RuntimeName.js'
6
+ import { TypesHandler } from '../../utils/TypesHandler.js'
4
7
 
8
+ /**
9
+ * @typedef {import('../../utils/connectionData/IConnectionData.js').IConnectionData} IConnectionData
10
+ */
5
11
  class CommandSerializer {
6
- serialize(rootCommand, connectionData) {
12
+ /**
13
+ * Serializes the root command with connection data and optional runtime version.
14
+ * @param {Command} rootCommand
15
+ * @param {IConnectionData} connectionData
16
+ * @param {number} runtimeVersion
17
+ * @returns {Int8Array}
18
+ */
19
+ serialize(rootCommand, connectionData, runtimeVersion = 0) {
7
20
  const buffers = []
8
- // Write runtime name and a zero byte for runtime version.
9
- buffers.push(Uint8Array.of(rootCommand.runtimeName, 0))
10
21
 
22
+ // Write runtime name and version
23
+ buffers.push(Uint8Array.of(rootCommand.runtimeName, runtimeVersion))
24
+
25
+ // Write connection data or default zeros
11
26
  if (connectionData) {
12
27
  buffers.push(connectionData.serializeConnectionData())
13
28
  } else {
14
29
  buffers.push(Uint8Array.of(0, 0, 0, 0, 0, 0, 0))
15
30
  }
16
31
 
17
- buffers.push(Uint8Array.of(RuntimeName.Nodejs, rootCommand.commandType))
32
+ // Write target runtime and command type
33
+ buffers.push(Uint8Array.of(RuntimeName.Python, rootCommand.commandType))
18
34
 
35
+ // Recursively serialize command and its payload
19
36
  this.serializeRecursively(rootCommand, buffers)
20
37
 
21
38
  return concatenateUint8Arrays(buffers)
22
39
  }
23
40
 
41
+ /**
42
+ * Recursively serializes command payload.
43
+ * @param {Command} command
44
+ * @param {Array<Uint8Array>} buffers
45
+ */
24
46
  serializeRecursively(command, buffers) {
25
47
  for (const item of command.payload) {
26
48
  if (item instanceof Command) {
27
49
  buffers.push(TypeSerializer.serializeCommand(item))
28
50
  this.serializeRecursively(item, buffers)
29
- } else {
51
+ } else if (TypesHandler.isPrimitiveOrNullOrUndefined(item)) {
30
52
  buffers.push(TypeSerializer.serializePrimitive(item))
53
+ } else {
54
+ const cachedReference = ReferencesCache.getInstance().cacheReference(item)
55
+ const refCommand = new Command(RuntimeName.Nodejs, CommandType.Reference, cachedReference)
56
+ buffers.push(TypeSerializer.serializeCommand(refCommand))
57
+ this.serializeRecursively(refCommand, buffers)
31
58
  }
32
59
  }
33
60
  }
34
61
  }
35
62
 
63
+ /**
64
+ * Concatenates multiple Uint8Array buffers into one.
65
+ * @param {Array<Uint8Array>} arrays
66
+ * @returns {Uint8Array}
67
+ */
36
68
  function concatenateUint8Arrays(arrays) {
37
69
  let totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)
38
70
  const result = new Uint8Array(totalLength)
39
-
40
71
  let offset = 0
41
72
  for (const arr of arrays) {
42
73
  result.set(arr, offset)
@@ -1,12 +1,21 @@
1
+ // @ts-check
1
2
  import { Command } from '../../utils/Command.js'
2
3
  import { Buffer } from 'buffer'
3
4
  import { StringEncodingMode } from '../../utils/StringEncodingMode.js'
4
5
 
5
6
  export class TypeDeserializer {
7
+ /**
8
+ * @param {Int8Array} encodedCommand
9
+ * @returns {Command}
10
+ */
6
11
  static deserializeCommand(encodedCommand) {
7
12
  return new Command(encodedCommand[0], encodedCommand[1], [])
8
13
  }
9
14
 
15
+ /**
16
+ * @param {number} stringEncodingMode
17
+ * @param {Int8Array} encodedString
18
+ */
10
19
  static deserializeString(stringEncodingMode, encodedString) {
11
20
  switch (stringEncodingMode) {
12
21
  case StringEncodingMode.ASCII:
@@ -33,6 +42,9 @@ export class TypeDeserializer {
33
42
  }
34
43
  }
35
44
 
45
+ /**
46
+ * @param {Int8Array} encodedInt
47
+ */
36
48
  static deserializeInt(encodedInt) {
37
49
  return (
38
50
  (encodedInt[0] & 0xff) |
@@ -42,34 +54,58 @@ export class TypeDeserializer {
42
54
  )
43
55
  }
44
56
 
57
+ /**
58
+ * @param {Int8Array} encodedBool
59
+ */
45
60
  static deserializeBool(encodedBool) {
46
61
  return encodedBool[0] === 1
47
62
  }
48
63
 
64
+ /**
65
+ * @param {Int8Array} encodedFloat
66
+ */
49
67
  static deserializeFloat(encodedFloat) {
50
68
  return Buffer.from(encodedFloat).readFloatLE()
51
69
  }
52
70
 
71
+ /**
72
+ * @param {Int8Array} encodedByte
73
+ */
53
74
  static deserializeByte(encodedByte) {
54
75
  return Buffer.from(encodedByte).readUint8()
55
76
  }
56
77
 
78
+ /**
79
+ * @param {Int8Array} encodedChar
80
+ */
57
81
  static deserializeChar(encodedChar) {
58
82
  return Buffer.from(encodedChar).readUint8()
59
83
  }
60
84
 
85
+ /**
86
+ * @param {Int8Array} encodedLongLong
87
+ */
61
88
  static deserializeLongLong(encodedLongLong) {
62
89
  return Buffer.from(encodedLongLong).readBigInt64LE()
63
90
  }
64
91
 
92
+ /**
93
+ * @param {Int8Array} encodedDouble
94
+ */
65
95
  static deserializeDouble(encodedDouble) {
66
96
  return Buffer.from(encodedDouble).readDoubleLE()
67
97
  }
68
98
 
99
+ /**
100
+ * @param {Int8Array} encodedULLong
101
+ */
69
102
  static deserializeULLong(encodedULLong) {
70
103
  return Buffer.from(encodedULLong).readBigUInt64LE()
71
104
  }
72
105
 
106
+ /**
107
+ * @param {Int8Array} encodedUInt
108
+ */
73
109
  static deserializeUInt(encodedUInt) {
74
110
  return Buffer.from(encodedUInt).readUIntLE(0, 4)
75
111
  }
@@ -1,3 +1,4 @@
1
+ // @ts-check
1
2
  import { Command } from '../../utils/Command.js'
2
3
  import { Type } from '../../utils/Type.js'
3
4
  import { StringEncodingMode } from '../../utils/StringEncodingMode.js'
@@ -7,42 +8,66 @@ import { CustomError } from '../../utils/CustomError.js'
7
8
  const encoder = new TextEncoder()
8
9
 
9
10
  class TypeSerializer {
11
+ /**
12
+ * @param {unknown} payload_item
13
+ */
10
14
  static serializePrimitive(payload_item) {
11
15
  if (payload_item === null) {
12
16
  return TypeSerializer.serializeNull()
13
17
  }
14
18
  if (payload_item instanceof Command) {
15
19
  return TypeSerializer.serializeCommand(payload_item)
16
- } else if (typeof payload_item === 'number' || payload_item instanceof Number) {
20
+ } else if (typeof payload_item === 'number') {
17
21
  if (Number.isInteger(payload_item)) {
18
22
  return TypeSerializer.serializeInt(payload_item)
19
23
  } else {
20
24
  return TypeSerializer.serializeDouble(payload_item)
21
25
  }
22
- } else if (typeof payload_item === 'string' || payload_item instanceof String) {
26
+ } else if (typeof payload_item === 'string') {
23
27
  return TypeSerializer.serializeString(payload_item)
24
- } else if (typeof payload_item === 'boolean' || payload_item instanceof Boolean) {
28
+ } else if (typeof payload_item === 'boolean') {
25
29
  return TypeSerializer.serializeBool(payload_item)
26
30
  } else {
27
31
  if (payload_item instanceof Promise) {
28
- throw new CustomError('Type not supported - Promise', JSON.stringify(payload_item))
32
+ const message =
33
+ 'Unsupported payload item type: ' +
34
+ (payload_item?.constructor?.name || typeof payload_item) +
35
+ ' for payload item: ' +
36
+ payload_item
37
+ throw new CustomError(message, 'JAVONET_PROMISE')
29
38
  }
30
39
  if (payload_item === undefined) {
31
- throw 'Type not supported - undefined'
40
+ throw Error(
41
+ 'Unsupported payload item type: ' +
42
+ typeof payload_item +
43
+ ' for payload item: ' +
44
+ payload_item
45
+ )
32
46
  }
33
- throw 'Unknown type - not supported in JavaScript'
47
+ throw Error(
48
+ 'Unsupported payload item type: ' +
49
+ (payload_item?.constructor?.name || typeof payload_item) +
50
+ ' for payload item: ' +
51
+ payload_item
52
+ )
34
53
  }
35
54
  }
36
55
 
56
+ /**
57
+ * @param {Command} command
58
+ */
37
59
  static serializeCommand(command) {
38
60
  const buffer = Buffer.alloc(7)
39
61
  buffer.writeUInt8(Type.JAVONET_COMMAND, 0)
40
62
  buffer.fill(Buffer.from(this.serializeIntValue(command.payload.length)), 1, 5)
41
- buffer.writeUInt8(command.runtime, 5)
63
+ buffer.writeUInt8(command.runtimeName, 5)
42
64
  buffer.writeUInt8(command.commandType, 6)
43
65
  return buffer
44
66
  }
45
67
 
68
+ /**
69
+ * @param {string} string_value
70
+ */
46
71
  static serializeString(string_value) {
47
72
  let bytes = encoder.encode(string_value)
48
73
  const buffer = Buffer.alloc(6 + bytes.length)
@@ -53,6 +78,9 @@ class TypeSerializer {
53
78
  return buffer
54
79
  }
55
80
 
81
+ /**
82
+ * @param {number} int_value
83
+ */
56
84
  static serializeInt(int_value) {
57
85
  const buffer = Buffer.alloc(6)
58
86
  buffer.writeUInt8(Type.JAVONET_INTEGER, 0)
@@ -61,6 +89,9 @@ class TypeSerializer {
61
89
  return buffer
62
90
  }
63
91
 
92
+ /**
93
+ * @param {boolean} bool_value
94
+ */
64
95
  static serializeBool(bool_value) {
65
96
  const buffer = Buffer.alloc(3)
66
97
  buffer.writeUInt8(Type.JAVONET_BOOLEAN, 0)
@@ -69,6 +100,9 @@ class TypeSerializer {
69
100
  return buffer
70
101
  }
71
102
 
103
+ /**
104
+ * @param {number} float_value
105
+ */
72
106
  static serializeFloat(float_value) {
73
107
  const buffer = Buffer.alloc(6)
74
108
  buffer.writeUInt8(Type.JAVONET_FLOAT, 0)
@@ -77,6 +111,9 @@ class TypeSerializer {
77
111
  return buffer
78
112
  }
79
113
 
114
+ /**
115
+ * @param {number} byte_value
116
+ */
80
117
  static serializeByte(byte_value) {
81
118
  const buffer = Buffer.alloc(3)
82
119
  buffer.writeUInt8(Type.JAVONET_BYTE, 0)
@@ -85,6 +122,9 @@ class TypeSerializer {
85
122
  return buffer
86
123
  }
87
124
 
125
+ /**
126
+ * @param {number} char_value
127
+ */
88
128
  static serializeChar(char_value) {
89
129
  const buffer = Buffer.alloc(3)
90
130
  buffer.writeUInt8(Type.JAVONET_CHAR, 0)
@@ -93,6 +133,9 @@ class TypeSerializer {
93
133
  return buffer
94
134
  }
95
135
 
136
+ /**
137
+ * @param {number} longlong_value
138
+ */
96
139
  static serializeLongLong(longlong_value) {
97
140
  const buffer = Buffer.alloc(10)
98
141
  buffer.writeUInt8(Type.JAVONET_LONG_LONG, 0)
@@ -101,6 +144,9 @@ class TypeSerializer {
101
144
  return buffer
102
145
  }
103
146
 
147
+ /**
148
+ * @param {number} double_value
149
+ */
104
150
  static serializeDouble(double_value) {
105
151
  const buffer = Buffer.alloc(10)
106
152
  buffer.writeUInt8(Type.JAVONET_DOUBLE, 0)
@@ -109,6 +155,9 @@ class TypeSerializer {
109
155
  return buffer
110
156
  }
111
157
 
158
+ /**
159
+ * @param {bigint} ullong_value
160
+ */
112
161
  static serializeULLong(ullong_value) {
113
162
  const buffer = Buffer.alloc(10)
114
163
  buffer.writeUInt8(Type.JAVONET_UNSIGNED_LONG_LONG, 0)
@@ -117,6 +166,9 @@ class TypeSerializer {
117
166
  return buffer
118
167
  }
119
168
 
169
+ /**
170
+ * @param {number} uint_value
171
+ */
120
172
  static serializeUInt(uint_value) {
121
173
  const buffer = Buffer.alloc(6)
122
174
  buffer.writeUInt8(Type.JAVONET_UNSIGNED_INTEGER, 0)
@@ -133,6 +185,9 @@ class TypeSerializer {
133
185
  return buffer
134
186
  }
135
187
 
188
+ /**
189
+ * @param {number} int_value
190
+ */
136
191
  static serializeIntValue(int_value) {
137
192
  const buffer = Buffer.alloc(4)
138
193
  buffer.writeInt32LE(int_value, 0)
@@ -1,9 +1,10 @@
1
+ // @ts-check
1
2
  import { Interpreter } from '../interpreter/Interpreter.js'
2
3
  import { CommandSerializer } from '../protocol/CommandSerializer.js'
3
4
  import { getRequire } from '../../utils/Runtime.js'
4
5
  import { InMemoryConnectionData } from '../../utils/connectionData/InMemoryConnectionData.js'
5
6
 
6
- /** @type {import('../../utils/RuntimeLogger.js').RuntimeLogger | null} */
7
+ /** @type {typeof import('../../utils/RuntimeLogger.js').RuntimeLogger | null} */
7
8
  let _RuntimeLogger = null
8
9
 
9
10
  const requireDynamic = getRequire(import.meta.url)
@@ -19,7 +20,7 @@ export class Receiver {
19
20
  }
20
21
 
21
22
  /**
22
- * @param {number[]} messageByteArray
23
+ * @param {Int8Array} messageByteArray
23
24
  */
24
25
  static sendCommand(messageByteArray) {
25
26
  return new CommandSerializer().serialize(
@@ -1,13 +1,21 @@
1
+ // @ts-check
1
2
  import { Receiver } from './Receiver.js'
2
3
 
3
4
  export class ReceiverNative {
5
+ /**
6
+ * @param {Int8Array} messageByteArray
7
+ */
4
8
  static sendCommand(messageByteArray) {
5
9
  return Receiver.sendCommand(messageByteArray)
6
10
  }
7
11
 
12
+ /**
13
+ * @param {Int8Array} messageByteArray
14
+ */
8
15
  static heartBeat(messageByteArray) {
9
16
  return Receiver.heartBeat(messageByteArray)
10
17
  }
11
18
  }
12
19
 
20
+ // @ts-expect-error
13
21
  global.ReceiverNative = ReceiverNative
@@ -1,18 +1,35 @@
1
+ // @ts-check
1
2
  import { TransmitterWrapper } from './TransmitterWrapper.js'
2
3
 
3
4
  export class Transmitter {
5
+ /**
6
+ * @param {Int8Array} messageArray
7
+ * @returns {Int8Array}
8
+ */
4
9
  static sendCommand(messageArray) {
5
10
  return TransmitterWrapper.sendCommand(messageArray)
6
11
  }
7
12
 
8
- static activate = function (licenseKey) {
13
+ /**
14
+ * @param {string} licenseKey
15
+ * @returns {void}
16
+ */
17
+ static activate (licenseKey) {
9
18
  return TransmitterWrapper.activate(licenseKey)
10
19
  }
11
20
 
21
+ /**
22
+ * @param {string} configSource
23
+ * @returns {void}
24
+ */
12
25
  static setConfigSource(configSource) {
13
26
  return TransmitterWrapper.setConfigSource(configSource)
14
27
  }
15
28
 
29
+ /**
30
+ * @param {string} workingDirectory
31
+ * @returns
32
+ */
16
33
  static setJavonetWorkingDirectory(workingDirectory) {
17
34
  return TransmitterWrapper.setJavonetWorkingDirectory(workingDirectory)
18
35
  }