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,741 @@
1
+ /**
2
+ * @module node-opcua-address-space
3
+ */
4
+ // tslint:disable:max-classes-per-file
5
+ // tslint:disable:no-console
6
+ import * as chalk from "chalk";
7
+
8
+ import { assert } from "node-opcua-assert";
9
+ import { UInt32 } from "node-opcua-basic-types";
10
+ import { ReferenceTypeIds } from "node-opcua-constants";
11
+ import { coerceQualifiedName, NodeClass, QualifiedName } from "node-opcua-data-model";
12
+ import { BrowseDirection } from "node-opcua-data-model";
13
+ import { AttributeIds } from "node-opcua-data-model";
14
+ import { DataValue, DataValueLike } from "node-opcua-data-value";
15
+ import { checkDebugFlag, make_debugLog, make_warningLog } from "node-opcua-debug";
16
+ import { coerceNodeId, makeNodeId, NodeId, NodeIdLike, sameNodeId } from "node-opcua-nodeid";
17
+ import { StatusCodes } from "node-opcua-status-code";
18
+ import { isNullOrUndefined } from "node-opcua-utils";
19
+ import { DataType } from "node-opcua-variant";
20
+ import { Variant } from "node-opcua-variant";
21
+ import { VariantArrayType } from "node-opcua-variant";
22
+
23
+ import {
24
+ IAddressSpace,
25
+ AddVariableOptions,
26
+ BaseNode,
27
+ InstantiateVariableOptions,
28
+ ModellingRuleType,
29
+ INamespace,
30
+ UAMethod,
31
+ UAObject,
32
+ UAObjectType,
33
+ UAReference,
34
+ UAVariable,
35
+ UAVariableType,
36
+ CloneFilter
37
+ } from "node-opcua-address-space-base";
38
+
39
+ import { SessionContext } from "../source/session_context";
40
+ import { makeOptionalsMap, OptionalMap } from "../source/helpers/make_optionals_map";
41
+
42
+ import { AddressSpacePrivate } from "./address_space_private";
43
+ import { BaseNodeImpl, InternalBaseNodeOptions } from "./base_node_impl";
44
+ import { _clone_children_references, ToStringBuilder, UAVariableType_toString } from "./base_node_private";
45
+ import * as tools from "./tool_isSupertypeOf";
46
+ import { get_subtypeOfObj } from "./tool_isSupertypeOf";
47
+ import { get_subtypeOf } from "./tool_isSupertypeOf";
48
+ import { verifyRankAndDimensions } from "./ua_variable_impl";
49
+
50
+ const debugLog = make_debugLog(__filename);
51
+ const doDebug = checkDebugFlag(__filename);
52
+ const warningLog = make_warningLog(__filename);
53
+
54
+ interface InstantiateS {
55
+ propertyOf?: any;
56
+ componentOf?: any;
57
+ modellingRule?: ModellingRuleType;
58
+ }
59
+ export function topMostParentIsObjectTypeOrVariableType(addressSpace: AddressSpacePrivate, options: InstantiateS): boolean {
60
+ if (options.modellingRule) {
61
+ return true;
62
+ }
63
+
64
+ const parent = options.propertyOf || options.componentOf;
65
+ if (!parent) {
66
+ return false;
67
+ }
68
+ const parentNode = addressSpace._coerceNode(parent);
69
+ if (!parentNode) {
70
+ return false;
71
+ }
72
+
73
+ let currentNode: BaseNode | null = parentNode;
74
+ while (currentNode) {
75
+ const nodeClass = parentNode.nodeClass;
76
+ if (nodeClass === NodeClass.ObjectType || nodeClass === NodeClass.VariableType) {
77
+ return true;
78
+ }
79
+ if (nodeClass === NodeClass.Object || nodeClass === NodeClass.Variable || nodeClass === NodeClass.Method) {
80
+ /** */
81
+ }
82
+ currentNode = currentNode.findReferencesEx("HasChild", BrowseDirection.Inverse)[0]?.node as BaseNode;
83
+ }
84
+ return false;
85
+ }
86
+ export interface UAVariableTypeOptions extends InternalBaseNodeOptions {
87
+ /** */
88
+ valueRank?: number;
89
+ arrayDimensions?: number[] | null;
90
+ historizing?: boolean;
91
+ isAbstract?: boolean;
92
+ value?: any;
93
+ dataType: NodeIdLike;
94
+ }
95
+ export class UAVariableTypeImpl extends BaseNodeImpl implements UAVariableType {
96
+ public readonly nodeClass = NodeClass.VariableType;
97
+
98
+ public get subtypeOf(): NodeId | null {
99
+ return get_subtypeOf.call(this);
100
+ }
101
+
102
+ public get subtypeOfObj(): UAVariableType | null {
103
+ return get_subtypeOfObj.call(this) as UAVariableType;
104
+ }
105
+
106
+ public isSupertypeOf = tools.construct_isSupertypeOf<UAVariableType>(UAVariableTypeImpl);
107
+
108
+ public readonly isAbstract: boolean;
109
+ public dataType: NodeId;
110
+ public valueRank: number;
111
+ public arrayDimensions: UInt32[] | null;
112
+ public readonly minimumSamplingInterval: number;
113
+ public readonly value: any;
114
+ public historizing: boolean;
115
+
116
+ constructor(options: UAVariableTypeOptions) {
117
+ super(options);
118
+
119
+ verifyRankAndDimensions(options);
120
+ this.valueRank = options.valueRank || -1;
121
+ this.arrayDimensions = options.arrayDimensions || null;
122
+
123
+ this.minimumSamplingInterval = 0;
124
+
125
+ this.historizing = isNullOrUndefined(options.historizing) ? false : options.historizing as boolean;
126
+ this.isAbstract = isNullOrUndefined(options.isAbstract) ? false : options.isAbstract as boolean;
127
+
128
+ this.value = options.value; // optional default value for instances of this UAVariableType
129
+
130
+ this.dataType = coerceNodeId(options.dataType); // DataType (NodeId)
131
+
132
+ if (options.value) {
133
+ this.value = new Variant(options.value);
134
+ // xx console.log("setting ",this.value.toString());
135
+ }
136
+ }
137
+
138
+ public readAttribute(context: SessionContext | null, attributeId: AttributeIds): DataValue {
139
+ assert(!context || context instanceof SessionContext);
140
+
141
+ const options: DataValueLike = {};
142
+ switch (attributeId) {
143
+ case AttributeIds.IsAbstract:
144
+ options.value = { dataType: DataType.Boolean, value: this.isAbstract ? true : false };
145
+ options.statusCode = StatusCodes.Good;
146
+ break;
147
+ case AttributeIds.Value:
148
+ if (Object.prototype.hasOwnProperty.call(this, "value") && this.value !== undefined) {
149
+ assert(this.value.schema.name === "Variant");
150
+ options.value = this.value;
151
+ options.statusCode = StatusCodes.Good;
152
+ } else {
153
+ debugLog(" warning Value not implemented");
154
+ options.value = { dataType: DataType.UInt32, value: 0 };
155
+ options.statusCode = StatusCodes.BadAttributeIdInvalid;
156
+ }
157
+ break;
158
+ case AttributeIds.DataType:
159
+ assert(this.dataType instanceof NodeId);
160
+ options.value = { dataType: DataType.NodeId, value: this.dataType };
161
+ options.statusCode = StatusCodes.Good;
162
+ break;
163
+ case AttributeIds.ValueRank:
164
+ options.value = { dataType: DataType.Int32, value: this.valueRank };
165
+ options.statusCode = StatusCodes.Good;
166
+ break;
167
+ case AttributeIds.ArrayDimensions:
168
+ assert(Array.isArray(this.arrayDimensions) || this.arrayDimensions === null);
169
+ options.value = {
170
+ arrayType: VariantArrayType.Array,
171
+ dataType: DataType.UInt32,
172
+ value: this.arrayDimensions
173
+ };
174
+ options.statusCode = StatusCodes.Good;
175
+ break;
176
+ default:
177
+ return super.readAttribute(context, attributeId);
178
+ }
179
+ return new DataValue(options);
180
+ }
181
+
182
+ public toString(): string {
183
+ const options = new ToStringBuilder();
184
+ UAVariableType_toString.call(this, options);
185
+ return options.toString();
186
+ }
187
+
188
+ /**
189
+ * instantiate an object of this UAVariableType
190
+ * The instantiation takes care of object type inheritance when constructing inner properties
191
+
192
+ * Note : HasComponent usage scope
193
+ *
194
+ * ```text
195
+ * Source | Destination
196
+ * -------------------+---------------------------
197
+ * Object | Object, Variable,Method
198
+ * ObjectType |
199
+ * -------------------+---------------------------
200
+ * DataVariable | Variable
201
+ * DataVariableType |
202
+ * ```
203
+ *
204
+ * see : OPCUA 1.03 page 44 $6.4 Instances of ObjectTypes and VariableTypes
205
+ */
206
+ public instantiate(options: InstantiateVariableOptions): UAVariable {
207
+ const addressSpace = this.addressSpace as AddressSpacePrivate;
208
+ // xx assert(!this.isAbstract, "cannot instantiate abstract UAVariableType");
209
+
210
+ assert(options, "missing option object");
211
+ assert(
212
+ typeof options.browseName === "string" || (options.browseName !== null && typeof options.browseName === "object"),
213
+ "expecting a browse name"
214
+ );
215
+ assert(
216
+ !Object.prototype.hasOwnProperty.call(options, "propertyOf"),
217
+ "Use addressSpace#addVariable({ propertyOf: xxx}); to add a property"
218
+ );
219
+
220
+ assertUnusedChildBrowseName(addressSpace, options);
221
+
222
+ const baseVariableType = addressSpace.findVariableType("BaseVariableType")!;
223
+ assert(baseVariableType, "BaseVariableType must be defined in the address space");
224
+
225
+ let dataType = options.dataType !== undefined ? options.dataType : this.dataType;
226
+ // may be required (i.e YArrayItemType )
227
+
228
+ dataType = this.resolveNodeId(dataType); // DataType (NodeId)
229
+ assert(dataType instanceof NodeId);
230
+
231
+ const valueRank = options.valueRank !== undefined ? options.valueRank : this.valueRank;
232
+ const arrayDimensions = options.arrayDimensions !== undefined ? options.arrayDimensions : this.arrayDimensions;
233
+
234
+ // istanbul ignore next
235
+ if (!dataType || dataType.isEmpty()) {
236
+ warningLog(" options.dataType", options.dataType ? options.dataType.toString() : "<null>");
237
+ warningLog(" this.dataType", this.dataType ? this.dataType.toString() : "<null>");
238
+ throw new Error(" A valid dataType must be specified");
239
+ }
240
+
241
+ const copyAlsoModellingRules = topMostParentIsObjectTypeOrVariableType(addressSpace, options);
242
+
243
+ const opts: AddVariableOptions = {
244
+ arrayDimensions,
245
+ browseName: options.browseName,
246
+ componentOf: options.componentOf,
247
+ dataType,
248
+ description: options.description || this.description,
249
+ eventSourceOf: options.eventSourceOf,
250
+ minimumSamplingInterval: options.minimumSamplingInterval,
251
+ modellingRule: options.modellingRule,
252
+ nodeId: options.nodeId,
253
+ notifierOf: options.notifierOf,
254
+ organizedBy: options.organizedBy,
255
+ typeDefinition: this.nodeId,
256
+ value: options.value,
257
+ valueRank
258
+ };
259
+
260
+ const namespace: INamespace = options.namespace || addressSpace.getOwnNamespace();
261
+ const instance = namespace.addVariable(opts);
262
+
263
+ // xx assert(instance.minimumSamplingInterval === options.minimumSamplingInterval);
264
+
265
+ initialize_properties_and_components(instance, baseVariableType, this, copyAlsoModellingRules, options.optionals);
266
+
267
+ // if VariableType is a type of Structure DataType
268
+ // we need to instantiate a dataValue
269
+ // and create a bidirectional binding with the individual properties of this type
270
+ instance.bindExtensionObject(options.extensionObject);
271
+
272
+ assert(instance.typeDefinition.toString() === this.nodeId.toString());
273
+
274
+ instance.install_extra_properties();
275
+
276
+ if (this._postInstantiateFunc) {
277
+ this._postInstantiateFunc(instance, this);
278
+ }
279
+
280
+ return instance;
281
+ }
282
+ }
283
+
284
+ /**
285
+ * return true if node is a mandatory child or a requested optional
286
+ * @method MandatoryChildOrRequestedOptionalFilter
287
+ * @param instance
288
+ * @param optionalsMap
289
+ * @return {Boolean}
290
+ */
291
+ class MandatoryChildOrRequestedOptionalFilter implements CloneFilter {
292
+ private readonly instance: BaseNode;
293
+ private readonly optionalsMap: any;
294
+ private readonly references: UAReference[];
295
+
296
+ constructor(instance: BaseNode, optionalsMap: any) {
297
+ // should we clone the node to be a component or propertyOf of a instance
298
+ assert(optionalsMap !== null && typeof optionalsMap === "object");
299
+ assert(null !== instance);
300
+ this.optionalsMap = optionalsMap;
301
+ this.instance = instance;
302
+ this.references = instance.allReferences();
303
+ }
304
+
305
+ public shouldKeep(node: BaseNode): boolean {
306
+ const addressSpace = node.addressSpace;
307
+
308
+ const alreadyIn = this.references.filter((r: UAReference) => {
309
+ const n = addressSpace.findNode(r.nodeId)!;
310
+ // istanbul ignore next
311
+ if (!n) {
312
+ console.log(" cannot find node ", r.nodeId.toString());
313
+ return false;
314
+ }
315
+ return n.browseName!.name!.toString() === node.browseName!.name!.toString();
316
+ });
317
+
318
+ if (alreadyIn.length > 0) {
319
+ assert(alreadyIn.length === 1, "Duplication found ?");
320
+ // a child with the same browse name has already been install
321
+ // probably from a SuperClass, we should ignore this.
322
+ return false; // ignore
323
+ }
324
+
325
+ const modellingRule = node.modellingRule;
326
+
327
+ switch (modellingRule) {
328
+ case null:
329
+ case undefined:
330
+ return false; // skip
331
+ case "Mandatory":
332
+ return true; // keep;
333
+ case "Optional":
334
+ // only if in requested optionals
335
+ return node.browseName!.name! in this.optionalsMap;
336
+ case "OptionalPlaceholder":
337
+ return false; // ignored
338
+ default:
339
+ return false; // ignored
340
+ }
341
+ }
342
+
343
+ public filterFor(childInstance: UAVariable | UAObject | UAMethod): CloneFilter {
344
+ const browseName: string = childInstance.browseName.name!;
345
+
346
+ let map = {};
347
+
348
+ if (browseName in this.optionalsMap) {
349
+ map = this.optionalsMap[browseName];
350
+ }
351
+ const newFilter = new MandatoryChildOrRequestedOptionalFilter(childInstance, map);
352
+ return newFilter;
353
+ }
354
+ }
355
+
356
+ /*
357
+ * @function _get_parent_as_VariableOrObjectType
358
+ * @param originalObject
359
+ * @return {null|BaseNode}
360
+ * @private
361
+ */
362
+ function _get_parent_as_VariableOrObjectType(originalObject: BaseNode): UAVariableType | UAObjectType | null {
363
+ if (originalObject.nodeClass === NodeClass.Method) {
364
+ return null;
365
+ }
366
+
367
+ const addressSpace = originalObject.addressSpace;
368
+
369
+ const parents = originalObject.findReferencesEx("HasChild", BrowseDirection.Inverse);
370
+
371
+ // istanbul ignore next
372
+ if (parents.length > 1) {
373
+ console.warn(" object ", originalObject.browseName.toString(), " has more than one parent !");
374
+ console.warn(originalObject.toString());
375
+ console.warn(" parents : ");
376
+ for (const parent of parents) {
377
+ console.log(" ", parent.toString(), addressSpace.findNode(parent.nodeId)!.browseName.toString());
378
+ }
379
+ return null;
380
+ }
381
+
382
+ assert(parents.length === 0 || parents.length === 1);
383
+ if (parents.length === 0) {
384
+ return null;
385
+ }
386
+ const theParent = addressSpace.findNode(parents[0]!.nodeId)!;
387
+ if (theParent && (theParent.nodeClass === NodeClass.VariableType || theParent.nodeClass === NodeClass.ObjectType)) {
388
+ return theParent as UAVariableType | UAObjectType;
389
+ }
390
+ return null;
391
+ }
392
+
393
+ interface CloneInfo {
394
+ cloned: UAObject | UAVariable | UAMethod;
395
+ original: UAVariableType | UAObjectType;
396
+ }
397
+ class CloneHelper {
398
+ private readonly mapOrgToClone: Map<string, CloneInfo> = new Map();
399
+
400
+ public registerClonedObject<TT extends UAVariableType | UAObjectType, T extends UAObject | UAVariable | UAMethod>(
401
+ objInType: TT,
402
+ clonedObj: T
403
+ ) {
404
+ this.mapOrgToClone.set(objInType.nodeId.toString(), {
405
+ cloned: clonedObj,
406
+ original: objInType
407
+ });
408
+
409
+ //
410
+ // /-----------------------------\
411
+ // | AcknowledgeableConditionType |
412
+ // \-----------------------------/
413
+ // ^ |
414
+ // | +---------------------|- (EnabledState) (shadow element)
415
+ // |
416
+ // /-----------------------------\
417
+ // | AlarmConditionType |
418
+ // \-----------------------------/
419
+ // |
420
+ // +-------------------------------|- EnabledState <
421
+ //
422
+ // find also child object with the same browse name that are
423
+ // overridden in the SuperType
424
+ //
425
+ const origParent = _get_parent_as_VariableOrObjectType(objInType);
426
+ if (origParent) {
427
+ let base = origParent.subtypeOfObj;
428
+ while (base) {
429
+ const shadowChild = base.getChildByName(objInType.browseName) as UAObjectType | UAVariableType | null;
430
+ if (shadowChild) {
431
+ this.mapOrgToClone.set(shadowChild.nodeId.toString(), {
432
+ cloned: clonedObj,
433
+ original: shadowChild
434
+ });
435
+ }
436
+ base = base.subtypeOfObj;
437
+ }
438
+ }
439
+ // find subTypeOf
440
+ }
441
+ }
442
+
443
+ // install properties and components on a instantiated Object
444
+ //
445
+ // based on their ModelingRule
446
+ // => Mandatory => Installed
447
+ // => Optional => Not Installed , unless it appear in optionals array
448
+ // => OptionalPlaceHolder => Not Installed
449
+ // => null (no modelling rule ) => Not Installed
450
+ //
451
+
452
+ function _initialize_properties_and_components<B extends UAObject | UAVariable | UAMethod, T extends UAObjectType | UAVariableType>(
453
+ instance: B,
454
+ topMostType: T,
455
+ typeNode: T,
456
+ copyAlsoModellingRules: boolean,
457
+ optionalsMap: OptionalMap,
458
+ extraInfo: CloneHelper
459
+ ) {
460
+ if (doDebug) {
461
+ console.log("instance browseName =", instance.browseName.toString());
462
+ console.log("typeNode =", typeNode.browseName.toString());
463
+ console.log("optionalsMap =", Object.keys(optionalsMap).join(" "));
464
+
465
+ const c = typeNode.findReferencesEx("Aggregates");
466
+ console.log("type possibilities =", c.map((x) => x.node!.browseName.toString()).join(" "));
467
+ }
468
+ optionalsMap = optionalsMap || {};
469
+
470
+ if (sameNodeId(topMostType.nodeId, typeNode.nodeId)) {
471
+ return; // nothing to do
472
+ }
473
+
474
+ const baseTypeNodeId = typeNode.subtypeOf;
475
+ const baseType = typeNode.subtypeOfObj;
476
+
477
+ // istanbul ignore next
478
+ if (!baseType) {
479
+ throw new Error(chalk.red("Cannot find object with nodeId ") + baseTypeNodeId);
480
+ }
481
+
482
+ const filter = new MandatoryChildOrRequestedOptionalFilter(instance, optionalsMap);
483
+
484
+ _clone_children_references(typeNode, instance, copyAlsoModellingRules, filter, extraInfo);
485
+
486
+ // get properties and components from base class
487
+ _initialize_properties_and_components(instance, topMostType, baseType, copyAlsoModellingRules, optionalsMap, extraInfo);
488
+ }
489
+
490
+ /**
491
+ * @method hasChildWithBrowseName
492
+ * returns true if the parent object has a child with the provided browseName
493
+ * @param parent
494
+ * @param childBrowseName
495
+ */
496
+ function hasChildWithBrowseName(parent: BaseNode, childBrowseName: QualifiedName): boolean {
497
+ if (!parent) {
498
+ throw Error("Internal error");
499
+ }
500
+ // extract children
501
+ const children = parent.findReferencesAsObject("HasChild", true);
502
+
503
+ return (
504
+ children.filter((child: BaseNode) => {
505
+ return child.browseName.name?.toString() === childBrowseName.name?.toString();
506
+ }).length > 0
507
+ );
508
+ }
509
+
510
+ function getParent(addressSpace: IAddressSpace, options: any) {
511
+ const parent = options.componentOf || options.organizedBy;
512
+ if (parent instanceof NodeId) {
513
+ return addressSpace.findNode(parent as NodeId);
514
+ }
515
+ return parent;
516
+ }
517
+
518
+ export function assertUnusedChildBrowseName(addressSpace: AddressSpacePrivate, options: InstantiateVariableOptions): void {
519
+ const resolveOptionalObject = (node: BaseNode | NodeIdLike | undefined): BaseNode | undefined =>
520
+ node ? addressSpace._coerceNode(node) || undefined : undefined;
521
+
522
+ options.componentOf = resolveOptionalObject(options.componentOf);
523
+ options.organizedBy = resolveOptionalObject(options.organizedBy);
524
+
525
+ assert(!(options.componentOf && options.organizedBy));
526
+
527
+ const parent = getParent(addressSpace, options);
528
+ if (!parent) {
529
+ return;
530
+ }
531
+ assert(parent !== null && typeof parent === "object");
532
+ if (!(parent instanceof BaseNodeImpl)) {
533
+ throw new Error("Invalid parent parent is " + parent.constructor.name);
534
+ }
535
+ // istanbul ignore next
536
+ // verify that no components already exists in parent
537
+ if (parent && hasChildWithBrowseName(parent, coerceQualifiedName(options.browseName))) {
538
+ throw new Error(
539
+ "object " +
540
+ parent.browseName.name!.toString() +
541
+ " have already a child with browseName " +
542
+ options.browseName.toString()
543
+ );
544
+ }
545
+ }
546
+
547
+ exports.assertUnusedChildBrowseName = assertUnusedChildBrowseName;
548
+ exports.initialize_properties_and_components = initialize_properties_and_components;
549
+
550
+ const hasTypeDefinitionNodeId = makeNodeId(ReferenceTypeIds.HasTypeDefinition);
551
+ const hasModellingRuleNodeId = makeNodeId(ReferenceTypeIds.HasModellingRule);
552
+
553
+ /**
554
+ * remove unwanted reference such as HasTypeDefinition and HasModellingRule
555
+ * from the list
556
+ */
557
+ function _remove_unwanted_ref(references: UAReference[]): UAReference[] {
558
+ // filter out HasTypeDefinition (i=40) , HasModellingRule (i=37);
559
+ references = references.filter(
560
+ (reference: UAReference) =>
561
+ !sameNodeId(reference.referenceType, hasTypeDefinitionNodeId) &&
562
+ !sameNodeId(reference.referenceType, hasModellingRuleNodeId)
563
+ );
564
+ return references;
565
+ }
566
+
567
+ /**
568
+ *
569
+ */
570
+ function findNonHierarchicalReferences(originalObject: BaseNode): UAReference[] {
571
+ // todo: MEMOIZE this method
572
+ const addressSpace: IAddressSpace = originalObject.addressSpace;
573
+ const referenceId = addressSpace.findReferenceType("NonHierarchicalReferences");
574
+ if (!referenceId) {
575
+ return [];
576
+ }
577
+ assert(referenceId);
578
+
579
+ // we need to explore the non hierarchical references backwards
580
+ let references = originalObject.findReferencesEx("NonHierarchicalReferences", BrowseDirection.Inverse);
581
+
582
+ references = ([] as UAReference[]).concat(
583
+ references,
584
+ originalObject.findReferencesEx("HasEventSource", BrowseDirection.Inverse)
585
+ );
586
+
587
+ const parent = _get_parent_as_VariableOrObjectType(originalObject);
588
+
589
+ if (parent && parent.subtypeOfObj) {
590
+ // parent is a ObjectType or VariableType and is not a root type
591
+ assert(parent.nodeClass === NodeClass.VariableType || parent.nodeClass === NodeClass.ObjectType);
592
+
593
+ // let investigate the same child base child
594
+ const child = parent.subtypeOfObj!.getChildByName(originalObject.browseName);
595
+
596
+ if (child) {
597
+ const baseRef = findNonHierarchicalReferences(child);
598
+ // xx console.log(" ... ",originalObject.browseName.toString(),
599
+ // parent.browseName.toString(), references.length, baseRef.length);
600
+ references = ([] as UAReference[]).concat(references, baseRef);
601
+ }
602
+ }
603
+ // perform some cleanup
604
+ references = _remove_unwanted_ref(references);
605
+
606
+ return references;
607
+ }
608
+
609
+ function reconstructNonHierarchicalReferences(extraInfo: any): void {
610
+ const findImplementedObject = (ref: UAReference): CloneInfo | null =>
611
+ extraInfo.mapOrgToClone.get(ref.nodeId.toString()) || null;
612
+
613
+ // navigate through original objects to find those that are being references by node that
614
+ // have been cloned .
615
+ // this could be node organized by some FunctionalGroup
616
+ //
617
+ for (const { original, cloned } of extraInfo.mapOrgToClone.values()) {
618
+ // find NonHierarchical References on original object
619
+ const originalNonHierarchical = findNonHierarchicalReferences(original);
620
+
621
+ if (originalNonHierarchical.length === 0) {
622
+ continue;
623
+ }
624
+
625
+ // istanbul ignore next
626
+ if (doDebug) {
627
+ debugLog(
628
+ " investigation ",
629
+ original.browseName.toString(),
630
+ cloned.nodeClass.toString(),
631
+ original.nodeClass.toString(),
632
+ original.nodeId.toString(),
633
+ cloned.nodeId.toString()
634
+ );
635
+ }
636
+
637
+ for (const ref of originalNonHierarchical) {
638
+ const info = findImplementedObject(ref);
639
+
640
+ // if the object pointed by this reference is also cloned ...
641
+ if (info) {
642
+ const originalDest = info.original;
643
+ const cloneDest = info.cloned;
644
+
645
+ // istanbul ignore next
646
+ if (doDebug) {
647
+ debugLog(
648
+ chalk.cyan(" adding reference "),
649
+ ref.referenceType,
650
+ " from cloned ",
651
+ cloned.nodeId.toString(),
652
+ cloned.browseName.toString(),
653
+ " to cloned ",
654
+ cloneDest.nodeId.toString(),
655
+ cloneDest.browseName.toString()
656
+ );
657
+ }
658
+
659
+ // restore reference
660
+ cloned.addReference({
661
+ isForward: false,
662
+ nodeId: cloneDest.nodeId,
663
+ referenceType: ref.referenceType
664
+ });
665
+ }
666
+ }
667
+ }
668
+ }
669
+
670
+ /**
671
+ * recreate functional group types according to type definition
672
+ *
673
+ * @method reconstructFunctionalGroupType
674
+ * @param baseType
675
+ */
676
+
677
+ /* @example:
678
+ *
679
+ * MyDeviceType
680
+ * |
681
+ * +----------|- ParameterSet(BaseObjectType)
682
+ * | |
683
+ * | +-----------------|- Parameter1
684
+ * | ^
685
+ * +----------|- Config(FunctionalGroupType) |
686
+ * | |
687
+ * +-------- Organizes---+
688
+ */
689
+ function reconstructFunctionalGroupType(extraInfo: any) {
690
+ // navigate through original objects to find those that are being organized by some FunctionalGroup
691
+ for (const { original, cloned } of extraInfo.mapOrgToClone.values()) {
692
+ const organizedByArray = original.findReferencesEx("Organizes", BrowseDirection.Inverse);
693
+
694
+ // function dumpRef(r) {
695
+ // var referenceTd = addressSpace.findNode(r.referenceTypeId);
696
+ // var obj = addressSpace.findNode(r.nodeId);
697
+ // return "<-- " + referenceTd.browseName.toString() + " -- " + obj.browseName.toString();
698
+ // }
699
+ //
700
+ // console.log("xxxxx ========================================================",
701
+ // originalObject.browseName.toString(),
702
+ // organizedByArray.map(dumpRef).join("\n"));
703
+ for (const ref of organizedByArray) {
704
+ const info = extraInfo.mapOrgToClone.get(ref.nodeId.toString());
705
+ if (!info) continue;
706
+
707
+ const folder = info.original;
708
+
709
+ assert(folder.typeDefinitionObj.browseName.name.toString() === "FunctionalGroupType");
710
+
711
+ // now create the same reference with the instantiated function group
712
+ const destFolder = info.cloned;
713
+
714
+ assert(ref.referenceType);
715
+
716
+ destFolder.addReference({
717
+ isForward: !ref.isForward,
718
+ nodeId: cloned.nodeId,
719
+ referenceType: ref.referenceType
720
+ });
721
+ // xx console.log("xxx ============> adding reference ",ref.browse )
722
+ }
723
+ }
724
+ }
725
+
726
+ export function initialize_properties_and_components<
727
+ B extends UAObject | UAVariable | UAMethod,
728
+ T extends UAVariableType | UAObjectType
729
+ >(instance: B, topMostType: T, nodeType: T, copyAlsoModellingRules: boolean, optionals?: string[]): void {
730
+ const extraInfo = new CloneHelper();
731
+
732
+ extraInfo.registerClonedObject(nodeType, instance);
733
+
734
+ const optionalsMap = makeOptionalsMap(optionals);
735
+
736
+ _initialize_properties_and_components(instance, topMostType, nodeType, copyAlsoModellingRules, optionalsMap, extraInfo);
737
+
738
+ reconstructFunctionalGroupType(extraInfo);
739
+
740
+ reconstructNonHierarchicalReferences(extraInfo);
741
+ }