node-opcua-address-space 2.51.0

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 (598) hide show
  1. package/.mocharc.yml +12 -0
  2. package/LICENSE +20 -0
  3. package/dist/source/address_space_ts.d.ts +122 -0
  4. package/dist/source/address_space_ts.js +18 -0
  5. package/dist/source/address_space_ts.js.map +1 -0
  6. package/dist/source/continuation_points/continuation_point_manager.d.ts +21 -0
  7. package/dist/source/continuation_points/continuation_point_manager.js +100 -0
  8. package/dist/source/continuation_points/continuation_point_manager.js.map +1 -0
  9. package/dist/source/helpers/adjust_browse_direction.d.ts +5 -0
  10. package/dist/source/helpers/adjust_browse_direction.js +12 -0
  11. package/dist/source/helpers/adjust_browse_direction.js.map +1 -0
  12. package/dist/source/helpers/argument_list.d.ts +30 -0
  13. package/dist/source/helpers/argument_list.js +237 -0
  14. package/dist/source/helpers/argument_list.js.map +1 -0
  15. package/dist/source/helpers/call_helpers.d.ts +6 -0
  16. package/dist/source/helpers/call_helpers.js +71 -0
  17. package/dist/source/helpers/call_helpers.js.map +1 -0
  18. package/dist/source/helpers/check_event_clause.d.ts +17 -0
  19. package/dist/source/helpers/check_event_clause.js +53 -0
  20. package/dist/source/helpers/check_event_clause.js.map +1 -0
  21. package/dist/source/helpers/coerce_enum_value.d.ts +6 -0
  22. package/dist/source/helpers/coerce_enum_value.js +34 -0
  23. package/dist/source/helpers/coerce_enum_value.js.map +1 -0
  24. package/dist/source/helpers/dump_tools.d.ts +14 -0
  25. package/dist/source/helpers/dump_tools.js +79 -0
  26. package/dist/source/helpers/dump_tools.js.map +1 -0
  27. package/dist/source/helpers/ensure_secure_access.d.ts +9 -0
  28. package/dist/source/helpers/ensure_secure_access.js +90 -0
  29. package/dist/source/helpers/ensure_secure_access.js.map +1 -0
  30. package/dist/source/helpers/make_optionals_map.d.ts +21 -0
  31. package/dist/source/helpers/make_optionals_map.js +30 -0
  32. package/dist/source/helpers/make_optionals_map.js.map +1 -0
  33. package/dist/source/helpers/resolve_opaque_on_address_space.d.ts +3 -0
  34. package/dist/source/helpers/resolve_opaque_on_address_space.js +37 -0
  35. package/dist/source/helpers/resolve_opaque_on_address_space.js.map +1 -0
  36. package/dist/source/index.d.ts +39 -0
  37. package/dist/source/index.js +62 -0
  38. package/dist/source/index.js.map +1 -0
  39. package/dist/source/interfaces/alarms_and_conditions/condition_info_i.d.ts +12 -0
  40. package/dist/source/interfaces/alarms_and_conditions/condition_info_i.js +3 -0
  41. package/dist/source/interfaces/alarms_and_conditions/condition_info_i.js.map +1 -0
  42. package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.d.ts +1 -0
  43. package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.js +3 -0
  44. package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.js.map +1 -0
  45. package/dist/source/interfaces/data_access/ua_discrete_item.d.ts +4 -0
  46. package/dist/source/interfaces/data_access/ua_discrete_item.js +3 -0
  47. package/dist/source/interfaces/data_access/ua_discrete_item.js.map +1 -0
  48. package/dist/source/interfaces/data_access/ua_multistate_discrete.d.ts +25 -0
  49. package/dist/source/interfaces/data_access/ua_multistate_discrete.js +3 -0
  50. package/dist/source/interfaces/data_access/ua_multistate_discrete.js.map +1 -0
  51. package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.d.ts +21 -0
  52. package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.js +3 -0
  53. package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.js.map +1 -0
  54. package/dist/source/interfaces/data_access/ua_multistate_value_discrete.d.ts +27 -0
  55. package/dist/source/interfaces/data_access/ua_multistate_value_discrete.js +3 -0
  56. package/dist/source/interfaces/data_access/ua_multistate_value_discrete.js.map +1 -0
  57. package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.d.ts +24 -0
  58. package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.js +3 -0
  59. package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.js.map +1 -0
  60. package/dist/source/interfaces/data_access/ua_two_state_discrete.d.ts +17 -0
  61. package/dist/source/interfaces/data_access/ua_two_state_discrete.js +3 -0
  62. package/dist/source/interfaces/data_access/ua_two_state_discrete.js.map +1 -0
  63. package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.d.ts +12 -0
  64. package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.js +3 -0
  65. package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.js.map +1 -0
  66. package/dist/source/interfaces/data_access/ua_y_array_item.d.ts +4 -0
  67. package/dist/source/interfaces/data_access/ua_y_array_item.js +3 -0
  68. package/dist/source/interfaces/data_access/ua_y_array_item.js.map +1 -0
  69. package/dist/source/interfaces/data_access/ua_y_array_item_ex.d.ts +8 -0
  70. package/dist/source/interfaces/data_access/ua_y_array_item_ex.js +3 -0
  71. package/dist/source/interfaces/data_access/ua_y_array_item_ex.js.map +1 -0
  72. package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.d.ts +11 -0
  73. package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.js +3 -0
  74. package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.js.map +1 -0
  75. package/dist/source/interfaces/state_machine/finite_state_machine.d.ts +69 -0
  76. package/dist/source/interfaces/state_machine/finite_state_machine.js +3 -0
  77. package/dist/source/interfaces/state_machine/finite_state_machine.js.map +1 -0
  78. package/dist/source/interfaces/state_machine/program_finite_state_machine.d.ts +74 -0
  79. package/dist/source/interfaces/state_machine/program_finite_state_machine.js +3 -0
  80. package/dist/source/interfaces/state_machine/program_finite_state_machine.js.map +1 -0
  81. package/dist/source/interfaces/state_machine/state_machine.d.ts +342 -0
  82. package/dist/source/interfaces/state_machine/state_machine.js +3 -0
  83. package/dist/source/interfaces/state_machine/state_machine.js.map +1 -0
  84. package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.d.ts +12 -0
  85. package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.js +3 -0
  86. package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.js.map +1 -0
  87. package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.d.ts +49 -0
  88. package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.js +3 -0
  89. package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.js.map +1 -0
  90. package/dist/source/interfaces/state_machine/ua_finite_state_variable.d.ts +18 -0
  91. package/dist/source/interfaces/state_machine/ua_finite_state_variable.js +3 -0
  92. package/dist/source/interfaces/state_machine/ua_finite_state_variable.js.map +1 -0
  93. package/dist/source/interfaces/state_machine/ua_program_state_machine_type.d.ts +11 -0
  94. package/dist/source/interfaces/state_machine/ua_program_state_machine_type.js +3 -0
  95. package/dist/source/interfaces/state_machine/ua_program_state_machine_type.js.map +1 -0
  96. package/dist/source/interfaces/state_machine/ua_state_machine_type.d.ts +222 -0
  97. package/dist/source/interfaces/state_machine/ua_state_machine_type.js +3 -0
  98. package/dist/source/interfaces/state_machine/ua_state_machine_type.js.map +1 -0
  99. package/dist/source/interfaces/state_machine/ua_state_variable.d.ts +29 -0
  100. package/dist/source/interfaces/state_machine/ua_state_variable.js +3 -0
  101. package/dist/source/interfaces/state_machine/ua_state_variable.js.map +1 -0
  102. package/dist/source/interfaces/state_machine/ua_transition_ex.d.ts +6 -0
  103. package/dist/source/interfaces/state_machine/ua_transition_ex.js +3 -0
  104. package/dist/source/interfaces/state_machine/ua_transition_ex.js.map +1 -0
  105. package/dist/source/interfaces/state_machine/ua_two_state_variable.d.ts +26 -0
  106. package/dist/source/interfaces/state_machine/ua_two_state_variable.js +3 -0
  107. package/dist/source/interfaces/state_machine/ua_two_state_variable.js.map +1 -0
  108. package/dist/source/interfaces/subscription_diagnostics_variable.d.ts +41 -0
  109. package/dist/source/interfaces/subscription_diagnostics_variable.js +3 -0
  110. package/dist/source/interfaces/subscription_diagnostics_variable.js.map +1 -0
  111. package/dist/source/interfaces/ua_authorisation_service.d.ts +1 -0
  112. package/dist/source/interfaces/ua_authorisation_service.js +3 -0
  113. package/dist/source/interfaces/ua_authorisation_service.js.map +1 -0
  114. package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.d.ts +8 -0
  115. package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.js +3 -0
  116. package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.js.map +1 -0
  117. package/dist/source/loader/generateAddressSpaceRaw.d.ts +10 -0
  118. package/dist/source/loader/generateAddressSpaceRaw.js +59 -0
  119. package/dist/source/loader/generateAddressSpaceRaw.js.map +1 -0
  120. package/dist/source/loader/load_nodeset2.d.ts +13 -0
  121. package/dist/source/loader/load_nodeset2.js +1392 -0
  122. package/dist/source/loader/load_nodeset2.js.map +1 -0
  123. package/dist/source/loader/namespace_post_step.d.ts +6 -0
  124. package/dist/source/loader/namespace_post_step.js +48 -0
  125. package/dist/source/loader/namespace_post_step.js.map +1 -0
  126. package/dist/source/loader/register_node_promoter.d.ts +3 -0
  127. package/dist/source/loader/register_node_promoter.js +10 -0
  128. package/dist/source/loader/register_node_promoter.js.map +1 -0
  129. package/dist/source/namespace.d.ts +6 -0
  130. package/dist/source/namespace.js +3 -0
  131. package/dist/source/namespace.js.map +1 -0
  132. package/dist/source/namespace_alarm_and_condition.d.ts +24 -0
  133. package/dist/source/namespace_alarm_and_condition.js +3 -0
  134. package/dist/source/namespace_alarm_and_condition.js.map +1 -0
  135. package/dist/source/namespace_data_access.d.ts +42 -0
  136. package/dist/source/namespace_data_access.js +3 -0
  137. package/dist/source/namespace_data_access.js.map +1 -0
  138. package/dist/source/namespace_machine_state.d.ts +7 -0
  139. package/dist/source/namespace_machine_state.js +3 -0
  140. package/dist/source/namespace_machine_state.js.map +1 -0
  141. package/dist/source/pseudo_session.d.ts +55 -0
  142. package/dist/source/pseudo_session.js +205 -0
  143. package/dist/source/pseudo_session.js.map +1 -0
  144. package/dist/source/session_context.d.ts +111 -0
  145. package/dist/source/session_context.js +266 -0
  146. package/dist/source/session_context.js.map +1 -0
  147. package/dist/source/set_namespace_meta_data.d.ts +2 -0
  148. package/dist/source/set_namespace_meta_data.js +60 -0
  149. package/dist/source/set_namespace_meta_data.js.map +1 -0
  150. package/dist/source/ua_namespace_meta_data_type.d.ts +71 -0
  151. package/dist/source/ua_namespace_meta_data_type.js +3 -0
  152. package/dist/source/ua_namespace_meta_data_type.js.map +1 -0
  153. package/dist/source/ua_root_folder.d.ts +9 -0
  154. package/dist/source/ua_root_folder.js +3 -0
  155. package/dist/source/ua_root_folder.js.map +1 -0
  156. package/dist/source/ua_two_state_variable_ex.d.ts +23 -0
  157. package/dist/source/ua_two_state_variable_ex.js +3 -0
  158. package/dist/source/ua_two_state_variable_ex.js.map +1 -0
  159. package/dist/source/xml_writer.d.ts +9 -0
  160. package/dist/source/xml_writer.js +3 -0
  161. package/dist/source/xml_writer.js.map +1 -0
  162. package/dist/src/address_space.d.ts +393 -0
  163. package/dist/src/address_space.js +1375 -0
  164. package/dist/src/address_space.js.map +1 -0
  165. package/dist/src/address_space_change_event_tools.d.ts +6 -0
  166. package/dist/src/address_space_change_event_tools.js +150 -0
  167. package/dist/src/address_space_change_event_tools.js.map +1 -0
  168. package/dist/src/address_space_private.d.ts +44 -0
  169. package/dist/src/address_space_private.js +3 -0
  170. package/dist/src/address_space_private.js.map +1 -0
  171. package/dist/src/alarms_and_conditions/base_event_type.d.ts +26 -0
  172. package/dist/src/alarms_and_conditions/base_event_type.js +41 -0
  173. package/dist/src/alarms_and_conditions/base_event_type.js.map +1 -0
  174. package/dist/src/alarms_and_conditions/check_where_clause.d.ts +4 -0
  175. package/dist/src/alarms_and_conditions/check_where_clause.js +110 -0
  176. package/dist/src/alarms_and_conditions/check_where_clause.js.map +1 -0
  177. package/dist/src/alarms_and_conditions/condition.d.ts +5 -0
  178. package/dist/src/alarms_and_conditions/condition.js +81 -0
  179. package/dist/src/alarms_and_conditions/condition.js.map +1 -0
  180. package/dist/src/alarms_and_conditions/condition_info.d.ts +27 -0
  181. package/dist/src/alarms_and_conditions/condition_info.js +55 -0
  182. package/dist/src/alarms_and_conditions/condition_info.js.map +1 -0
  183. package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +232 -0
  184. package/dist/src/alarms_and_conditions/condition_snapshot.js +667 -0
  185. package/dist/src/alarms_and_conditions/condition_snapshot.js.map +1 -0
  186. package/dist/src/alarms_and_conditions/deviation_alarm_helper.d.ts +21 -0
  187. package/dist/src/alarms_and_conditions/deviation_alarm_helper.js +47 -0
  188. package/dist/src/alarms_and_conditions/deviation_alarm_helper.js.map +1 -0
  189. package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +10 -0
  190. package/dist/src/alarms_and_conditions/extract_event_fields.js +90 -0
  191. package/dist/src/alarms_and_conditions/extract_event_fields.js.map +1 -0
  192. package/dist/src/alarms_and_conditions/index.d.ts +18 -0
  193. package/dist/src/alarms_and_conditions/index.js +31 -0
  194. package/dist/src/alarms_and_conditions/index.js.map +1 -0
  195. package/dist/src/alarms_and_conditions/shelving_state_machine.d.ts +22 -0
  196. package/dist/src/alarms_and_conditions/shelving_state_machine.js +241 -0
  197. package/dist/src/alarms_and_conditions/shelving_state_machine.js.map +1 -0
  198. package/dist/src/alarms_and_conditions/trip_alarm.d.ts +16 -0
  199. package/dist/src/alarms_and_conditions/trip_alarm.js +21 -0
  200. package/dist/src/alarms_and_conditions/trip_alarm.js.map +1 -0
  201. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.d.ts +54 -0
  202. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.js +255 -0
  203. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.js.map +1 -0
  204. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.d.ts +62 -0
  205. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js +244 -0
  206. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js.map +1 -0
  207. package/dist/src/alarms_and_conditions/ua_alarm_condition_base.d.ts +138 -0
  208. package/dist/src/alarms_and_conditions/ua_alarm_condition_base.js +460 -0
  209. package/dist/src/alarms_and_conditions/ua_alarm_condition_base.js.map +1 -0
  210. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.d.ts +118 -0
  211. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js +417 -0
  212. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js.map +1 -0
  213. package/dist/src/alarms_and_conditions/ua_base_event_impl.d.ts +29 -0
  214. package/dist/src/alarms_and_conditions/ua_base_event_impl.js +39 -0
  215. package/dist/src/alarms_and_conditions/ua_base_event_impl.js.map +1 -0
  216. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.d.ts +35 -0
  217. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.js +32 -0
  218. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.js.map +1 -0
  219. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.d.ts +21 -0
  220. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js +26 -0
  221. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js.map +1 -0
  222. package/dist/src/alarms_and_conditions/ua_condition_base.d.ts +191 -0
  223. package/dist/src/alarms_and_conditions/ua_condition_base.js +1029 -0
  224. package/dist/src/alarms_and_conditions/ua_condition_base.js.map +1 -0
  225. package/dist/src/alarms_and_conditions/ua_condition_impl.d.ts +182 -0
  226. package/dist/src/alarms_and_conditions/ua_condition_impl.js +1021 -0
  227. package/dist/src/alarms_and_conditions/ua_condition_impl.js.map +1 -0
  228. package/dist/src/alarms_and_conditions/ua_discrete_alarm.d.ts +11 -0
  229. package/dist/src/alarms_and_conditions/ua_discrete_alarm.js +58 -0
  230. package/dist/src/alarms_and_conditions/ua_discrete_alarm.js.map +1 -0
  231. package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.d.ts +17 -0
  232. package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js +58 -0
  233. package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js.map +1 -0
  234. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.d.ts +24 -0
  235. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.js +59 -0
  236. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.js.map +1 -0
  237. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.d.ts +27 -0
  238. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js +57 -0
  239. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js.map +1 -0
  240. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.d.ts +14 -0
  241. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.js +17 -0
  242. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.js.map +1 -0
  243. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.d.ts +9 -0
  244. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js +12 -0
  245. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js.map +1 -0
  246. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.d.ts +22 -0
  247. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.js +87 -0
  248. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.js.map +1 -0
  249. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.d.ts +38 -0
  250. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js +87 -0
  251. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js.map +1 -0
  252. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.d.ts +6 -0
  253. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.js +11 -0
  254. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.js.map +1 -0
  255. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.d.ts +10 -0
  256. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.js +8 -0
  257. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.js.map +1 -0
  258. package/dist/src/alarms_and_conditions/ua_limit_alarm.d.ts +76 -0
  259. package/dist/src/alarms_and_conditions/ua_limit_alarm.js +237 -0
  260. package/dist/src/alarms_and_conditions/ua_limit_alarm.js.map +1 -0
  261. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +98 -0
  262. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js +233 -0
  263. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js.map +1 -0
  264. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.d.ts +27 -0
  265. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.js +62 -0
  266. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.js.map +1 -0
  267. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.d.ts +28 -0
  268. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js +51 -0
  269. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js.map +1 -0
  270. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.d.ts +49 -0
  271. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.js +176 -0
  272. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.js.map +1 -0
  273. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.d.ts +25 -0
  274. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js +163 -0
  275. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js.map +1 -0
  276. package/dist/src/alarms_and_conditions/ua_off_normal_alarm.d.ts +47 -0
  277. package/dist/src/alarms_and_conditions/ua_off_normal_alarm.js +151 -0
  278. package/dist/src/alarms_and_conditions/ua_off_normal_alarm.js.map +1 -0
  279. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.d.ts +39 -0
  280. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js +136 -0
  281. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js.map +1 -0
  282. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.d.ts +16 -0
  283. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.js +18 -0
  284. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.js.map +1 -0
  285. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.d.ts +16 -0
  286. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js +18 -0
  287. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js.map +1 -0
  288. package/dist/src/apply_condition_refresh.d.ts +6 -0
  289. package/dist/src/apply_condition_refresh.js +28 -0
  290. package/dist/src/apply_condition_refresh.js.map +1 -0
  291. package/dist/src/base_node.d.ts +279 -0
  292. package/dist/src/base_node.js +1364 -0
  293. package/dist/src/base_node.js.map +1 -0
  294. package/dist/src/base_node_impl.d.ts +281 -0
  295. package/dist/src/base_node_impl.js +1394 -0
  296. package/dist/src/base_node_impl.js.map +1 -0
  297. package/dist/src/base_node_private.d.ts +61 -0
  298. package/dist/src/base_node_private.js +521 -0
  299. package/dist/src/base_node_private.js.map +1 -0
  300. package/dist/src/data_access/add_dataItem_stuff.d.ts +11 -0
  301. package/dist/src/data_access/add_dataItem_stuff.js +62 -0
  302. package/dist/src/data_access/add_dataItem_stuff.js.map +1 -0
  303. package/dist/src/data_access/check_variant_compatibility_ua_analog_item.d.ts +1 -0
  304. package/dist/src/data_access/check_variant_compatibility_ua_analog_item.js +35 -0
  305. package/dist/src/data_access/check_variant_compatibility_ua_analog_item.js.map +1 -0
  306. package/dist/src/data_access/ua_analog_item.d.ts +13 -0
  307. package/dist/src/data_access/ua_analog_item.js +37 -0
  308. package/dist/src/data_access/ua_analog_item.js.map +1 -0
  309. package/dist/src/data_access/ua_data_item.d.ts +16 -0
  310. package/dist/src/data_access/ua_data_item.js +66 -0
  311. package/dist/src/data_access/ua_data_item.js.map +1 -0
  312. package/dist/src/data_access/ua_multistate_discrete.d.ts +23 -0
  313. package/dist/src/data_access/ua_multistate_discrete.js +131 -0
  314. package/dist/src/data_access/ua_multistate_discrete.js.map +1 -0
  315. package/dist/src/data_access/ua_multistate_discrete_impl.d.ts +32 -0
  316. package/dist/src/data_access/ua_multistate_discrete_impl.js +131 -0
  317. package/dist/src/data_access/ua_multistate_discrete_impl.js.map +1 -0
  318. package/dist/src/data_access/ua_multistate_value_discrete.d.ts +51 -0
  319. package/dist/src/data_access/ua_multistate_value_discrete.js +249 -0
  320. package/dist/src/data_access/ua_multistate_value_discrete.js.map +1 -0
  321. package/dist/src/data_access/ua_two_state_discrete.d.ts +25 -0
  322. package/dist/src/data_access/ua_two_state_discrete.js +154 -0
  323. package/dist/src/data_access/ua_two_state_discrete.js.map +1 -0
  324. package/dist/src/event_data.d.ts +29 -0
  325. package/dist/src/event_data.js +96 -0
  326. package/dist/src/event_data.js.map +1 -0
  327. package/dist/src/extension_object_array_node.d.ts +61 -0
  328. package/dist/src/extension_object_array_node.js +266 -0
  329. package/dist/src/extension_object_array_node.js.map +1 -0
  330. package/dist/src/historical_access/address_space_historical_data_node.d.ts +26 -0
  331. package/dist/src/historical_access/address_space_historical_data_node.js +662 -0
  332. package/dist/src/historical_access/address_space_historical_data_node.js.map +1 -0
  333. package/dist/src/index_current.d.ts +42 -0
  334. package/dist/src/index_current.js +71 -0
  335. package/dist/src/index_current.js.map +1 -0
  336. package/dist/src/namespace.d.ts +475 -0
  337. package/dist/src/namespace.js +1775 -0
  338. package/dist/src/namespace.js.map +1 -0
  339. package/dist/src/namespace_impl.d.ts +463 -0
  340. package/dist/src/namespace_impl.js +1763 -0
  341. package/dist/src/namespace_impl.js.map +1 -0
  342. package/dist/src/namespace_private.d.ts +21 -0
  343. package/dist/src/namespace_private.js +29 -0
  344. package/dist/src/namespace_private.js.map +1 -0
  345. package/dist/src/nodeid_manager.d.ts +36 -0
  346. package/dist/src/nodeid_manager.js +196 -0
  347. package/dist/src/nodeid_manager.js.map +1 -0
  348. package/dist/src/nodeset_tools/adjust_namespace_array.d.ts +2 -0
  349. package/dist/src/nodeset_tools/adjust_namespace_array.js +14 -0
  350. package/dist/src/nodeset_tools/adjust_namespace_array.js.map +1 -0
  351. package/dist/src/nodeset_tools/construct_namespace_dependency.d.ts +2 -0
  352. package/dist/src/nodeset_tools/construct_namespace_dependency.js +39 -0
  353. package/dist/src/nodeset_tools/construct_namespace_dependency.js.map +1 -0
  354. package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +2 -0
  355. package/dist/src/nodeset_tools/nodeset_to_xml.js +1155 -0
  356. package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -0
  357. package/dist/src/nodeset_tools/typedictionary_to_xml.d.ts +2 -0
  358. package/dist/src/nodeset_tools/typedictionary_to_xml.js +147 -0
  359. package/dist/src/nodeset_tools/typedictionary_to_xml.js.map +1 -0
  360. package/dist/src/reference.d.ts +43 -0
  361. package/dist/src/reference.js +138 -0
  362. package/dist/src/reference.js.map +1 -0
  363. package/dist/src/reference_impl.d.ts +43 -0
  364. package/dist/src/reference_impl.js +138 -0
  365. package/dist/src/reference_impl.js.map +1 -0
  366. package/dist/src/role_permissions.d.ts +2 -0
  367. package/dist/src/role_permissions.js +11 -0
  368. package/dist/src/role_permissions.js.map +1 -0
  369. package/dist/src/session_context.d.ts +4 -0
  370. package/dist/src/session_context.js +9 -0
  371. package/dist/src/session_context.js.map +1 -0
  372. package/dist/src/state_machine/finite_state_machine.d.ts +67 -0
  373. package/dist/src/state_machine/finite_state_machine.js +354 -0
  374. package/dist/src/state_machine/finite_state_machine.js.map +1 -0
  375. package/dist/src/state_machine/ua_shelving_state_machine_ex.d.ts +34 -0
  376. package/dist/src/state_machine/ua_shelving_state_machine_ex.js +244 -0
  377. package/dist/src/state_machine/ua_shelving_state_machine_ex.js.map +1 -0
  378. package/dist/src/state_machine/ua_two_state_variable.d.ts +61 -0
  379. package/dist/src/state_machine/ua_two_state_variable.js +332 -0
  380. package/dist/src/state_machine/ua_two_state_variable.js.map +1 -0
  381. package/dist/src/tool_isSupertypeOf.d.ts +17 -0
  382. package/dist/src/tool_isSupertypeOf.js +103 -0
  383. package/dist/src/tool_isSupertypeOf.js.map +1 -0
  384. package/dist/src/ua_condition_type.d.ts +8 -0
  385. package/dist/src/ua_condition_type.js +3 -0
  386. package/dist/src/ua_condition_type.js.map +1 -0
  387. package/dist/src/ua_data_type.d.ts +83 -0
  388. package/dist/src/ua_data_type.js +289 -0
  389. package/dist/src/ua_data_type.js.map +1 -0
  390. package/dist/src/ua_data_type_impl.d.ts +83 -0
  391. package/dist/src/ua_data_type_impl.js +291 -0
  392. package/dist/src/ua_data_type_impl.js.map +1 -0
  393. package/dist/src/ua_method.d.ts +42 -0
  394. package/dist/src/ua_method.js +204 -0
  395. package/dist/src/ua_method.js.map +1 -0
  396. package/dist/src/ua_method_impl.d.ts +40 -0
  397. package/dist/src/ua_method_impl.js +203 -0
  398. package/dist/src/ua_method_impl.js.map +1 -0
  399. package/dist/src/ua_object.d.ts +29 -0
  400. package/dist/src/ua_object.js +153 -0
  401. package/dist/src/ua_object.js.map +1 -0
  402. package/dist/src/ua_object_impl.d.ts +29 -0
  403. package/dist/src/ua_object_impl.js +156 -0
  404. package/dist/src/ua_object_impl.js.map +1 -0
  405. package/dist/src/ua_object_type.d.ts +49 -0
  406. package/dist/src/ua_object_type.js +124 -0
  407. package/dist/src/ua_object_type.js.map +1 -0
  408. package/dist/src/ua_object_type_impl.d.ts +48 -0
  409. package/dist/src/ua_object_type_impl.js +124 -0
  410. package/dist/src/ua_object_type_impl.js.map +1 -0
  411. package/dist/src/ua_reference_type.d.ts +42 -0
  412. package/dist/src/ua_reference_type.js +138 -0
  413. package/dist/src/ua_reference_type.js.map +1 -0
  414. package/dist/src/ua_reference_type_impl.d.ts +43 -0
  415. package/dist/src/ua_reference_type_impl.js +138 -0
  416. package/dist/src/ua_reference_type_impl.js.map +1 -0
  417. package/dist/src/ua_variable.d.ts +346 -0
  418. package/dist/src/ua_variable.js +1721 -0
  419. package/dist/src/ua_variable.js.map +1 -0
  420. package/dist/src/ua_variable_impl.d.ts +353 -0
  421. package/dist/src/ua_variable_impl.js +1719 -0
  422. package/dist/src/ua_variable_impl.js.map +1 -0
  423. package/dist/src/ua_variable_type.d.ts +54 -0
  424. package/dist/src/ua_variable_type.js +555 -0
  425. package/dist/src/ua_variable_type.js.map +1 -0
  426. package/dist/src/ua_variable_type_impl.d.ts +63 -0
  427. package/dist/src/ua_variable_type_impl.js +556 -0
  428. package/dist/src/ua_variable_type_impl.js.map +1 -0
  429. package/dist/src/ua_view.d.ts +16 -0
  430. package/dist/src/ua_view.js +42 -0
  431. package/dist/src/ua_view.js.map +1 -0
  432. package/dist/src/ua_view_impl.d.ts +15 -0
  433. package/dist/src/ua_view_impl.js +37 -0
  434. package/dist/src/ua_view_impl.js.map +1 -0
  435. package/distHelpers/add_event_generator_object.d.ts +3 -0
  436. package/distHelpers/add_event_generator_object.js +66 -0
  437. package/distHelpers/add_event_generator_object.js.map +1 -0
  438. package/distHelpers/alarms_and_conditions_demo.d.ts +10 -0
  439. package/distHelpers/alarms_and_conditions_demo.js +115 -0
  440. package/distHelpers/alarms_and_conditions_demo.js.map +1 -0
  441. package/distHelpers/assertHasMatchingReference.d.ts +19 -0
  442. package/distHelpers/assertHasMatchingReference.js +41 -0
  443. package/distHelpers/assertHasMatchingReference.js.map +1 -0
  444. package/distHelpers/boiler_system.d.ts +113 -0
  445. package/distHelpers/boiler_system.js +397 -0
  446. package/distHelpers/boiler_system.js.map +1 -0
  447. package/distHelpers/create_minimalist_address_space_nodeset.d.ts +5 -0
  448. package/distHelpers/create_minimalist_address_space_nodeset.js +171 -0
  449. package/distHelpers/create_minimalist_address_space_nodeset.js.map +1 -0
  450. package/distHelpers/dump_statemachine.d.ts +6 -0
  451. package/distHelpers/dump_statemachine.js +116 -0
  452. package/distHelpers/dump_statemachine.js.map +1 -0
  453. package/distHelpers/get_address_space_fixture.d.ts +1 -0
  454. package/distHelpers/get_address_space_fixture.js +31 -0
  455. package/distHelpers/get_address_space_fixture.js.map +1 -0
  456. package/distHelpers/get_mini_address_space.d.ts +7 -0
  457. package/distHelpers/get_mini_address_space.js +37 -0
  458. package/distHelpers/get_mini_address_space.js.map +1 -0
  459. package/distHelpers/index.d.ts +11 -0
  460. package/distHelpers/index.js +24 -0
  461. package/distHelpers/index.js.map +1 -0
  462. package/distNodeJS/generate_address_space.d.ts +4 -0
  463. package/distNodeJS/generate_address_space.js +31 -0
  464. package/distNodeJS/generate_address_space.js.map +1 -0
  465. package/distNodeJS/index.d.ts +1 -0
  466. package/distNodeJS/index.js +14 -0
  467. package/distNodeJS/index.js.map +1 -0
  468. package/generate.js +1 -0
  469. package/nodeJS.d.ts +1 -0
  470. package/nodeJS.js +1 -0
  471. package/package.json +87 -0
  472. package/source/address_space_ts.ts +217 -0
  473. package/source/continuation_points/continuation_point_manager.ts +121 -0
  474. package/source/helpers/adjust_browse_direction.ts +15 -0
  475. package/source/helpers/argument_list.ts +286 -0
  476. package/source/helpers/call_helpers.ts +112 -0
  477. package/source/helpers/check_event_clause.ts +62 -0
  478. package/source/helpers/coerce_enum_value.ts +33 -0
  479. package/source/helpers/dump_tools.ts +92 -0
  480. package/source/helpers/ensure_secure_access.ts +88 -0
  481. package/source/helpers/make_optionals_map.ts +49 -0
  482. package/source/helpers/resolve_opaque_on_address_space.ts +23 -0
  483. package/source/index.ts +49 -0
  484. package/source/interfaces/alarms_and_conditions/condition_info_i.ts +13 -0
  485. package/source/interfaces/data_access/ua_multistate_discrete_ex.ts +26 -0
  486. package/source/interfaces/data_access/ua_multistate_value_discrete_ex.ts +34 -0
  487. package/source/interfaces/data_access/ua_two_state_discrete_ex.ts +14 -0
  488. package/source/interfaces/data_access/ua_y_array_item_ex.ts +10 -0
  489. package/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.ts +14 -0
  490. package/source/interfaces/state_machine/ua_finite_state_machine_type.ts +50 -0
  491. package/source/interfaces/state_machine/ua_program_state_machine_type.ts +13 -0
  492. package/source/interfaces/state_machine/ua_state_machine_type.ts +261 -0
  493. package/source/interfaces/state_machine/ua_transition_ex.ts +7 -0
  494. package/source/interfaces/ua_subscription_diagnostics_variable_ex.ts +8 -0
  495. package/source/loader/generateAddressSpaceRaw.ts +79 -0
  496. package/source/loader/load_nodeset2.ts +1600 -0
  497. package/source/loader/namespace_post_step.ts +36 -0
  498. package/source/loader/register_node_promoter.ts +8 -0
  499. package/source/namespace.ts +9 -0
  500. package/source/namespace_alarm_and_condition.ts +47 -0
  501. package/source/namespace_data_access.ts +60 -0
  502. package/source/namespace_machine_state.ts +13 -0
  503. package/source/pseudo_session.ts +288 -0
  504. package/source/session_context.ts +345 -0
  505. package/source/set_namespace_meta_data.ts +68 -0
  506. package/source/ua_root_folder.ts +10 -0
  507. package/source/ua_two_state_variable_ex.ts +35 -0
  508. package/source/xml_writer.ts +15 -0
  509. package/source_nodejs/generate_address_space.ts +36 -0
  510. package/source_nodejs/index.ts +1 -0
  511. package/src/address_space.ts +1575 -0
  512. package/src/address_space_change_event_tools.ts +177 -0
  513. package/src/address_space_private.ts +98 -0
  514. package/src/alarms_and_conditions/check_where_clause.ts +148 -0
  515. package/src/alarms_and_conditions/condition.ts +89 -0
  516. package/src/alarms_and_conditions/condition_info.ts +66 -0
  517. package/src/alarms_and_conditions/condition_snapshot.ts +766 -0
  518. package/src/alarms_and_conditions/deviation_alarm_helper.ts +66 -0
  519. package/src/alarms_and_conditions/extract_event_fields.ts +104 -0
  520. package/src/alarms_and_conditions/index.ts +18 -0
  521. package/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.ts +339 -0
  522. package/src/alarms_and_conditions/ua_alarm_condition_impl.ts +513 -0
  523. package/src/alarms_and_conditions/ua_base_event_impl.ts +55 -0
  524. package/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.ts +50 -0
  525. package/src/alarms_and_conditions/ua_condition_impl.ts +1298 -0
  526. package/src/alarms_and_conditions/ua_discrete_alarm_impl.ts +81 -0
  527. package/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.ts +110 -0
  528. package/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.ts +19 -0
  529. package/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.ts +130 -0
  530. package/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.ts +24 -0
  531. package/src/alarms_and_conditions/ua_limit_alarm_impl.ts +305 -0
  532. package/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.ts +108 -0
  533. package/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.ts +224 -0
  534. package/src/alarms_and_conditions/ua_off_normal_alarm_impl.ts +186 -0
  535. package/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.ts +27 -0
  536. package/src/apply_condition_refresh.ts +30 -0
  537. package/src/base_node_impl.ts +1749 -0
  538. package/src/base_node_private.ts +690 -0
  539. package/src/data_access/add_dataItem_stuff.ts +75 -0
  540. package/src/data_access/check_variant_compatibility_ua_analog_item.ts +41 -0
  541. package/src/data_access/ua_multistate_discrete_impl.ts +168 -0
  542. package/src/data_access/ua_multistate_value_discrete.ts +299 -0
  543. package/src/data_access/ua_two_state_discrete.ts +185 -0
  544. package/src/event_data.ts +117 -0
  545. package/src/extension_object_array_node.ts +325 -0
  546. package/src/historical_access/address_space_historical_data_node.ts +828 -0
  547. package/src/index_current.ts +52 -0
  548. package/src/namespace_impl.ts +2181 -0
  549. package/src/namespace_private.ts +60 -0
  550. package/src/nodeid_manager.ts +228 -0
  551. package/src/nodeset_tools/adjust_namespace_array.ts +11 -0
  552. package/src/nodeset_tools/construct_namespace_dependency.ts +40 -0
  553. package/src/nodeset_tools/nodeset_to_xml.ts +1317 -0
  554. package/src/nodeset_tools/typedictionary_to_xml.ts +175 -0
  555. package/src/reference_impl.ts +169 -0
  556. package/src/role_permissions.ts +6 -0
  557. package/src/state_machine/finite_state_machine.ts +428 -0
  558. package/src/state_machine/ua_shelving_state_machine_ex.ts +314 -0
  559. package/src/state_machine/ua_two_state_variable.ts +421 -0
  560. package/src/tool_isSupertypeOf.ts +129 -0
  561. package/src/ua_condition_type.ts +10 -0
  562. package/src/ua_data_type_impl.ts +356 -0
  563. package/src/ua_method_impl.ts +278 -0
  564. package/src/ua_object_impl.ts +203 -0
  565. package/src/ua_object_type_impl.ts +158 -0
  566. package/src/ua_reference_type_impl.ts +174 -0
  567. package/src/ua_variable_impl.ts +2277 -0
  568. package/src/ua_variable_type_impl.ts +741 -0
  569. package/src/ua_view_impl.ts +54 -0
  570. package/testHelpers.d.ts +1 -0
  571. package/testHelpers.js +1 -0
  572. package/test_helpers/add_event_generator_object.ts +71 -0
  573. package/test_helpers/alarms_and_conditions_demo.ts +147 -0
  574. package/test_helpers/assertHasMatchingReference.ts +43 -0
  575. package/test_helpers/boiler_system.ts +618 -0
  576. package/test_helpers/create_minimalist_address_space_nodeset.ts +208 -0
  577. package/test_helpers/dump_statemachine.ts +155 -0
  578. package/test_helpers/get_address_space_fixture.ts +30 -0
  579. package/test_helpers/get_mini_address_space.ts +42 -0
  580. package/test_helpers/index.ts +11 -0
  581. package/test_helpers/test_fixtures/dataType_in_separateNamespace.xml +150 -0
  582. package/test_helpers/test_fixtures/dataType_in_separateNamespace_basic.xml +57 -0
  583. package/test_helpers/test_fixtures/dataType_in_separateNamespace_mix.xml +136 -0
  584. package/test_helpers/test_fixtures/dataType_withEnumeration.xml +82 -0
  585. package/test_helpers/test_fixtures/dataType_with_isOptionSet.xml +194 -0
  586. package/test_helpers/test_fixtures/dataType_with_structures.xml +605 -0
  587. package/test_helpers/test_fixtures/dataType_with_union.xml +1 -0
  588. package/test_helpers/test_fixtures/datatype_as_per_1.04.xml +91 -0
  589. package/test_helpers/test_fixtures/fixture_empty_nodeset2.xml +106 -0
  590. package/test_helpers/test_fixtures/fixture_simple_statemachine_nodeset2.xml +1303 -0
  591. package/test_helpers/test_fixtures/fixuture_nodeset_objects_with_some_methods.xml +362 -0
  592. package/test_helpers/test_fixtures/issue_846.xml +3172 -0
  593. package/test_helpers/test_fixtures/issue_899_variable_with_nodeid_value.xml +33 -0
  594. package/test_helpers/test_fixtures/mini.Node.Set2.xml +4508 -0
  595. package/test_helpers/test_fixtures/mini.nodeset.withVariousVariables.xml +194 -0
  596. package/test_helpers/test_fixtures/minimalist_nodeset_with_models.xml +8 -0
  597. package/test_helpers/test_fixtures/minimalist_nodeset_with_models_more_complex.xml +16 -0
  598. package/test_helpers/test_fixtures/nodeset_with_analog_items.xml +45 -0
@@ -0,0 +1,1600 @@
1
+ /* eslint-disable max-statements */
2
+ /**
3
+ * @module node-opcua-address-space
4
+ */
5
+ import * as chalk from "chalk";
6
+ import * as ec from "node-opcua-basic-types";
7
+ import {
8
+ AddReferenceTypeOptions,
9
+ BaseNode,
10
+ CreateNodeOptions,
11
+ IAddressSpace,
12
+ INamespace,
13
+ UADataType,
14
+ UAVariable,
15
+ UAVariableType
16
+ } from "node-opcua-address-space-base";
17
+ import { assert } from "node-opcua-assert";
18
+ import { CallbackT, isValidGuid, StatusCodes } from "node-opcua-basic-types";
19
+ import { ExtraDataTypeManager, populateDataTypeManager } from "node-opcua-client-dynamic-extension-object";
20
+ import { EUInformation } from "node-opcua-data-access";
21
+ import {
22
+ AccessLevelFlag,
23
+ coerceLocalizedText,
24
+ makeAccessLevelFlag,
25
+ NodeClass,
26
+ QualifiedName,
27
+ QualifiedNameOptions,
28
+ stringToQualifiedName
29
+ } from "node-opcua-data-model";
30
+ import { checkDebugFlag, make_debugLog } from "node-opcua-debug";
31
+ import { ExtensionObject } from "node-opcua-extension-object";
32
+ import { DataTypeFactory, findSimpleType, getStandardDataTypeFactory } from "node-opcua-factory";
33
+ import { NodeId, resolveNodeId } from "node-opcua-nodeid";
34
+ import { Argument } from "node-opcua-service-call";
35
+ import { EnumDefinition, EnumValueType, Range, StructureDefinition, StructureFieldOptions, StructureType } from "node-opcua-types";
36
+ import { DataType, Variant, VariantArrayType, VariantOptions } from "node-opcua-variant";
37
+ import {
38
+ _definitionParser,
39
+ Definition,
40
+ FragmentClonerParser,
41
+ InternalFragmentClonerReaderState,
42
+ makeExtensionObjectReader,
43
+ ParserLike,
44
+ ReaderState,
45
+ ReaderStateParserLike,
46
+ Xml2Json,
47
+ XmlAttributes,
48
+ Callback,
49
+ SimpleCallback
50
+ } from "node-opcua-xml2json";
51
+ import * as PrettyError from "pretty-error";
52
+
53
+ import { AddressSpacePrivate } from "../../src/address_space_private";
54
+ import { NamespacePrivate } from "../../src/namespace_private";
55
+ import { PseudoSession } from "../pseudo_session";
56
+ import { promoteObjectsAndVariables } from "./namespace_post_step";
57
+
58
+ const pe = new PrettyError();
59
+
60
+ const doDebug = checkDebugFlag(__filename);
61
+ const debugLog = make_debugLog(__filename);
62
+
63
+ export async function ensureDatatypeExtracted(addressSpace: IAddressSpace): Promise<ExtraDataTypeManager> {
64
+ const addressSpacePriv: any = addressSpace as AddressSpacePrivate;
65
+ if (!addressSpacePriv.$$extraDataTypeManager) {
66
+ const dataTypeManager = new ExtraDataTypeManager();
67
+
68
+ const namespaceArray = addressSpace.getNamespaceArray().map((n: INamespace) => n.namespaceUri);
69
+ debugLog("INamespace Array = ", namespaceArray.join("\n "));
70
+ dataTypeManager.setNamespaceArray(namespaceArray);
71
+ addressSpacePriv.$$extraDataTypeManager = dataTypeManager;
72
+
73
+ for (let namespaceIndex = 1; namespaceIndex < namespaceArray.length; namespaceIndex++) {
74
+ const dataTypeFactory1 = new DataTypeFactory([getStandardDataTypeFactory()]);
75
+ dataTypeManager.registerDataTypeFactory(namespaceIndex, dataTypeFactory1);
76
+ }
77
+ // inject simple types
78
+
79
+ // now extract structure and enumeration from old form if
80
+ const session = new PseudoSession(addressSpace);
81
+ await populateDataTypeManager(session, dataTypeManager, true);
82
+ }
83
+ return addressSpacePriv.$$extraDataTypeManager;
84
+ }
85
+
86
+ export function ensureDatatypeExtractedWithCallback(addressSpace: IAddressSpace, callback: CallbackT<ExtraDataTypeManager>): void {
87
+ ensureDatatypeExtracted(addressSpace)
88
+ .then((result: ExtraDataTypeManager) => callback(null, result))
89
+ .catch((err) => callback(err));
90
+ }
91
+
92
+ function findDataTypeNode(addressSpace: IAddressSpace, encodingNodeId: NodeId): UADataType {
93
+ const encodingNode = addressSpace.findNode(encodingNodeId)!;
94
+
95
+ // istanbul ignore next
96
+ if (!encodingNode) {
97
+ throw new Error("findDataTypeNode: Cannot find " + encodingNodeId.toString());
98
+ }
99
+ // xx console.log("encodingNode", encodingNode.toString());
100
+
101
+ const refs = encodingNode.findReferences("HasEncoding", false);
102
+ const dataTypes = refs.map((ref) => addressSpace.findNode(ref.nodeId)).filter((obj: any) => obj !== null);
103
+
104
+ // istanbul ignore next
105
+ if (dataTypes.length !== 1) {
106
+ throw new Error("Internal Error");
107
+ }
108
+
109
+ const dataTypeNode = dataTypes[0] as UADataType;
110
+ // istanbul ignore next
111
+ if (dataTypeNode.nodeClass !== NodeClass.DataType) {
112
+ throw new Error("internal error: expecting a UADataType node here");
113
+ }
114
+ return dataTypeNode;
115
+ }
116
+
117
+ async function decodeXmlObject(
118
+ addressSpace2: IAddressSpace,
119
+ xmlEncodingNodeId: NodeId,
120
+ xmlBody: string
121
+ ): Promise<ExtensionObject | null> {
122
+ const dataTypeManager = await ensureDatatypeExtracted(addressSpace2);
123
+ const dataTypeNode = findDataTypeNode(addressSpace2, xmlEncodingNodeId);
124
+
125
+ const dataTypeFactory = dataTypeManager.getDataTypeFactory(xmlEncodingNodeId.namespace);
126
+
127
+ // istanbul ignore next
128
+ if (!dataTypeNode) {
129
+ debugLog(" cannot find ", xmlEncodingNodeId.toString());
130
+ return null;
131
+ }
132
+ const dataTypeName = dataTypeNode.browseName.name!;
133
+ const definitionMap = {
134
+ findDefinition(name: string): Definition {
135
+ debugLog(chalk.magentaBright("xxxxxxxxxxxxx !!!! "), name);
136
+ if (!name) {
137
+ return { name: "", fields: [] };
138
+ }
139
+ return dataTypeFactory.getStructuredTypeSchema(name) as any as Definition;
140
+ }
141
+ };
142
+ const reader = makeExtensionObjectReader(dataTypeName, definitionMap, {});
143
+ const parser2 = new Xml2Json(reader);
144
+ const pojo = await parser2.parseString(xmlBody);
145
+ // at this time the bsd file containing object definition
146
+ // must have been found and object can be constructed
147
+ const userDefinedExtensionObject = addressSpace2.constructExtensionObject(dataTypeNode, pojo);
148
+
149
+ // istanbul ignore next
150
+ if (doDebug) {
151
+ debugLog("userDefinedExtensionObject", userDefinedExtensionObject.toString());
152
+ }
153
+ //
154
+ return userDefinedExtensionObject;
155
+ }
156
+
157
+ function makeEnumDefinition(definitionFields: any[]) {
158
+ return new EnumDefinition({
159
+ fields: definitionFields.map((x) => ({
160
+ description: {
161
+ text: x.description
162
+ },
163
+ name: x.name,
164
+ value: x.value
165
+ }))
166
+ });
167
+ }
168
+ function makeStructureDefinition(name: string, definitionFields: StructureFieldOptions[], isUnion: boolean): StructureDefinition {
169
+ // Structure = 0,
170
+ // StructureWithOptionalFields = 1,
171
+ // Union = 2,
172
+ const hasOptionalFields = definitionFields.filter((field) => field.isOptional).length > 0;
173
+
174
+ const structureType = isUnion
175
+ ? StructureType.Union
176
+ : hasOptionalFields
177
+ ? StructureType.StructureWithOptionalFields
178
+ : StructureType.Structure;
179
+
180
+ const sd = new StructureDefinition({
181
+ baseDataType: undefined,
182
+ defaultEncodingId: undefined,
183
+ fields: definitionFields,
184
+ structureType
185
+ });
186
+
187
+ return sd;
188
+ }
189
+
190
+ function __make_back_references(namespace: INamespace) {
191
+ const namespaceP = namespace as NamespacePrivate;
192
+ for (const node of namespaceP.nodeIterator()) {
193
+ node.propagate_back_references();
194
+ }
195
+ for (const node of namespaceP.nodeIterator()) {
196
+ node.install_extra_properties();
197
+ }
198
+ }
199
+
200
+ function make_back_references(addressSpace: IAddressSpace): void {
201
+ const addressSpacePrivate = addressSpace as AddressSpacePrivate;
202
+ addressSpacePrivate.suspendBackReference = false;
203
+ addressSpace.getNamespaceArray().map(__make_back_references);
204
+ }
205
+
206
+ function stringToUInt32Array(str: string): number[] | null {
207
+ const array = str ? str.split(",").map((value: string) => parseInt(value, 10)) : null;
208
+ return array;
209
+ }
210
+
211
+ function convertAccessLevel(accessLevel?: string | null): AccessLevelFlag {
212
+ const accessLevelN: number = parseInt(accessLevel || "1", 10); // CurrentRead if not specified
213
+ return makeAccessLevelFlag(accessLevelN);
214
+ }
215
+
216
+ type Task = (addressSpace: IAddressSpace) => Promise<void>;
217
+
218
+ function makeDefaultVariant2(addressSpace: IAddressSpace, dataTypeNode: NodeId, valueRank: number): VariantOptions | undefined {
219
+ const variant: VariantOptions = { dataType: DataType.Null };
220
+ return variant;
221
+ }
222
+ function makeDefaultVariant(addressSpace: IAddressSpace, dataTypeNode: NodeId, valueRank: number): VariantOptions | undefined {
223
+ let variant: VariantOptions = { dataType: DataType.Null };
224
+
225
+ const nodeDataType = addressSpace.findNode(dataTypeNode);
226
+ if (nodeDataType) {
227
+ const dataType = addressSpace.findCorrespondingBasicDataType(dataTypeNode);
228
+ if (dataType === DataType.ExtensionObject) {
229
+ // console.log("xxxxxxxxxx ", dataTypeNode.toString(addressSpace as any));
230
+ return { dataType: DataType.ExtensionObject, value: null };
231
+ }
232
+ const dv = findSimpleType(DataType[dataType]).defaultValue;
233
+ if (dv === undefined || dv === null) {
234
+ // return
235
+ return { dataType: DataType.Null };
236
+ }
237
+ let arrayType: VariantArrayType;
238
+ const value = typeof dv === "function" ? dv() : dv;
239
+ // if (dataType === DataType.ByteString ) { value = Buffer.alloc(0) }
240
+ /*
241
+ * * n > 1 : the Value is an array with the specified number of dimensions.
242
+ * * OneDimension (1): The value is an array with one dimension.
243
+ * * OneOrMoreDimensions (0): The value is an array with one or more dimensions.
244
+ * * Scalar (-1): The value is not an array.
245
+ * * Any (-2): The value can be a scalar or an array with any number of dimensions.
246
+ * * ScalarOrOneDimension (-3): The value can be a scalar or a one dimensional array.
247
+ */
248
+ switch (valueRank) {
249
+ case -3: // ScalarOrOneDimension (-3):
250
+ case -2: // any
251
+ case -1:
252
+ arrayType = VariantArrayType.Scalar;
253
+ variant = { dataType, value, arrayType };
254
+ break;
255
+ case 0: // one or more dimension
256
+ case 1: // one dimension
257
+ arrayType = VariantArrayType.Array;
258
+ variant = { dataType, value: [], arrayType };
259
+ break;
260
+ default:
261
+ arrayType = VariantArrayType.Matrix;
262
+ variant = { dataType, value: [], arrayType, dimensions: [] };
263
+ break;
264
+ }
265
+ // console.log(variant, DataType[dataType], valueRank);
266
+ }
267
+ return variant;
268
+ }
269
+
270
+ export function makeStuff(addressSpace: IAddressSpace): any {
271
+ const addressSpace1 = addressSpace as AddressSpacePrivate;
272
+ addressSpace1.suspendBackReference = true;
273
+
274
+ let postTasks: Task[] = [];
275
+ let postTaskInitializeVariable: Task[] = [];
276
+ let postTasks2: Task[] = [];
277
+ let postTasks3: Task[] = [];
278
+
279
+ let alias_map: { [key: string]: NodeId } = {};
280
+
281
+ /**
282
+ * @param aliasName
283
+ */
284
+ function addAlias(aliasName: string, nodeIdInXmlContext: string) {
285
+ assert(typeof nodeIdInXmlContext === "string");
286
+ const nodeId = _translateNodeId(nodeIdInXmlContext);
287
+ assert(nodeId instanceof NodeId);
288
+ alias_map[aliasName] = nodeId;
289
+ addressSpace1.getNamespace(nodeId.namespace).addAlias(aliasName, nodeId);
290
+ }
291
+
292
+ let namespace_uri_translation: { [key: number]: number } = {};
293
+ let namespaceCounter = 0;
294
+ let found_namespace_in_uri: { [key: string]: NamespacePrivate } = {};
295
+
296
+ function _reset_namespace_translation() {
297
+ debugLog("_reset_namespace_translation");
298
+ namespace_uri_translation = {};
299
+ found_namespace_in_uri = {};
300
+ namespaceCounter = 0;
301
+ _register_namespace_uri("http://opcfoundation.org/UA/");
302
+ alias_map = {};
303
+ }
304
+
305
+ function _translateNamespaceIndex(innerIndex: number) {
306
+ const namespaceIndex = namespace_uri_translation[innerIndex];
307
+
308
+ // istanbul ignore next
309
+ if (namespaceIndex === undefined) {
310
+ // tslint:disable-next-line: no-console
311
+ debugLog("Warning: namespace_uri_translation = ", namespace_uri_translation);
312
+ throw new Error("_translateNamespaceIndex! Cannot find namespace definition for index " + innerIndex);
313
+ }
314
+ return namespaceIndex;
315
+ }
316
+
317
+ function _internal_addReferenceType(params: AddReferenceTypeOptions) {
318
+ // istanbul ignore next
319
+ if (!(params.nodeId instanceof NodeId)) {
320
+ throw new Error("invalid param");
321
+ } // already translated
322
+
323
+ const namespace = addressSpace1.getNamespace(params.nodeId!.namespace);
324
+ namespace.addReferenceType(params);
325
+ }
326
+
327
+ function _internal_createNode(params: CreateNodeOptions): BaseNode {
328
+ // istanbul ignore next
329
+ if (!(params.nodeId instanceof NodeId)) {
330
+ throw new Error("invalid param expecting a valid nodeId");
331
+ } // already translated
332
+
333
+ const namespace = addressSpace1.getNamespace(params.nodeId.namespace);
334
+ return namespace.internalCreateNode(params) as BaseNode;
335
+ }
336
+
337
+ function _register_namespace_uri(namespaceUri: string): NamespacePrivate {
338
+ if (found_namespace_in_uri[namespaceUri]) {
339
+ return found_namespace_in_uri[namespaceUri];
340
+ }
341
+
342
+ const namespace = addressSpace1.registerNamespace(namespaceUri);
343
+ found_namespace_in_uri[namespaceUri] = namespace;
344
+
345
+ const index_in_xml = namespaceCounter;
346
+ namespaceCounter++;
347
+ namespace_uri_translation[index_in_xml] = namespace.index;
348
+
349
+ debugLog(
350
+ " _register_namespace_uri = ",
351
+ namespaceUri,
352
+ "index in Xml=",
353
+ index_in_xml,
354
+ " index in addressSpace",
355
+ namespace.index
356
+ );
357
+ return namespace;
358
+ }
359
+
360
+ function _register_namespace_uri_model(model: any) {
361
+ const namespace = _register_namespace_uri(model.modelUri);
362
+ namespace.version = model.version;
363
+ namespace.publicationDate = model.publicationDate;
364
+ return namespace;
365
+ }
366
+
367
+ const reg = /ns=([0-9]+);(.*)/;
368
+
369
+ function _translateNodeId(nodeId: string): NodeId {
370
+ if (alias_map[nodeId]) {
371
+ return alias_map[nodeId];
372
+ }
373
+ const m = nodeId.match(reg);
374
+ if (m) {
375
+ const namespaceIndex = _translateNamespaceIndex(parseInt(m[1], 10));
376
+ nodeId = "ns=" + namespaceIndex + ";" + m[2];
377
+ }
378
+ return resolveNodeId(nodeId);
379
+ }
380
+
381
+ function _translateReferenceType(refType: string): NodeId {
382
+ return _translateNodeId(refType);
383
+ }
384
+
385
+ /**
386
+ * convert a nodeId
387
+ *
388
+ * @method convertToNodeId
389
+ * @param nodeId {String|null}
390
+ * @return {NodeId}
391
+ *
392
+ * @example
393
+ * convertToNodeId("String") => resolve alias
394
+ * convertToNodeId("i=58") => resolve to nodeId in namespace 0
395
+ * convertToNodeId("ns=1;i=100") => convert namespace from xml namespace
396
+ * table to corresponding namespace in addressSpace
397
+ */
398
+ function convertToNodeId(nodeIdLike: string | null): NodeId | null {
399
+ // treat alias
400
+ if (!nodeIdLike) {
401
+ return null;
402
+ }
403
+ const nodeId = _translateNodeId(nodeIdLike);
404
+ return addressSpace1.resolveNodeId(nodeId);
405
+ }
406
+
407
+ function convertQualifiedName(qualifiedName: string): QualifiedName {
408
+ const qn = stringToQualifiedName(qualifiedName);
409
+ // Xx if (qn.namespaceIndex > 0) {
410
+ qn.namespaceIndex = _translateNamespaceIndex(qn.namespaceIndex);
411
+ // Xx }
412
+ return qn;
413
+ }
414
+
415
+ const state_Alias = {
416
+ finish(this: any) {
417
+ addAlias(this.attrs.Alias, this.text);
418
+ }
419
+ };
420
+
421
+ const references_parser = {
422
+ init(this: any) {
423
+ this.parent.obj.references = [];
424
+ this.array = this.parent.obj.references;
425
+ },
426
+ parser: {
427
+ Reference: {
428
+ finish(this: any) {
429
+ this.parent.array.push({
430
+ isForward: this.attrs.IsForward === undefined ? true : this.attrs.IsForward === "false" ? false : true,
431
+ nodeId: convertToNodeId(this.text),
432
+ referenceType: _translateReferenceType(this.attrs.ReferenceType)
433
+ });
434
+ }
435
+ }
436
+ }
437
+ };
438
+
439
+ const state_UAObject = {
440
+ init(this: any, name: string, attrs: XmlAttributes) {
441
+ this.obj = {};
442
+ this.obj.nodeClass = NodeClass.Object;
443
+ this.obj.isAbstract = ec.coerceBoolean(attrs.IsAbstract);
444
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
445
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
446
+ this.obj.eventNotifier = ec.coerceByte(attrs.EventNotifier) || 0;
447
+ this.obj.symbolicName = attrs.SymbolicName || null;
448
+ },
449
+ finish(this: any) {
450
+ _internal_createNode(this.obj);
451
+ },
452
+ parser: {
453
+ DisplayName: {
454
+ finish(this: any) {
455
+ this.parent.obj.displayName = this.text;
456
+ }
457
+ },
458
+
459
+ Description: {
460
+ finish(this: any) {
461
+ this.parent.obj.description = this.text;
462
+ }
463
+ },
464
+
465
+ References: references_parser
466
+ }
467
+ };
468
+
469
+ const state_UAObjectType = {
470
+ init(this: any, name: string, attrs: XmlAttributes) {
471
+ this.obj = {};
472
+ this.obj.nodeClass = NodeClass.ObjectType;
473
+ this.obj.isAbstract = ec.coerceBoolean(attrs.IsAbstract);
474
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
475
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
476
+ this.obj.eventNotifier = ec.coerceByte(attrs.EventNotifier) || 0;
477
+ },
478
+ finish(this: any) {
479
+ _internal_createNode(this.obj);
480
+ },
481
+ parser: {
482
+ DisplayName: {
483
+ finish(this: any) {
484
+ this.parent.obj.displayName = this.text;
485
+ }
486
+ },
487
+
488
+ Description: {
489
+ finish(this: any) {
490
+ this.parent.obj.description = this.text;
491
+ }
492
+ },
493
+
494
+ References: references_parser
495
+ }
496
+ };
497
+
498
+ const state_UAReferenceType = {
499
+ init(this: any, name: string, attrs: XmlAttributes) {
500
+ this.obj = {};
501
+ this.obj.nodeClass = NodeClass.ReferenceType;
502
+ this.obj.isAbstract = ec.coerceBoolean(attrs.IsAbstract);
503
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
504
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
505
+ },
506
+ finish(this: any) {
507
+ _internal_addReferenceType(this.obj);
508
+ },
509
+ parser: {
510
+ DisplayName: {
511
+ finish(this: any) {
512
+ this.parent.obj.displayName = this.text;
513
+ }
514
+ },
515
+
516
+ Description: {
517
+ finish(this: any) {
518
+ this.parent.obj.description = this.text;
519
+ }
520
+ },
521
+
522
+ InverseName: {
523
+ finish(this: any) {
524
+ this.parent.obj.inverseName = this.text;
525
+ }
526
+ },
527
+ References: references_parser
528
+ }
529
+ };
530
+
531
+ const pendingSimpleTypeToRegister: any[] = [];
532
+
533
+ const state_UADataType = {
534
+ init(this: any, name: string, attrs: XmlAttributes) {
535
+ this.obj = {};
536
+ this.obj.nodeClass = NodeClass.DataType;
537
+ this.obj.isAbstract = ec.coerceBoolean(attrs.IsAbstract) || false;
538
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
539
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
540
+ this.obj.displayName = "";
541
+ this.obj.description = "";
542
+ this.obj.symbolicName = attrs.SymbolicName;
543
+ this.isDraft = attrs.ReleaseStatus === "Draft";
544
+ this.definitionFields = [];
545
+ },
546
+ finish(this: any) {
547
+ if (this.isDraft) {
548
+ // ignore Draft element
549
+ debugLog("Ignoring Draft dataType =", this.obj.browseName.toString());
550
+ return;
551
+ }
552
+ let definitionFields = this.definitionFields;
553
+ // replace DataType with nodeId
554
+ definitionFields = definitionFields.map((x: any) => {
555
+ if (x.dataType) {
556
+ x.dataType = convertToNodeId(x.dataType);
557
+ }
558
+ return x;
559
+ });
560
+
561
+ const dataTypeNode = _internal_createNode(this.obj) as UADataType;
562
+ assert(addressSpace1.findNode(this.obj.nodeId));
563
+ const definitionName = dataTypeNode.browseName.name!;
564
+
565
+ let alreadyCalled = false;
566
+ const processBasicDataType = async (addressSpace2: IAddressSpace) => {
567
+ assert(!alreadyCalled);
568
+ alreadyCalled = true;
569
+
570
+ const enumeration = addressSpace2.findDataType("Enumeration");
571
+ const structure = addressSpace2.findDataType("Structure");
572
+ const union = addressSpace2.findDataType("Union");
573
+
574
+ // we have a data type from a companion specification
575
+ // let's see if this data type need to be registered
576
+ const isEnumeration = enumeration && dataTypeNode.isSupertypeOf(enumeration);
577
+ const isStructure = structure && dataTypeNode.isSupertypeOf(structure);
578
+ const isUnion = !!(structure && union && dataTypeNode.isSupertypeOf(union!));
579
+
580
+ if (definitionFields.length) {
581
+ // remove <namespace>:
582
+ const nameWithoutNamespace = definitionName.split(":").slice(-1)[0];
583
+
584
+ if (isStructure /*&& dataTypeNode.nodeId.namespace !== 0*/) {
585
+ // note: at this stage, structure definition will be incomplete as we do not know
586
+ // what is the subType yet, encodings are also unknown...
587
+ // structureType may also be inaccurate
588
+ debugLog("setting structure $definition for ", definitionName, nameWithoutNamespace);
589
+ (dataTypeNode as any).$definition = makeStructureDefinition(definitionName, definitionFields, isUnion);
590
+ } else if (isEnumeration /* && dataTypeNode.nodeId.namespace !== 0 */) {
591
+ (dataTypeNode as any).$definition = makeEnumDefinition(definitionFields);
592
+ }
593
+ }
594
+ if (!isEnumeration && !isStructure && this.obj.nodeId.namespace !== 0) {
595
+ pendingSimpleTypeToRegister.push({ name: definitionName, dataTypeNodeId: dataTypeNode.nodeId });
596
+ }
597
+ };
598
+ postTasks.push(processBasicDataType);
599
+ },
600
+ parser: {
601
+ DisplayName: {
602
+ finish(this: any) {
603
+ this.parent.obj.displayName = this.text;
604
+ }
605
+ },
606
+
607
+ Description: {
608
+ finish(this: any) {
609
+ this.parent.obj.description = this.text;
610
+ }
611
+ },
612
+ References: references_parser,
613
+
614
+ Definition: _definitionParser
615
+ }
616
+ };
617
+
618
+ const localizedText_parser = {
619
+ LocalizedText: {
620
+ init(this: any) {
621
+ this.localizedText = {};
622
+ },
623
+ parser: {
624
+ Locale: {
625
+ finish(this: any) {
626
+ this.parent.localizedText.locale = this.text.trim();
627
+ }
628
+ },
629
+ Text: {
630
+ finish(this: any) {
631
+ this.parent.localizedText.text = this.text.trim();
632
+ }
633
+ }
634
+ }
635
+ }
636
+ };
637
+ interface QualifiedNameParserChild {
638
+ parent: {
639
+ qualifiedName: QualifiedNameOptions;
640
+ };
641
+ text: string;
642
+ }
643
+ const qualifiedName_parser = {
644
+ QualifiedName: {
645
+ init(this: any) {
646
+ this.qualifiedName = {
647
+ namespaceIndex: 0,
648
+ name: null
649
+ } as QualifiedNameOptions;
650
+ },
651
+ parser: {
652
+ Name: {
653
+ finish(this: QualifiedNameParserChild) {
654
+ this.parent.qualifiedName.name = this.text.trim();
655
+ }
656
+ },
657
+ NamespaceIndex: {
658
+ finish(this: QualifiedNameParserChild) {
659
+ const ns = parseInt(this.text, 10);
660
+ const t = _translateNodeId(resolveNodeId(`ns=${ns};i=1`).toString());
661
+ this.parent.qualifiedName.namespaceIndex = t.namespace;
662
+ }
663
+ }
664
+ }
665
+ }
666
+ };
667
+ const nodeId_parser = {
668
+ NodeId: {
669
+ init(this: any) {
670
+ this.nodeId = "";
671
+ },
672
+ parser: {
673
+ Identifier: {
674
+ finish(this: any) {
675
+ this.parent.nodeId = _translateNodeId(resolveNodeId(this.text.trim()).toString());
676
+ }
677
+ }
678
+ }
679
+ }
680
+ };
681
+ const enumValueType_parser = {
682
+ EnumValueType: {
683
+ init(this: any) {
684
+ this.enumValueType = new EnumValueType({
685
+ description: undefined,
686
+ displayName: undefined,
687
+ value: [0, 0] // Int64
688
+ });
689
+ },
690
+ parser: {
691
+ Value: {
692
+ finish(this: any) {
693
+ // Low part
694
+ this.parent.enumValueType.value[1] = parseInt(this.text, 10);
695
+ }
696
+ },
697
+
698
+ DisplayName: {
699
+ ...localizedText_parser.LocalizedText,
700
+ finish(this: any) {
701
+ this.parent.enumValueType.displayName = { ...this.localizedText };
702
+ }
703
+ },
704
+
705
+ Description: {
706
+ ...localizedText_parser.LocalizedText,
707
+ finish(this: any) {
708
+ this.parent.enumValueType.description = { ...this.localizedText };
709
+ }
710
+ }
711
+ },
712
+ finish(this: any) {
713
+ this.enumValueType = new EnumValueType(this.enumValueType);
714
+ }
715
+ }
716
+ };
717
+
718
+ const argument_parser = {
719
+ Argument: {
720
+ init(this: any) {
721
+ this.argument = new Argument({});
722
+ },
723
+ parser: {
724
+ Name: {
725
+ finish(this: any) {
726
+ this.parent.argument.name = this.text.trim();
727
+ }
728
+ },
729
+
730
+ DataType: {
731
+ parser: {
732
+ Identifier: {
733
+ finish(this: any) {
734
+ this.parent.parent.argument.dataType = _translateNodeId(resolveNodeId(this.text.trim()).toString());
735
+ }
736
+ }
737
+ }
738
+ },
739
+ ValueRank: {
740
+ finish(this: any) {
741
+ this.parent.argument.valueRank = parseInt(this.text.trim(), 10);
742
+ }
743
+ },
744
+
745
+ ArrayDimensions: {
746
+ finish(this: any) {
747
+ // xx this.parent.argument.arrayDimensions =[];
748
+ }
749
+ },
750
+ Description: {
751
+ init(this: any) {
752
+ this._text = "";
753
+ this.locale = null;
754
+ this.text = null;
755
+ },
756
+ parser: {
757
+ Locale: {
758
+ init(this: any) {
759
+ this.text = "";
760
+ },
761
+ finish(this: any) {
762
+ this.parent.locale = this.text.trim();
763
+ }
764
+ },
765
+ Text: {
766
+ finish(this: any) {
767
+ this.text = this.text || "";
768
+ this.parent._text = this.text.trim();
769
+ }
770
+ }
771
+ },
772
+ finish(this: any) {
773
+ this.parent.argument.description = coerceLocalizedText(this._text);
774
+ }
775
+ }
776
+ },
777
+ finish(this: any) {
778
+ // xx this.argument = new Argument(this.argument);
779
+ }
780
+ }
781
+ };
782
+
783
+ const Range_parser = {
784
+ Range: {
785
+ init(this: any) {
786
+ this.range = new Range({});
787
+ },
788
+ parser: {
789
+ Low: {
790
+ finish(this: any) {
791
+ this.parent.range.low = parseFloat(this.text);
792
+ }
793
+ },
794
+
795
+ High: {
796
+ finish(this: any) {
797
+ this.parent.range.high = parseFloat(this.text);
798
+ }
799
+ }
800
+ }
801
+ }
802
+ };
803
+
804
+ const EUInformation_parser = {
805
+ EUInformation: {
806
+ init(this: any) {
807
+ this.euInformation = new EUInformation({});
808
+ },
809
+ parser: {
810
+ NamespaceUri: {
811
+ finish(this: any) {
812
+ this.parent.euInformation.namespaceUri = this.text;
813
+ }
814
+ },
815
+ UnitId: {
816
+ finish(this: any) {
817
+ this.parent.euInformation.unitId = parseInt(this.text, 10);
818
+ }
819
+ },
820
+
821
+ DisplayName: {
822
+ ...localizedText_parser.LocalizedText,
823
+ finish(this: any) {
824
+ this.parent.euInformation.displayName = { ...this.localizedText };
825
+ }
826
+ },
827
+
828
+ Description: {
829
+ ...localizedText_parser.LocalizedText,
830
+ finish(this: any) {
831
+ this.parent.euInformation.description = { ...this.localizedText };
832
+ }
833
+ }
834
+ },
835
+ finish(this: any) {
836
+ this.euInformation = new EUInformation(this.euInformation);
837
+ }
838
+ }
839
+ };
840
+
841
+ const _extensionObject_inner_parser = {
842
+ TypeId: {
843
+ parser: {
844
+ Identifier: {
845
+ finish(this: any) {
846
+ const typeDefinitionId = this.text.trim();
847
+ const self = this.parent.parent; // ExtensionObject
848
+ self.typeDefinitionId = resolveNodeId(typeDefinitionId);
849
+ }
850
+ }
851
+ }
852
+ },
853
+
854
+ Body2: new FragmentClonerParser(),
855
+
856
+ Body: {
857
+ parser: {
858
+ Argument: argument_parser.Argument,
859
+ EUInformation: EUInformation_parser.EUInformation,
860
+ EnumValueType: enumValueType_parser.EnumValueType,
861
+ Range: Range_parser.Range
862
+ },
863
+ startElement(this: any, elementName: string, attrs: any) {
864
+ const self = this.parent; // ExtensionObject
865
+ self.extensionObject = null;
866
+ self.extensionObjectPojo = null;
867
+
868
+ if (!Object.prototype.hasOwnProperty.call(this.parser, elementName)) {
869
+ // treat it as a opaque XML bloc for the time being
870
+ // until we find the definition of this object, so we know how to interpret the fields
871
+ this._cloneFragment = new InternalFragmentClonerReaderState();
872
+ this.engine!._promote(this._cloneFragment, this.engine!.currentLevel, elementName, attrs);
873
+ }
874
+ },
875
+ finish(this: any) {
876
+ const self = this.parent; // ExtensionObject
877
+
878
+ // typeDefinitionId is also the "Default XML" encoding nodeId !
879
+ switch (self.typeDefinitionId.toString()) {
880
+ case "i=7616": // EnumValueType
881
+ case "ns=0;i=7616": // EnumValueType
882
+ self.extensionObject = self.parser.Body.parser.EnumValueType.enumValueType;
883
+ assert(self.extensionObject !== null && typeof self.extensionObject === "object");
884
+ assert(self.extensionObject instanceof ExtensionObject);
885
+ break;
886
+ case "i=297": // Arguments
887
+ case "ns=0;i=297": // Arguments
888
+ self.extensionObject = self.parser.Body.parser.Argument.argument;
889
+ assert(self.extensionObject !== null && typeof self.extensionObject === "object");
890
+ assert(self.extensionObject instanceof ExtensionObject);
891
+ break;
892
+ case "i=888":
893
+ case "ns=0;i=888": // EUInformation
894
+ self.extensionObject = self.parser.Body.parser.EUInformation.euInformation;
895
+ assert(self.extensionObject !== null && typeof self.extensionObject === "object");
896
+ assert(self.extensionObject instanceof ExtensionObject);
897
+ break;
898
+ case "i=885": // Range
899
+ case "ns=0;i=885":
900
+ self.extensionObject = self.parser.Body.parser.Range.range;
901
+ assert(self.extensionObject !== null && typeof self.extensionObject === "object");
902
+ assert(self.extensionObject instanceof ExtensionObject);
903
+ break;
904
+ default: {
905
+ this.bodyXML = this._cloneFragment!.value;
906
+ this._cloneFragment!.value = null;
907
+
908
+ // the "Default Xml" encoding nodeId
909
+ const xmlEncodingNodeId = _translateNodeId(self.typeDefinitionId.toString());
910
+ const xmlBody = this.bodyXML;
911
+ // this is a user defined Extension Object
912
+ debugLog(
913
+ "load nodeset2: typeDefinitionId in ExtensionObject Default XML = " + xmlEncodingNodeId.toString()
914
+ );
915
+ if (doDebug) {
916
+ debugLog("xxxx ", chalk.yellow(xmlBody));
917
+ }
918
+ const postTaskData = self.postTaskData;
919
+ const task = async (addressSpace2: IAddressSpace) => {
920
+ const extensionObject: ExtensionObject | null = await decodeXmlObject(
921
+ addressSpace2,
922
+ xmlEncodingNodeId,
923
+ xmlBody
924
+ );
925
+ if (postTaskData) {
926
+ postTaskData.postponedExtensionObject = extensionObject;
927
+ }
928
+ };
929
+ postTasks2.push(task);
930
+ self.extensionObjectPojo = null;
931
+ assert(!self.extensionObject || self.extensionObject instanceof ExtensionObject);
932
+ break;
933
+ }
934
+ }
935
+ }
936
+ }
937
+ };
938
+
939
+ const extensionObject_parser = {
940
+ ExtensionObject: {
941
+ init(this: any) {
942
+ this.typeDefinitionId = "";
943
+ this.extensionObject = null;
944
+ this.extensionObjectPojo = null;
945
+ },
946
+ parser: _extensionObject_inner_parser,
947
+ finish(this: any) {
948
+ /* empty */
949
+ }
950
+ }
951
+ };
952
+
953
+ function BasicType_parser(dataType: string, parseFunc: (this: any, text: string) => any): ParserLike {
954
+ const _parser: ParserLike = {};
955
+
956
+ const r: ReaderStateParserLike = {
957
+ init(this: any, name: string, attrs: XmlAttributes) {
958
+ this.value = 0;
959
+ },
960
+
961
+ finish(this: any) {
962
+ this.value = parseFunc.call(this, this.text);
963
+ }
964
+ };
965
+ _parser[dataType] = r;
966
+ return _parser;
967
+ }
968
+
969
+ function ListOf(dataType: string, parseFunc: any) {
970
+ return {
971
+ init(this: any) {
972
+ this.listData = [];
973
+ },
974
+
975
+ parser: BasicType_parser(dataType, parseFunc),
976
+
977
+ finish(this: any) {
978
+ this.parent.parent.obj.value = {
979
+ arrayType: VariantArrayType.Array,
980
+ dataType: (DataType as any)[dataType],
981
+ value: this.listData
982
+ };
983
+ },
984
+ endElement(this: any, element: string) {
985
+ this.listData.push(this.parser[dataType].value);
986
+ }
987
+ };
988
+ }
989
+
990
+ function parser2(type: string, p: (a: any) => any): any {
991
+ return {
992
+ finish(this: any) {
993
+ this.parent.parent.obj.value = {
994
+ dataType: (DataType as any)[type],
995
+ value: p(this.text)
996
+ };
997
+ }
998
+ };
999
+ }
1000
+ const state_Variant = {
1001
+ init: () => {
1002
+ /* empty */
1003
+ },
1004
+ parser: {
1005
+ QualifiedName: {
1006
+ ...qualifiedName_parser.QualifiedName,
1007
+ finish(this: any) {
1008
+ this.parent.parent.obj.value = {
1009
+ dataType: DataType.QualifiedName,
1010
+ value: this.qualifiedName
1011
+ };
1012
+ }
1013
+ },
1014
+ LocalizedText: {
1015
+ ...localizedText_parser.LocalizedText,
1016
+ finish(this: any) {
1017
+ this.parent.parent.obj.value = {
1018
+ dataType: DataType.LocalizedText,
1019
+ value: this.localizedText
1020
+ };
1021
+ }
1022
+ },
1023
+ XmlElement: {
1024
+ finish(this: any) {
1025
+ this.parent.parent.obj.value = {
1026
+ dataType: DataType.XmlElement,
1027
+ value: this.text
1028
+ };
1029
+ }
1030
+ },
1031
+ String: {
1032
+ finish(this: any) {
1033
+ this.parent.parent.obj.value = {
1034
+ dataType: DataType.String,
1035
+ value: this.text
1036
+ };
1037
+ }
1038
+ },
1039
+
1040
+ Guid: {
1041
+ parser: {
1042
+ String: {
1043
+ finish(this: any) {
1044
+ const guid = this.text;
1045
+ if (!isValidGuid(guid)) {
1046
+ /* ?*/
1047
+ }
1048
+ this.parent.parent.parent.obj.value = {
1049
+ dataType: DataType.Guid,
1050
+ arrayType: VariantArrayType.Scalar,
1051
+ value: this.text
1052
+ };
1053
+ }
1054
+ }
1055
+ }
1056
+ },
1057
+
1058
+ NodeId: {
1059
+ parser: {
1060
+ Identifier: {
1061
+ finish(this: any) {
1062
+ const nodeId = this.text;
1063
+ this.parent.parent.parent.obj.value = {
1064
+ dataType: DataType.NodeId,
1065
+ arrayType: VariantArrayType.Scalar,
1066
+ value: _translateNodeId(resolveNodeId(nodeId).toString())
1067
+ };
1068
+ }
1069
+ }
1070
+ }
1071
+ },
1072
+
1073
+ Boolean: parser2("Boolean", ec.coerceBoolean),
1074
+ Byte: parser2("Byte", parseInt),
1075
+ Int16: parser2("Int16", parseInt),
1076
+ Int32: parser2("Int32", parseInt),
1077
+ Int8: parser2("Int8", parseInt),
1078
+ SByte: parser2("SByte", parseInt),
1079
+ UInt16: parser2("UInt16", parseInt),
1080
+ UInt32: parser2("UInt32", parseInt),
1081
+ UInt8: parser2("UInt8", parseInt),
1082
+
1083
+ ByteString: {
1084
+ init(this: any) {
1085
+ this.value = null;
1086
+ },
1087
+ finish(this: any) {
1088
+ const base64text = this.text;
1089
+ const byteString = Buffer.from(base64text, "base64");
1090
+ this.parent.parent.obj.value = {
1091
+ arrayType: VariantArrayType.Scalar,
1092
+ dataType: DataType.ByteString,
1093
+ value: byteString
1094
+ };
1095
+ }
1096
+ },
1097
+ Float: {
1098
+ finish(this: any) {
1099
+ this.parent.parent.obj.value = {
1100
+ dataType: DataType.Float,
1101
+ value: parseFloat(this.text)
1102
+ };
1103
+ }
1104
+ },
1105
+
1106
+ Double: {
1107
+ finish(this: any) {
1108
+ this.parent.parent.obj.value = {
1109
+ dataType: DataType.Double,
1110
+ value: parseFloat(this.text)
1111
+ };
1112
+ }
1113
+ },
1114
+
1115
+ ListOfExtensionObject: {
1116
+ init(this: any) {
1117
+ this.listData = [];
1118
+ },
1119
+ parser: extensionObject_parser,
1120
+ finish(this: any) {
1121
+ this.parent.parent.obj.value = {
1122
+ arrayType: VariantArrayType.Array,
1123
+ dataType: DataType.ExtensionObject,
1124
+ value: this.listData
1125
+ };
1126
+ },
1127
+ startElement(this: any, elementName: string) {
1128
+ /* empty */
1129
+ },
1130
+ endElement(this: any, elementName: string) {
1131
+ this.listData.push(this.parser.ExtensionObject.extensionObject);
1132
+
1133
+ if (this.parser.ExtensionObject.extensionObject) {
1134
+ // assert(element === "ExtensionObject");
1135
+
1136
+ // istanbul ignore next
1137
+ if (!(this.parser.ExtensionObject.extensionObject instanceof ExtensionObject)) {
1138
+ throw new Error("expecting an extension object");
1139
+ }
1140
+ }
1141
+ }
1142
+ },
1143
+
1144
+ ListOfLocalizedText: {
1145
+ init(this: any) {
1146
+ this.listData = [];
1147
+ },
1148
+ parser: localizedText_parser,
1149
+ finish(this: any) {
1150
+ this.parent.parent.obj.value = {
1151
+ arrayType: VariantArrayType.Array,
1152
+ dataType: DataType.LocalizedText,
1153
+ value: this.listData
1154
+ };
1155
+ },
1156
+ endElement(this: any /*element*/) {
1157
+ this.listData.push(this.parser.LocalizedText.localizedText);
1158
+ }
1159
+ },
1160
+ ListOfQualifiedName: {
1161
+ init(this: any) {
1162
+ this.listData = [];
1163
+ },
1164
+ parser: qualifiedName_parser,
1165
+ finish(this: any) {
1166
+ this.parent.parent.obj.value = {
1167
+ arrayType: VariantArrayType.Array,
1168
+ dataType: DataType.QualifiedName,
1169
+ value: this.listData
1170
+ };
1171
+ },
1172
+ endElement(this: any /*element*/) {
1173
+ this.listData.push(this.parser.QualifiedName.qualifiedName);
1174
+ }
1175
+ },
1176
+ ListOfNodeId: {
1177
+ init(this: any) {
1178
+ this.listData = [];
1179
+ },
1180
+ parser: nodeId_parser,
1181
+ finish(this: any) {
1182
+ this.parent.parent.obj.value = {
1183
+ arrayType: VariantArrayType.Array,
1184
+ dataType: DataType.NodeId,
1185
+ value: this.listData
1186
+ };
1187
+ },
1188
+ endElement(this: any, elementName: string) {
1189
+ this.listData.push(this.parser.NodeId.nodeId);
1190
+ }
1191
+ },
1192
+ ListOfBoolean: ListOf("Boolean", ec.coerceBoolean),
1193
+ ListOfByte: ListOf("Byte", parseInt),
1194
+
1195
+ ListOfDouble: ListOf("Double", parseFloat),
1196
+
1197
+ ListOfFloat: ListOf("Float", parseFloat),
1198
+
1199
+ ListOfInt32: ListOf("Int32", parseInt),
1200
+
1201
+ ListOfInt16: ListOf("Int16", parseInt),
1202
+
1203
+ ListOfInt8: ListOf("Int8", parseInt),
1204
+
1205
+ ListOfUInt32: ListOf("UInt32", parseInt),
1206
+
1207
+ ListOfUInt16: ListOf("UInt16", parseInt),
1208
+
1209
+ ListOfUInt8: ListOf("UInt8", parseInt),
1210
+
1211
+ ListOfString: ListOf("String", (value: string) => value),
1212
+
1213
+ ListOfXmlElement: ListOf("XmlElement", (value: string) => value),
1214
+
1215
+ ExtensionObject: {
1216
+ init(this: any) {
1217
+ this.typeDefinitionId = {};
1218
+ this.extensionObject = null;
1219
+ this.postTaskData = {};
1220
+ },
1221
+ parser: _extensionObject_inner_parser,
1222
+ finish(this: any) {
1223
+ // istanbul ignore next
1224
+ if (this.extensionObject && !(this.extensionObject instanceof ExtensionObject)) {
1225
+ throw new Error("expecting an extension object");
1226
+ }
1227
+
1228
+ this.parent.parent.obj.value = {
1229
+ dataType: DataType.ExtensionObject,
1230
+ value: this.extensionObject
1231
+ };
1232
+
1233
+ // let's create the mechanism that postpone the creation of the
1234
+ // extension object
1235
+ const data = this.postTaskData;
1236
+ data.variant = this.parent.parent.obj.value;
1237
+ if (!data.variant) {
1238
+ data.nodeId = this.parent.parent.obj.nodeId;
1239
+ this.postTaskData = null;
1240
+ const task = async (addressSpace2: IAddressSpace) => {
1241
+ data.variant.value = data.postponedExtensionObject;
1242
+ assert(data.nodeId, "expecting a nodeid");
1243
+ const node = addressSpace2.findNode(data.nodeId)!;
1244
+ if (node.nodeClass === NodeClass.Variable) {
1245
+ const v = node as UAVariable;
1246
+ v.setValueFromSource(data.variant);
1247
+ }
1248
+ if (node.nodeClass === NodeClass.VariableType) {
1249
+ const v = node as UAVariableType;
1250
+ (v as any) /*fix me*/.value.value = data.variant.value;
1251
+ }
1252
+ };
1253
+ postTasks3.push(task);
1254
+ }
1255
+ }
1256
+ }
1257
+ }
1258
+ };
1259
+
1260
+ const state_UAVariable = {
1261
+ init(this: any, name: string, attrs: XmlAttributes) {
1262
+ this.obj = {};
1263
+
1264
+ this.obj.nodeClass = NodeClass.Variable;
1265
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
1266
+ this.obj.parentNodeId = convertToNodeId(attrs.ParentNodeId);
1267
+ this.obj.dataType = convertToNodeId(attrs.DataType);
1268
+
1269
+ this.obj.valueRank = attrs.ValueRank === undefined ? -1 : ec.coerceInt32(attrs.ValueRank);
1270
+ this.obj.arrayDimensions = this.obj.valueRank <= 0 ? null : stringToUInt32Array(attrs.ArrayDimensions);
1271
+
1272
+ this.obj.minimumSamplingInterval = attrs.MinimumSamplingInterval ? parseInt(attrs.MinimumSamplingInterval, 10) : 0;
1273
+ this.obj.minimumSamplingInterval = parseInt(this.obj.minimumSamplingInterval, 10);
1274
+
1275
+ this.obj.historizing = false;
1276
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
1277
+
1278
+ this.obj.accessLevel = convertAccessLevel(attrs.AccessLevel);
1279
+ this.obj.userAccessLevel = this.obj.accessLevel; // convertAccessLevel(attrs.UserAccessLevel || attrs.AccessLevel);
1280
+ },
1281
+ finish(this: any) {
1282
+ /*
1283
+ // set default value based on obj data Type
1284
+ if (this.obj.value === undefined) {
1285
+ const dataTypeNode = this.obj.dataType;
1286
+ const valueRank = this.obj.valueRank;
1287
+ this.obj.value = makeDefaultVariant(addressSpace, dataTypeNode, valueRank);
1288
+ }
1289
+ */
1290
+ // eslint-disable-next-line prefer-const
1291
+ let variable: UAVariable;
1292
+ if (this.obj.value) {
1293
+ const capturedValue = this.obj.value;
1294
+ const task = async (addressSpace2: IAddressSpace) => {
1295
+ if (false && doDebug) {
1296
+ debugLog("1 setting value to ", variable.nodeId.toString(), new Variant(capturedValue).toString());
1297
+ }
1298
+ variable.setValueFromSource(capturedValue);
1299
+ };
1300
+ postTaskInitializeVariable.push(task);
1301
+ } else {
1302
+ const task = async (addressSpace2: IAddressSpace) => {
1303
+ const dataTypeNode = variable.dataType;
1304
+ const valueRank = variable.valueRank;
1305
+ const value = makeDefaultVariant(addressSpace, dataTypeNode, valueRank);
1306
+ if (value) {
1307
+ if (false && doDebug) {
1308
+ debugLog("2 setting value to ", variable.nodeId.toString(), value);
1309
+ }
1310
+ if (value.dataType === DataType.Null) {
1311
+ variable.setValueFromSource(value, StatusCodes.BadWaitingForInitialData);
1312
+ } else {
1313
+ variable.setValueFromSource(value, StatusCodes.Good);
1314
+ }
1315
+ }
1316
+ };
1317
+ postTaskInitializeVariable.push(task);
1318
+ }
1319
+ this.obj.value = undefined;
1320
+ variable = _internal_createNode(this.obj) as UAVariable;
1321
+ },
1322
+ parser: {
1323
+ DisplayName: {
1324
+ finish(this: any) {
1325
+ this.parent.obj.displayName = this.text;
1326
+ }
1327
+ },
1328
+
1329
+ Description: {
1330
+ finish(this: any) {
1331
+ this.parent.obj.description = this.text;
1332
+ }
1333
+ },
1334
+ References: references_parser,
1335
+
1336
+ Value: state_Variant
1337
+ }
1338
+ };
1339
+
1340
+ const state_UAVariableType = {
1341
+ init(this: any, name: string, attrs: XmlAttributes) {
1342
+ this.obj = {};
1343
+ this.obj.isAbstract = ec.coerceBoolean(attrs.IsAbstract);
1344
+
1345
+ this.obj.nodeClass = NodeClass.VariableType;
1346
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
1347
+ this.obj.parentNodeId = attrs.ParentNodeId || null;
1348
+ this.obj.dataType = convertToNodeId(attrs.DataType) || null;
1349
+
1350
+ this.obj.valueRank = ec.coerceInt32(attrs.ValueRank) || -1;
1351
+ this.obj.arrayDimensions = this.obj.valueRank <= 0 ? null : stringToUInt32Array(attrs.ArrayDimensions);
1352
+
1353
+ this.obj.minimumSamplingInterval = attrs.MinimumSamplingInterval ? parseInt(attrs.MinimumSamplingInterval, 10) : 0;
1354
+
1355
+ this.obj.historizing = false;
1356
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
1357
+ },
1358
+ finish(this: any) {
1359
+ try {
1360
+ _internal_createNode(this.obj);
1361
+ } /* istanbul ignore next */ catch (err) {
1362
+ this.obj.addressSpace = null;
1363
+ // tslint:disable:no-console
1364
+ console.warn(" Cannot create object", JSON.stringify(this.obj, null, " "));
1365
+ throw err;
1366
+ }
1367
+ },
1368
+ parser: {
1369
+ DisplayName: {
1370
+ finish(this: any) {
1371
+ this.parent.obj.displayName = this.text;
1372
+ }
1373
+ },
1374
+
1375
+ Description: {
1376
+ finish(this: any) {
1377
+ this.parent.obj.description = this.text;
1378
+ }
1379
+ },
1380
+ References: references_parser,
1381
+ Value: state_Variant
1382
+ }
1383
+ };
1384
+
1385
+ const state_UAMethod = {
1386
+ init(this: any, name: string, attrs: XmlAttributes) {
1387
+ this.obj = {};
1388
+ this.obj.nodeClass = NodeClass.Method;
1389
+ // MethodDeclarationId
1390
+ // ParentNodeId
1391
+ this.obj.browseName = convertQualifiedName(attrs.BrowseName);
1392
+ this.obj.parentNodeId = attrs.ParentNodeId || null;
1393
+ this.obj.nodeId = convertToNodeId(attrs.NodeId) || null;
1394
+ this.obj.methodDeclarationId = attrs.MethodDeclarationId ? _translateNodeId(attrs.MethodDeclarationId) : null;
1395
+ },
1396
+ finish(this: any) {
1397
+ _internal_createNode(this.obj);
1398
+ },
1399
+ parser: {
1400
+ DisplayName: {
1401
+ finish(this: any) {
1402
+ this.parent.obj.displayName = this.text;
1403
+ }
1404
+ },
1405
+ References: references_parser
1406
+ }
1407
+ };
1408
+
1409
+ const state_ModelTableEntry = new ReaderState({
1410
+ // ModelTableEntry
1411
+
1412
+ init(this: any) {
1413
+ this._requiredModels = [];
1414
+ },
1415
+ parser: {
1416
+ // xx "RequiredModel": null
1417
+ },
1418
+ finish(this: any) {
1419
+ const modelUri = this.attrs.ModelUri; // //"http://opcfoundation.org/UA/"
1420
+ const version = this.attrs.Version; // 1.04
1421
+ const publicationDate = this.attrs.PublicationDate; // "2018-05-15T00:00:00Z" "
1422
+ // optional,
1423
+ const symbolicName = this.attrs.SymbolicName;
1424
+ const accessRestrictions = this.attrs.AccessRestrictions;
1425
+
1426
+ const namespace = _register_namespace_uri_model({
1427
+ accessRestrictions,
1428
+ modelUri,
1429
+ publicationDate,
1430
+ requiredModels: this._requiredModels,
1431
+ symbolicName,
1432
+ version
1433
+ });
1434
+ this._requiredModels.push(namespace);
1435
+ }
1436
+ });
1437
+ // state_ModelTableEntry.parser["RequiredModel"] = state_ModelTableEntry;
1438
+
1439
+ const state_0: ReaderStateParserLike = {
1440
+ parser: {
1441
+ Aliases: { parser: { Alias: state_Alias } },
1442
+
1443
+ NamespaceUris: {
1444
+ init(this: any) {
1445
+ //
1446
+ },
1447
+ parser: {
1448
+ Uri: {
1449
+ finish(this: any) {
1450
+ _register_namespace_uri(this.text);
1451
+ }
1452
+ }
1453
+ }
1454
+ },
1455
+
1456
+ Models: {
1457
+ // ModelTable
1458
+ init(this: any) {
1459
+ //
1460
+ },
1461
+ parser: {
1462
+ Model: state_ModelTableEntry
1463
+ },
1464
+
1465
+ finish(this: any) {
1466
+ //
1467
+ }
1468
+ },
1469
+
1470
+ UADataType: state_UADataType,
1471
+ UAMethod: state_UAMethod,
1472
+ UAObject: state_UAObject,
1473
+ UAObjectType: state_UAObjectType,
1474
+ UAReferenceType: state_UAReferenceType,
1475
+ UAVariable: state_UAVariable,
1476
+ UAVariableType: state_UAVariableType
1477
+ }
1478
+ };
1479
+
1480
+ const parser = new Xml2Json(state_0);
1481
+
1482
+ function terminate(callback: SimpleCallback) {
1483
+ make_back_references(addressSpace1);
1484
+
1485
+ // setting up Server_NamespaceArray
1486
+
1487
+ if (addressSpace1.rootFolder?.objects?.server?.namespaceArray) {
1488
+ addressSpace1.rootFolder.objects.server.namespaceArray.setValueFromSource({
1489
+ arrayType: VariantArrayType.Array,
1490
+ dataType: DataType.String,
1491
+ value: addressSpace1.getNamespaceArray().map((ns) => ns.namespaceUri)
1492
+ });
1493
+ // istanbul ignore next
1494
+ if (doDebug) {
1495
+ debugLog(
1496
+ "addressSpace NS = ",
1497
+ addressSpace1.rootFolder.objects.server.namespaceArray.readValue().value.value.join(" ")
1498
+ );
1499
+ }
1500
+ }
1501
+ debugLog(
1502
+ chalk.bgGreenBright("Performing post loading tasks -------------------------------------------") + chalk.green("DONE")
1503
+ );
1504
+
1505
+ async function performPostLoadingTasks(tasks: Task[]): Promise<void> {
1506
+ for (const task of tasks) {
1507
+ try {
1508
+ await task(addressSpace1);
1509
+ } catch (err) {
1510
+ // istanbul ignore next
1511
+ // tslint:disable:no-console
1512
+ if (err instanceof Error) {
1513
+ console.log(" performPostLoadingTasks Err => ", err.message, "\n", err);
1514
+ }
1515
+ await task(addressSpace1);
1516
+ }
1517
+ }
1518
+ }
1519
+ async function finalSteps(): Promise<void> {
1520
+ /// ----------------------------------------------------------------------------------------
1521
+ // perform post task
1522
+ debugLog(chalk.bgGreenBright("Performing post loading tasks -------------------------------------------"));
1523
+ await performPostLoadingTasks(postTasks);
1524
+ postTasks = [];
1525
+
1526
+ debugLog(chalk.bgGreenBright("Performing DataType extraction -------------------------------------------"));
1527
+ assert(!addressSpace1.suspendBackReference);
1528
+ await ensureDatatypeExtracted(addressSpace);
1529
+
1530
+ /// ----------------------------------------------------------------------------------------
1531
+ debugLog(chalk.bgGreenBright("DataType extraction done ") + chalk.green("DONE"));
1532
+
1533
+ for (const { name, dataTypeNodeId } of pendingSimpleTypeToRegister) {
1534
+ if (dataTypeNodeId.namespace === 0) {
1535
+ continue;
1536
+ }
1537
+ const dataTypeManager = (addressSpace as AddressSpacePrivate).getDataTypeManager();
1538
+ const dataTypeFactory = dataTypeManager.getDataTypeFactoryForNamespace(dataTypeNodeId.namespace);
1539
+ }
1540
+ pendingSimpleTypeToRegister.splice(0);
1541
+
1542
+ debugLog(chalk.bgGreenBright("Performing post loading tasks 2 (parsing XML objects) ---------------------"));
1543
+ await performPostLoadingTasks(postTasks2);
1544
+ postTasks2 = [];
1545
+
1546
+ debugLog(chalk.bgGreenBright("Performing post variable initialization ---------------------"));
1547
+ await performPostLoadingTasks(postTaskInitializeVariable);
1548
+ postTaskInitializeVariable = [];
1549
+
1550
+ debugLog(
1551
+ chalk.bgGreenBright(
1552
+ "Performing post loading tasks 3 (assigning Extension Object to Variables) ---------------------"
1553
+ )
1554
+ );
1555
+ await performPostLoadingTasks(postTasks3);
1556
+ postTasks3 = [];
1557
+
1558
+ promoteObjectsAndVariables(addressSpace);
1559
+ }
1560
+ finalSteps()
1561
+ .then(() => callback!())
1562
+ .catch((err1: Error) => {
1563
+ console.log("Error ", pe.render(err1));
1564
+ callback!(err1);
1565
+ });
1566
+ }
1567
+ function addNodeSet(xmlData: string, callback1: SimpleCallback) {
1568
+ _reset_namespace_translation();
1569
+ parser.parseString(xmlData, callback1);
1570
+ }
1571
+
1572
+ return {
1573
+ addNodeSet,
1574
+ terminate
1575
+ };
1576
+ }
1577
+ export class NodeSetLoader {
1578
+ _s: any;
1579
+ constructor(addressSpace: IAddressSpace) {
1580
+ this._s = makeStuff(addressSpace);
1581
+ }
1582
+ addNodeSet(xmlData: string, callback: ErrorCallback): void {
1583
+ if (!callback) {
1584
+ throw new Error("Expecting callback function");
1585
+ }
1586
+ return this._s.addNodeSet(xmlData, callback);
1587
+ }
1588
+
1589
+ async addNodeSetAsync(xmlData: string): Promise<void> {
1590
+ return await new Promise((resolve) => {
1591
+ this.addNodeSet(xmlData, (err?: Error) => {
1592
+ resolve();
1593
+ });
1594
+ });
1595
+ }
1596
+
1597
+ terminate(callback: ErrorCallback): void {
1598
+ this._s.terminate(callback);
1599
+ }
1600
+ }