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,1763 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNonEmptyQualifiedName = exports._handle_hierarchy_parent = exports.UANamespace = void 0;
4
+ /**
5
+ * @module node-opcua-address-space
6
+ */
7
+ // tslint:disable:no-console
8
+ const chalk = require("chalk");
9
+ const node_opcua_assert_1 = require("node-opcua-assert");
10
+ const node_opcua_basic_types_1 = require("node-opcua-basic-types");
11
+ const node_opcua_data_access_1 = require("node-opcua-data-access");
12
+ const node_opcua_data_model_1 = require("node-opcua-data-model");
13
+ const node_opcua_data_model_2 = require("node-opcua-data-model");
14
+ const node_opcua_data_model_3 = require("node-opcua-data-model");
15
+ const node_opcua_data_model_4 = require("node-opcua-data-model");
16
+ const node_opcua_debug_1 = require("node-opcua-debug");
17
+ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
18
+ const node_opcua_nodeid_2 = require("node-opcua-nodeid");
19
+ const node_opcua_status_code_1 = require("node-opcua-status-code");
20
+ const node_opcua_types_1 = require("node-opcua-types");
21
+ const utils = require("node-opcua-utils");
22
+ const node_opcua_variant_1 = require("node-opcua-variant");
23
+ const address_space_change_event_tools_1 = require("./address_space_change_event_tools");
24
+ const ua_condition_impl_1 = require("./alarms_and_conditions/ua_condition_impl");
25
+ const ua_discrete_alarm_impl_1 = require("./alarms_and_conditions/ua_discrete_alarm_impl");
26
+ const ua_exclusive_deviation_alarm_impl_1 = require("./alarms_and_conditions/ua_exclusive_deviation_alarm_impl");
27
+ const ua_exclusive_limit_alarm_impl_1 = require("./alarms_and_conditions/ua_exclusive_limit_alarm_impl");
28
+ const ua_limit_alarm_impl_1 = require("./alarms_and_conditions/ua_limit_alarm_impl");
29
+ const ua_non_exclusive_deviation_alarm_impl_1 = require("./alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl");
30
+ const ua_non_exclusive_limit_alarm_impl_1 = require("./alarms_and_conditions/ua_non_exclusive_limit_alarm_impl");
31
+ const alarms_and_conditions_1 = require("./alarms_and_conditions");
32
+ const ua_off_normal_alarm_impl_1 = require("./alarms_and_conditions/ua_off_normal_alarm_impl");
33
+ const add_dataItem_stuff_1 = require("./data_access/add_dataItem_stuff");
34
+ const ua_multistate_discrete_impl_1 = require("./data_access/ua_multistate_discrete_impl");
35
+ // state machine
36
+ const ua_two_state_variable_1 = require("./state_machine/ua_two_state_variable");
37
+ //
38
+ const namespace_private_1 = require("./namespace_private");
39
+ const base_node_impl_1 = require("./base_node_impl");
40
+ const ua_variable_impl_1 = require("./ua_variable_impl");
41
+ const nodeid_manager_1 = require("./nodeid_manager");
42
+ const ua_two_state_discrete_1 = require("./data_access/ua_two_state_discrete");
43
+ const role_permissions_1 = require("./role_permissions");
44
+ const ua_object_impl_1 = require("./ua_object_impl");
45
+ const ua_data_type_impl_1 = require("./ua_data_type_impl");
46
+ const ua_object_type_impl_1 = require("./ua_object_type_impl");
47
+ const ua_method_impl_1 = require("./ua_method_impl");
48
+ const ua_variable_type_impl_1 = require("./ua_variable_type_impl");
49
+ const ua_reference_type_impl_1 = require("./ua_reference_type_impl");
50
+ const source_1 = require("../source");
51
+ const ua_view_impl_1 = require("./ua_view_impl");
52
+ const ua_multistate_value_discrete_1 = require("./data_access/ua_multistate_value_discrete");
53
+ function _makeHashKey(nodeId) {
54
+ switch (nodeId.identifierType) {
55
+ case node_opcua_nodeid_1.NodeIdType.STRING:
56
+ case node_opcua_nodeid_1.NodeIdType.GUID:
57
+ return nodeId.value;
58
+ case node_opcua_nodeid_1.NodeIdType.NUMERIC:
59
+ return nodeId.value;
60
+ default:
61
+ // istanbul ignore next
62
+ if (nodeId.identifierType !== node_opcua_nodeid_1.NodeIdType.BYTESTRING) {
63
+ throw new Error("invalid nodeIdType");
64
+ }
65
+ return nodeId.value ? nodeId.value.toString() : "OPAQUE:0";
66
+ }
67
+ }
68
+ const doDebug = false;
69
+ const regExp1 = /^(s|i|b|g)=/;
70
+ const regExpNamespaceDotBrowseName = /^[0-9]+:(.*)/;
71
+ function detachNode(node) {
72
+ const addressSpace = node.addressSpace;
73
+ const nonHierarchicalReferences = node.findReferencesEx("NonHierarchicalReferences", node_opcua_data_model_3.BrowseDirection.Inverse);
74
+ for (const ref of nonHierarchicalReferences) {
75
+ (0, node_opcua_assert_1.assert)(!ref.isForward);
76
+ ref.node.removeReference({
77
+ isForward: !ref.isForward,
78
+ nodeId: node.nodeId,
79
+ referenceType: ref.referenceType
80
+ });
81
+ }
82
+ const nonHierarchicalReferencesF = node.findReferencesEx("NonHierarchicalReferences", node_opcua_data_model_3.BrowseDirection.Forward);
83
+ for (const ref of nonHierarchicalReferencesF) {
84
+ if (!ref.node) {
85
+ // could be a special case of a frequently use target node such as ModellingRule_Mandatory that do not back trace
86
+ // their reference
87
+ continue;
88
+ }
89
+ (0, node_opcua_assert_1.assert)(ref.isForward);
90
+ ref.node.removeReference({
91
+ isForward: !ref.isForward,
92
+ nodeId: node.nodeId,
93
+ referenceType: ref.referenceType
94
+ });
95
+ }
96
+ // remove reversed Hierarchical references
97
+ const hierarchicalReferences = node.findReferencesEx("HierarchicalReferences", node_opcua_data_model_3.BrowseDirection.Inverse);
98
+ for (const ref of hierarchicalReferences) {
99
+ (0, node_opcua_assert_1.assert)(!ref.isForward);
100
+ const parent = addressSpace.findNode(ref.nodeId);
101
+ parent.removeReference({
102
+ isForward: !ref.isForward,
103
+ nodeId: node.nodeId,
104
+ referenceType: ref.referenceType
105
+ });
106
+ }
107
+ node.unpropagate_back_references();
108
+ }
109
+ /**
110
+ *
111
+ * @constructor
112
+ * @params options {Object}
113
+ * @params options.namespaceUri {string}
114
+ * @params options.addressSpace {IAddressSpace}
115
+ * @params options.index {number}
116
+ * @params options.version="" {string}
117
+ * @params options.publicationDate="" {Date}
118
+ *
119
+ */
120
+ class UANamespace {
121
+ constructor(options) {
122
+ this.version = 0;
123
+ this.publicationDate = new Date(1900, 0, 1);
124
+ (0, node_opcua_assert_1.assert)(typeof options.namespaceUri === "string");
125
+ (0, node_opcua_assert_1.assert)(typeof options.index === "number");
126
+ this.namespaceUri = options.namespaceUri;
127
+ this.addressSpace = options.addressSpace;
128
+ if (!this.addressSpace) {
129
+ throw new Error("Must specify a valid address space");
130
+ }
131
+ this.index = options.index;
132
+ this._nodeid_index = new Map();
133
+ this._aliases = new Map();
134
+ this._objectTypeMap = new Map();
135
+ this._variableTypeMap = new Map();
136
+ this._referenceTypeMap = new Map();
137
+ this._referenceTypeMapInv = new Map();
138
+ this._dataTypeMap = new Map();
139
+ this._nodeIdManager = new nodeid_manager_1.NodeIdManager(this.index, this.addressSpace);
140
+ }
141
+ getDefaultNamespace() {
142
+ return this.index === 0 ? this : this.addressSpace.getDefaultNamespace();
143
+ }
144
+ dispose() {
145
+ for (const node of this.nodeIterator()) {
146
+ node.dispose();
147
+ }
148
+ this._nodeid_index = new Map();
149
+ this._aliases = new Map();
150
+ this.addressSpace = {};
151
+ this._objectTypeMap = new Map();
152
+ this._variableTypeMap = new Map();
153
+ this._referenceTypeMap = new Map();
154
+ this._referenceTypeMapInv = new Map();
155
+ this._dataTypeMap = new Map();
156
+ }
157
+ nodeIterator() {
158
+ return this._nodeid_index.values();
159
+ }
160
+ _objectTypeIterator() {
161
+ return this._objectTypeMap.values();
162
+ }
163
+ _objectTypeCount() {
164
+ return this._objectTypeMap.size;
165
+ }
166
+ _variableTypeIterator() {
167
+ return this._variableTypeMap.values();
168
+ }
169
+ _variableTypeCount() {
170
+ return this._variableTypeMap.size;
171
+ }
172
+ _dataTypeIterator() {
173
+ return this._dataTypeMap.values();
174
+ }
175
+ _dataTypeCount() {
176
+ return this._dataTypeMap.size;
177
+ }
178
+ _referenceTypeIterator() {
179
+ return this._referenceTypeMap.values();
180
+ }
181
+ _referenceTypeCount() {
182
+ return this._referenceTypeMap.size;
183
+ }
184
+ _aliasCount() {
185
+ return this._aliases.size;
186
+ }
187
+ findNode2(nodeId) {
188
+ // this one is faster assuming you have a nodeId
189
+ (0, node_opcua_assert_1.assert)(nodeId.namespace === this.index);
190
+ return this._nodeid_index.get(_makeHashKey(nodeId)) || null;
191
+ }
192
+ findNode(nodeId) {
193
+ if (typeof nodeId === "string") {
194
+ if (nodeId.match(regExp1)) {
195
+ nodeId = "ns=" + this.index + ";" + nodeId;
196
+ }
197
+ }
198
+ nodeId = (0, node_opcua_nodeid_1.resolveNodeId)(nodeId);
199
+ return this.findNode2(nodeId);
200
+ }
201
+ /**
202
+ *
203
+ * @param objectTypeName {String}
204
+ * @return {UAObjectType|null}
205
+ */
206
+ findObjectType(objectTypeName) {
207
+ return this._objectTypeMap.get(objectTypeName) || null;
208
+ }
209
+ /**
210
+ *
211
+ * @param variableTypeName {String}
212
+ * @returns {UAVariableType|null}
213
+ */
214
+ findVariableType(variableTypeName) {
215
+ return this._variableTypeMap.get(variableTypeName) || null;
216
+ }
217
+ /**
218
+ *
219
+ * @param dataTypeName {String}
220
+ * @returns {UADataType|null}
221
+ */
222
+ findDataType(dataTypeName) {
223
+ return this._dataTypeMap.get(dataTypeName) || null;
224
+ }
225
+ /**
226
+ *
227
+ * @param referenceTypeName {String}
228
+ * @returns {ReferenceType|null}
229
+ */
230
+ findReferenceType(referenceTypeName) {
231
+ return this._referenceTypeMap.get(referenceTypeName) || null;
232
+ }
233
+ /**
234
+ * find a ReferenceType by its inverse name.
235
+ * @method findReferenceTypeFromInverseName
236
+ * @param inverseName {String} the inverse name of the ReferenceType to find
237
+ * @return {ReferenceType}
238
+ */
239
+ findReferenceTypeFromInverseName(inverseName) {
240
+ (0, node_opcua_assert_1.assert)(typeof inverseName === "string");
241
+ const node = this._referenceTypeMapInv.get(inverseName);
242
+ (0, node_opcua_assert_1.assert)(!node || (node.nodeClass === node_opcua_data_model_4.NodeClass.ReferenceType && node.inverseName.text === inverseName));
243
+ return node ? node : null;
244
+ }
245
+ /**
246
+ *
247
+ * @method addAlias
248
+ * @param alias_name {String} the alias name
249
+ * @param nodeId {NodeId} NodeId must belong to this namespace
250
+ */
251
+ addAlias(alias_name, nodeId) {
252
+ (0, node_opcua_assert_1.assert)(typeof alias_name === "string");
253
+ (0, node_opcua_assert_1.assert)(nodeId instanceof node_opcua_nodeid_2.NodeId);
254
+ (0, node_opcua_assert_1.assert)(nodeId.namespace === this.index);
255
+ this._aliases.set(alias_name, nodeId);
256
+ }
257
+ resolveAlias(name) {
258
+ return this._aliases.get(name) || null;
259
+ }
260
+ /**
261
+ * add a new Object type to the address space
262
+ * @method addObjectType
263
+ * @param options
264
+ * @param options.browseName {String} the object type name
265
+ * @param [options.displayName] {String|LocalizedText} the display name
266
+ * @param [options.subtypeOf="BaseObjectType"] {String|NodeId|BaseNode} the base class
267
+ * @param [options.nodeId] {String|NodeId} an optional nodeId for this objectType,
268
+ * if not provided a new nodeId will be created
269
+ * @param [options.isAbstract = false] {Boolean}
270
+ * @param [options.eventNotifier = 0] {Integer}
271
+ * @param [options.postInstantiateFunc = null] {Function}
272
+ *
273
+ */
274
+ addObjectType(options) {
275
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "dataType"), "an objectType should not have a dataType");
276
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "valueRank"), "an objectType should not have a valueRank");
277
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "arrayDimensions"), "an objectType should not have a arrayDimensions");
278
+ return this._addObjectOrVariableType(options, "BaseObjectType", node_opcua_data_model_4.NodeClass.ObjectType);
279
+ }
280
+ /**
281
+ * add a new Variable type to the address space
282
+ * @method addVariableType
283
+ * @param options
284
+ * @param options.browseName {String} the object type name
285
+ * @param [options.displayName] {String|LocalizedText} the display name
286
+ * @param [options.subtypeOf="BaseVariableType"] {String|NodeId|BaseNode} the base class
287
+ * @param [options.nodeId] {String|NodeId} an optional nodeId for this objectType,
288
+ * if not provided a new nodeId will be created
289
+ * @param [options.isAbstract = false] {Boolean}
290
+ * @param options.dataType {String|NodeId} the variable DataType
291
+ * @param [options.valueRank = -1]
292
+ * @param [options.arrayDimensions = null] { Array<Int>>
293
+ *
294
+ */
295
+ addVariableType(options) {
296
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "arrayDimension"), "Do you mean ArrayDimensions ?");
297
+ // dataType
298
+ options.dataType = options.dataType || "Int32";
299
+ options.dataType = this.addressSpace._coerce_DataType(options.dataType);
300
+ // valueRank/ arrayDimensions
301
+ (0, ua_variable_impl_1.verifyRankAndDimensions)(options);
302
+ // arrayDimensions
303
+ const variableType = this._addObjectOrVariableType(options, "BaseVariableType", node_opcua_data_model_4.NodeClass.VariableType);
304
+ variableType.dataType = options.dataType;
305
+ variableType.valueRank = options.valueRank || 0;
306
+ variableType.arrayDimensions = options.arrayDimensions;
307
+ return variableType;
308
+ }
309
+ /**
310
+ * add a variable as a component of the parent node
311
+ *
312
+ * @method addVariable
313
+ * @param options
314
+ * @param options.browseName the variable name
315
+ * @param options.dataType the variable datatype ( "Double", "UInt8" etc...)
316
+ * @param [options.typeDefinition="BaseDataVariableType"]
317
+ * @param [options.modellingRule=null] the Modelling rule : "Optional" , "Mandatory"
318
+ * @param [options.valueRank= -1] the valueRank
319
+ * @param [options.arrayDimensions]
320
+ * @return UAVariable
321
+ */
322
+ addVariable(options) {
323
+ (0, node_opcua_assert_1.assert)(arguments.length === 1, "Invalid arguments IAddressSpace#addVariable now takes only one argument.");
324
+ if (Object.prototype.hasOwnProperty.call(options, "propertyOf") && options.propertyOf) {
325
+ (0, node_opcua_assert_1.assert)(!options.typeDefinition || options.typeDefinition === "PropertyType");
326
+ options.typeDefinition = options.typeDefinition || "PropertyType";
327
+ }
328
+ else {
329
+ (0, node_opcua_assert_1.assert)(!options.typeDefinition || options.typeDefinition !== "PropertyType");
330
+ }
331
+ return this._addVariable(options);
332
+ }
333
+ addView(options) {
334
+ (0, node_opcua_assert_1.assert)(arguments.length === 1, "Namespace#addView expecting a single argument");
335
+ (0, node_opcua_assert_1.assert)(options);
336
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "browseName"));
337
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "organizedBy"));
338
+ const browseName = options.browseName;
339
+ (0, node_opcua_assert_1.assert)(typeof browseName === "string");
340
+ const addressSpace = this.addressSpace;
341
+ const baseDataVariableTypeId = addressSpace.findVariableType("BaseDataVariableType").nodeId;
342
+ // ------------------------------------------ TypeDefinition
343
+ const typeDefinition = options.typeDefinition || baseDataVariableTypeId;
344
+ options.references = options.references || [];
345
+ options.references.push({
346
+ isForward: true,
347
+ nodeId: typeDefinition,
348
+ referenceType: "HasTypeDefinition"
349
+ });
350
+ // xx assert(this.FolderTypeId && this.BaseObjectTypeId); // is default address space generated.?
351
+ const createOptions = options;
352
+ (0, node_opcua_assert_1.assert)(!createOptions.nodeClass);
353
+ createOptions.nodeClass = node_opcua_data_model_4.NodeClass.View;
354
+ const view = this.createNode(createOptions);
355
+ (0, node_opcua_assert_1.assert)(view.nodeId instanceof node_opcua_nodeid_2.NodeId);
356
+ (0, node_opcua_assert_1.assert)(view.nodeClass === node_opcua_data_model_4.NodeClass.View);
357
+ return view;
358
+ }
359
+ addObject(options1) {
360
+ const options = options1;
361
+ (0, node_opcua_assert_1.assert)(!options.nodeClass || options.nodeClass === node_opcua_data_model_4.NodeClass.Object);
362
+ options.nodeClass = node_opcua_data_model_4.NodeClass.Object;
363
+ const typeDefinition = options.typeDefinition || "BaseObjectType";
364
+ options.references = options.references || [];
365
+ options.references.push({ referenceType: "HasTypeDefinition", isForward: true, nodeId: typeDefinition });
366
+ options.eventNotifier = +options.eventNotifier;
367
+ const obj = this.createNode(options);
368
+ (0, node_opcua_assert_1.assert)(obj instanceof ua_object_impl_1.UAObjectImpl);
369
+ (0, node_opcua_assert_1.assert)(obj.nodeClass === node_opcua_data_model_4.NodeClass.Object);
370
+ return obj;
371
+ }
372
+ /**
373
+ *
374
+ * @method addFolder
375
+ * @param parentFolder
376
+ * @param options {String|Object}
377
+ * @param options.browseName {String} the name of the folder
378
+ * @param [options.nodeId] {NodeId}. An optional nodeId for this object
379
+ *
380
+ * @return {BaseNode}
381
+ */
382
+ addFolder(parentFolder, options) {
383
+ if (typeof options === "string") {
384
+ options = { browseName: options };
385
+ }
386
+ const addressSpace = this.addressSpace;
387
+ (0, node_opcua_assert_1.assert)(!options.typeDefinition, "addFolder does not expect typeDefinition to be defined ");
388
+ const typeDefinition = addressSpace._coerceTypeDefinition("FolderType");
389
+ parentFolder = addressSpace._coerceFolder(parentFolder);
390
+ options.nodeClass = node_opcua_data_model_4.NodeClass.Object;
391
+ options.references = [
392
+ { referenceType: "HasTypeDefinition", isForward: true, nodeId: typeDefinition },
393
+ { referenceType: "Organizes", isForward: false, nodeId: parentFolder.nodeId }
394
+ ];
395
+ const node = this.createNode(options);
396
+ return node;
397
+ }
398
+ /**
399
+ * @method addReferenceType
400
+ * @param options
401
+ * @param options.isAbstract
402
+ * @param options.browseName
403
+ * @param options.inverseName
404
+ */
405
+ addReferenceType(options) {
406
+ const namespace = this;
407
+ const addressSpace = namespace.addressSpace;
408
+ const options1 = options;
409
+ options1.nodeClass = node_opcua_data_model_4.NodeClass.ReferenceType;
410
+ options1.references = options1.references || [];
411
+ if (options.subtypeOf) {
412
+ const subtypeOfNodeId = addressSpace._coerceType(options.subtypeOf, "References", node_opcua_data_model_4.NodeClass.ReferenceType);
413
+ (0, node_opcua_assert_1.assert)(subtypeOfNodeId);
414
+ options1.references.push({
415
+ isForward: false,
416
+ nodeId: subtypeOfNodeId,
417
+ referenceType: "HasSubtype"
418
+ });
419
+ }
420
+ const node = namespace.internalCreateNode(options1);
421
+ node.propagate_back_references();
422
+ return node;
423
+ }
424
+ /**
425
+ */
426
+ addMultiStateDiscrete(options) {
427
+ return (0, ua_multistate_discrete_impl_1._addMultiStateDiscrete)(this, options);
428
+ }
429
+ /**
430
+ * @method createDataType
431
+ */
432
+ createDataType(options) {
433
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "isAbstract"), "must provide isAbstract");
434
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "nodeClass"));
435
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "browseName"), "must provide a browseName");
436
+ const options1 = options;
437
+ options1.nodeClass = node_opcua_data_model_4.NodeClass.DataType;
438
+ options1.references = options.references || [];
439
+ if (options1.references.length === 0) {
440
+ if (!options1.subtypeOf) {
441
+ throw new Error("must provide a subtypeOf");
442
+ }
443
+ }
444
+ if (options1.subtypeOf) {
445
+ if (!(options1.subtypeOf instanceof ua_data_type_impl_1.UADataTypeImpl)) {
446
+ options1.subtypeOf = this.addressSpace.findDataType(options1.subtypeOf);
447
+ }
448
+ if (!options1.subtypeOf) {
449
+ throw new Error("cannot find subtypeOf ");
450
+ }
451
+ options1.references.push({
452
+ isForward: false,
453
+ nodeId: options1.subtypeOf.nodeId,
454
+ referenceType: "HasSubtype"
455
+ });
456
+ }
457
+ const node = this.internalCreateNode(options);
458
+ return node;
459
+ }
460
+ /**
461
+ * @method createNode
462
+ * @param options
463
+ * @param options.nodeClass
464
+ * @param [options.nodeVersion {String} = "0" ] install nodeVersion
465
+ * @param [options.modellingRule {String} = null]
466
+ * @internal
467
+ */
468
+ createNode(options) {
469
+ let node = null;
470
+ const addressSpace = this.addressSpace;
471
+ addressSpace.modelChangeTransaction(() => {
472
+ (0, node_opcua_assert_1.assert)(isNonEmptyQualifiedName(options.browseName));
473
+ // xx assert(Object.prototype.hasOwnProperty.call(options,"browseName") && options.browseName.length > 0);
474
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "nodeClass"));
475
+ options.references = addressSpace.normalizeReferenceTypes(options.references);
476
+ const references = _copy_references(options.references);
477
+ _handle_hierarchy_parent(addressSpace, references, options);
478
+ _handle_event_hierarchy_parent(addressSpace, references, options);
479
+ (0, namespace_private_1.UANamespace_process_modelling_rule)(references, options.modellingRule);
480
+ options.references = references;
481
+ node = this.internalCreateNode(options);
482
+ (0, node_opcua_assert_1.assert)(node.nodeId instanceof node_opcua_nodeid_2.NodeId);
483
+ node.propagate_back_references();
484
+ node.install_extra_properties();
485
+ _handle_node_version(node, options);
486
+ (0, address_space_change_event_tools_1._handle_model_change_event)(node);
487
+ });
488
+ return node;
489
+ }
490
+ /**
491
+ * remove the specified Node from the address space
492
+ *
493
+ * @method deleteNode
494
+ * @param nodeOrNodeId
495
+ *
496
+ *
497
+ */
498
+ deleteNode(nodeOrNodeId) {
499
+ let node = null;
500
+ let nodeId = node_opcua_nodeid_2.NodeId.nullNodeId;
501
+ if (nodeOrNodeId instanceof node_opcua_nodeid_2.NodeId) {
502
+ nodeId = nodeOrNodeId;
503
+ node = this.findNode(nodeId);
504
+ // istanbul ignore next
505
+ if (!node) {
506
+ throw new Error(" deleteNode : cannot find node with nodeId" + nodeId.toString());
507
+ }
508
+ }
509
+ else if (nodeOrNodeId instanceof base_node_impl_1.BaseNodeImpl) {
510
+ node = nodeOrNodeId;
511
+ nodeId = node.nodeId;
512
+ }
513
+ // istanbul ignore next
514
+ if (nodeId.namespace !== this.index) {
515
+ throw new Error("this node doesn't belong to this namespace");
516
+ }
517
+ const addressSpace = this.addressSpace;
518
+ addressSpace.modelChangeTransaction(() => {
519
+ /* istanbul ignore next */
520
+ if (!node) {
521
+ throw new Error("this node doesn't belong to this namespace");
522
+ }
523
+ // notify parent that node is being removed
524
+ const hierarchicalReferences = node.findReferencesEx("HierarchicalReferences", node_opcua_data_model_3.BrowseDirection.Inverse);
525
+ for (const ref of hierarchicalReferences) {
526
+ (0, node_opcua_assert_1.assert)(!ref.isForward);
527
+ const parent = addressSpace.findNode(ref.nodeId);
528
+ (0, node_opcua_assert_1.assert)(parent);
529
+ parent._on_child_removed(node);
530
+ }
531
+ function deleteNodePointedByReference(ref) {
532
+ const o = addressSpace.findNode(ref.nodeId);
533
+ addressSpace.deleteNode(o.nodeId);
534
+ }
535
+ // recursively delete all nodes below in the hierarchy of nodes
536
+ // TODO : a better idea would be to extract any references of type "HasChild"
537
+ const components = node.findReferencesEx("HasComponent", node_opcua_data_model_3.BrowseDirection.Forward);
538
+ const properties = node.findReferencesEx("HasProperty", node_opcua_data_model_3.BrowseDirection.Forward);
539
+ // TODO: shall we delete nodes pointed by "Organizes" links here ?
540
+ const subFolders = node.findReferencesEx("Organizes", node_opcua_data_model_3.BrowseDirection.Forward);
541
+ for (const r of components) {
542
+ deleteNodePointedByReference(r);
543
+ }
544
+ for (const r of properties) {
545
+ deleteNodePointedByReference(r);
546
+ }
547
+ for (const r of subFolders) {
548
+ deleteNodePointedByReference(r);
549
+ }
550
+ (0, address_space_change_event_tools_1._handle_delete_node_model_change_event)(node);
551
+ detachNode(node);
552
+ // delete nodes from global index
553
+ const namespace = addressSpace.getNamespace(node.nodeId.namespace);
554
+ namespace._deleteNode(node);
555
+ });
556
+ }
557
+ /**
558
+ * @internals
559
+ */
560
+ getStandardsNodeIds() {
561
+ const standardNodeIds = {
562
+ objectTypeIds: {},
563
+ referenceTypeIds: {}
564
+ };
565
+ for (const referenceType of this._referenceTypeMap.values()) {
566
+ standardNodeIds.referenceTypeIds[referenceType.browseName.name] = referenceType.nodeId.toString();
567
+ }
568
+ for (const objectType of this._objectTypeMap.values()) {
569
+ standardNodeIds.objectTypeIds[objectType.browseName.name] = objectType.nodeId.toString();
570
+ }
571
+ return standardNodeIds;
572
+ }
573
+ // - Events --------------------------------------------------------------------------------------
574
+ /**
575
+ * add a new event type to the address space
576
+ * @method addEventType
577
+ * @param options
578
+ * @param options.browseName {String} the eventType name
579
+ * @param [options.subtypeOf ="BaseEventType"]
580
+ * @param [options.isAbstract = true]
581
+ * @return {UAObjectType} : the object type
582
+ *
583
+ * @example
584
+ *
585
+ * var evtType = namespace.addEventType({
586
+ * browseName: "MyAuditEventType",
587
+ * subtypeOf: "AuditEventType"
588
+ * });
589
+ * var myConditionType = namespace.addEventType({
590
+ * browseName: "MyConditionType",
591
+ * subtypeOf: "ConditionType",
592
+ * isAbstract: false
593
+ * });
594
+ *
595
+ */
596
+ addEventType(options) {
597
+ options.subtypeOf = options.subtypeOf || "BaseEventType";
598
+ // are eventType always abstract ?? No => Condition can be instantiated!
599
+ // but, by default is abstract is true
600
+ options.isAbstract = Object.prototype.hasOwnProperty.call(options, "isAbstract") ? !!options.isAbstract : true;
601
+ return this.addObjectType(options);
602
+ }
603
+ // ---------------------------------------------------------------------------------------------------
604
+ /**
605
+ * @method addDataItem
606
+ * @param options
607
+ * @param options.browseName {String}
608
+ * @param options.definition {String}
609
+ * @param [options.valuePrecision {Double |null} =null]
610
+ * @param options.dataType {NodeId} // todo :check
611
+ * @param options.value
612
+ * @param options.componentOf
613
+ * @return {UAVariable}
614
+ */
615
+ addDataItem(options) {
616
+ const namespace = this;
617
+ const addressSpace = namespace.addressSpace;
618
+ const dataType = options.dataType || "Number";
619
+ const dataItemType = addressSpace.findVariableType("DataItemType");
620
+ if (!dataItemType) {
621
+ throw new Error("Cannot find DataItemType");
622
+ }
623
+ const variable = namespace.addVariable(Object.assign(Object.assign({}, options), { dataType, typeDefinition: dataItemType.nodeId }));
624
+ (0, add_dataItem_stuff_1.add_dataItem_stuff)(variable, options);
625
+ variable.install_extra_properties();
626
+ return variable;
627
+ }
628
+ /**
629
+ *
630
+ * @method addAnalogDataItem
631
+ *
632
+ * AnalogDataItem DataItems that represent continuously-variable physical quantities ( e.g., length, temperature),
633
+ * in contrast to the digital representation of data in discrete items
634
+ * NOTE Typical examples are the values provided by temperature sensors or pressure sensors. OPC UA defines a
635
+ * specific UAVariableType to identify an AnalogItem. Properties describe the possible ranges of AnalogItems.
636
+ *
637
+ *
638
+ * @example:
639
+ *
640
+ *
641
+ * namespace.add_analog_dataItem({
642
+ * componentOf: parentObject,
643
+ * browseName: "TemperatureSensor",
644
+ *
645
+ * definition: "(tempA -25) + tempB",
646
+ * valuePrecision: 0.5,
647
+ * //-
648
+ * instrumentRange: { low: 100 , high: 200}, // optional
649
+ * engineeringUnitsRange: { low: 100 , high: 200}, // mandatory
650
+ * engineeringUnits: standardUnits.degree_celsius,, // optional
651
+ *
652
+ * // access level
653
+ * accessLevel: 1
654
+ * minimumSamplingInterval: 10,
655
+ *
656
+ * });
657
+ *
658
+ * @param options
659
+ * @param options.browseName {String}
660
+ * @param options.definition {String}
661
+ * @param [options.valuePrecision {Double |null} =null]
662
+ * @param options.instrumentRange
663
+ * @param options.instrumentRange.low {Double}
664
+ * @param options.instrumentRange.high {Double}
665
+ * @param options.engineeringUnitsRange.low {Double}
666
+ * @param options.engineeringUnitsRange.high {Double}
667
+ * @param options.engineeringUnits {String}
668
+ * @param options.dataType {NodeId} // todo :check
669
+ * @param [options.accessLevel {AccessLevelFlag} = "CurrentRead | CurrentWrite"]
670
+ * @param [options.userAccessLevel {AccessLevelFlag} = "CurrentRead | CurrentWrite"]
671
+ * @param options.value
672
+ * @param [options.modellingRule]
673
+ * @return {UAVariable}
674
+ */
675
+ addAnalogDataItem(options) {
676
+ const namespace = this;
677
+ const addressSpace = namespace.addressSpace;
678
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "engineeringUnitsRange"), "expecting engineeringUnitsRange");
679
+ const dataType = options.dataType || "Number";
680
+ const analogItemType = addressSpace.findVariableType("AnalogItemType");
681
+ if (!analogItemType) {
682
+ throw new Error("expecting AnalogItemType to be defined , check nodeset xml file");
683
+ }
684
+ const clone_options = Object.assign(Object.assign({}, options), { dataType, typeDefinition: analogItemType.nodeId });
685
+ const variable = namespace.addVariable(clone_options);
686
+ // var variable = namespace.addVariable({
687
+ // componentOf: options.componentOf,
688
+ // organizedBy: options.organizedBy,
689
+ // browseName: options.browseName,
690
+ // nodeId: options.nodeId,
691
+ // value: options.value,
692
+ // accessLevel: options.accessLevel,
693
+ // userAccessLevel: options.userAccessLevel,
694
+ // modellingRule: options.modellingRule
695
+ //
696
+ // typeDefinition: analogItemType.nodeId,
697
+ // dataType: dataType,
698
+ // });
699
+ (0, add_dataItem_stuff_1.add_dataItem_stuff)(variable, options);
700
+ // mandatory (EURange in the specs)
701
+ // OPC Unified Architecture, Part 8 6 Release 1.02
702
+ // EURange defines the value range likely to be obtained in normal operation. It is intended for such
703
+ // use as automatically scaling a bar graph display
704
+ // Sensor or instrument failure or deactivation can result in a return ed item value which is actually
705
+ // outside of this range. Client software must be prepared to deal with this possibility. Similarly a client
706
+ // may attempt to write a value that is outside of this range back to the server. The exact behavior
707
+ // (accept, reject, clamp, etc.) in this case is server - dependent. However , in general servers shall be
708
+ // prepared to handle this.
709
+ // Example: EURange ::= {-200.0,1400.0}
710
+ const euRange = namespace.addVariable({
711
+ browseName: { name: "EURange", namespaceIndex: 0 },
712
+ dataType: "Range",
713
+ minimumSamplingInterval: 0,
714
+ modellingRule: options.modellingRule,
715
+ propertyOf: variable,
716
+ typeDefinition: "PropertyType",
717
+ value: new node_opcua_variant_1.Variant({
718
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
719
+ value: new node_opcua_types_1.Range(options.engineeringUnitsRange)
720
+ })
721
+ });
722
+ (0, node_opcua_assert_1.assert)(euRange.readValue().value.value instanceof node_opcua_types_1.Range);
723
+ const handler = variable.handle_semantic_changed.bind(variable);
724
+ euRange.on("value_changed", handler);
725
+ if (Object.prototype.hasOwnProperty.call(options, "instrumentRange")) {
726
+ const instrumentRange = namespace.addVariable({
727
+ accessLevel: "CurrentRead | CurrentWrite",
728
+ browseName: { name: "InstrumentRange", namespaceIndex: 0 },
729
+ dataType: "Range",
730
+ minimumSamplingInterval: 0,
731
+ modellingRule: options.modellingRule ? "Mandatory" : undefined,
732
+ propertyOf: variable,
733
+ typeDefinition: "PropertyType",
734
+ value: new node_opcua_variant_1.Variant({
735
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
736
+ value: new node_opcua_types_1.Range(options.instrumentRange)
737
+ })
738
+ });
739
+ instrumentRange.on("value_changed", handler);
740
+ }
741
+ if (Object.prototype.hasOwnProperty.call(options, "engineeringUnits")) {
742
+ const engineeringUnits = new node_opcua_types_1.EUInformation(options.engineeringUnits);
743
+ (0, node_opcua_assert_1.assert)(engineeringUnits instanceof node_opcua_types_1.EUInformation, "expecting engineering units");
744
+ // EngineeringUnits specifies the units for the DataItem‟s value (e.g., degree, hertz, seconds). The
745
+ // EUInformation type is specified in 5.6.3.
746
+ const eu = namespace.addVariable({
747
+ accessLevel: "CurrentRead",
748
+ browseName: { name: "EngineeringUnits", namespaceIndex: 0 },
749
+ dataType: "EUInformation",
750
+ minimumSamplingInterval: 0,
751
+ modellingRule: options.modellingRule ? "Mandatory" : undefined,
752
+ propertyOf: variable,
753
+ typeDefinition: "PropertyType",
754
+ value: new node_opcua_variant_1.Variant({
755
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
756
+ value: engineeringUnits
757
+ })
758
+ });
759
+ eu.on("value_changed", handler);
760
+ }
761
+ variable.install_extra_properties();
762
+ return variable;
763
+ }
764
+ /**
765
+ *
766
+ * @method addMultiStateValueDiscrete
767
+ * @param options {Object}
768
+ * @param options.browseName {String}
769
+ * @param [options.nodeId {NodeId}]
770
+ * @param [options.value {UInt32} = 0 }
771
+ * @param options.enumValues { EnumValueType[]| {Key,Value} }
772
+ * @return {Object|UAVariable}
773
+ *
774
+ * @example
775
+ *
776
+ *
777
+ * namespace.addMultiStateValueDiscrete({
778
+ * componentOf:parentObj,
779
+ * browseName: "myVar",
780
+ * enumValues: {
781
+ * "Red": 0xFF0000,
782
+ * "Green": 0x00FF00,
783
+ * "Blue": 0x0000FF
784
+ * }
785
+ * });
786
+ * addMultiStateValueDiscrete(parentObj,{
787
+ * browseName: "myVar",
788
+ * enumValues: [
789
+ * {
790
+ * value: 0xFF0000,
791
+ * displayName: "Red",
792
+ * description: " The color Red"
793
+ * },
794
+ * {
795
+ * value: 0x00FF000,
796
+ * displayName: "Green",
797
+ * description: " The color Green"
798
+ * },
799
+ * {
800
+ * value: 0x0000FF,
801
+ * displayName: "Blue",
802
+ * description: " The color Blue"
803
+ * }
804
+ *
805
+ * ]
806
+ * });
807
+ */
808
+ addMultiStateValueDiscrete(options) {
809
+ return (0, ua_multistate_value_discrete_1._addMultiStateValueDiscrete)(this, options);
810
+ }
811
+ // -
812
+ /**
813
+ *
814
+ * @method addYArrayItem
815
+ * @param options
816
+ * @param options.componentOf {NodeId}
817
+ * @param options.browseName {String}
818
+ * @param options.title {String}
819
+ * @param [options.instrumentRange]
820
+ * @param [options.instrumentRange.low] {Double}
821
+ * @param [options.instrumentRange.high] {Double}
822
+ * @param options.engineeringUnitsRange.low {Double}
823
+ * @param options.engineeringUnitsRange.high {Double}
824
+ * @param options.engineeringUnits {String}
825
+ * @param [options.nodeId = {NodeId}]
826
+ * @param options.accessLevel
827
+ * @param options.userAccessLevel
828
+ * @param options.title {String}
829
+ * @param options.axisScaleType {AxisScaleEnumeration}
830
+ *
831
+ * @param options.xAxisDefinition {AxisInformation}
832
+ * @param options.xAxisDefinition.engineeringUnits EURange
833
+ * @param options.xAxisDefinition.range
834
+ * @param options.xAxisDefinition.range.low
835
+ * @param options.xAxisDefinition.range.high
836
+ * @param options.xAxisDefinition.title {LocalizedText}
837
+ * @param options.xAxisDefinition.axisScaleType {AxisScaleEnumeration}
838
+ * @param options.xAxisDefinition.axisSteps = <null> {Array<Double>}
839
+ * @param options.value
840
+ */
841
+ addYArrayItem(options) {
842
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "engineeringUnitsRange"), "expecting engineeringUnitsRange");
843
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "axisScaleType"), "expecting axisScaleType");
844
+ (0, node_opcua_assert_1.assert)(options.xAxisDefinition !== null && typeof options.xAxisDefinition === "object", "expecting a xAxisDefinition");
845
+ const addressSpace = this.addressSpace;
846
+ const YArrayItemType = addressSpace.findVariableType("YArrayItemType");
847
+ if (!YArrayItemType) {
848
+ throw new Error("expecting YArrayItemType to be defined , check nodeset xml file");
849
+ }
850
+ function toNodeId(options) {
851
+ if (!options) {
852
+ return (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_variant_1.DataType.Float);
853
+ }
854
+ if (Object.prototype.hasOwnProperty.call(options, "nodeId") || options instanceof base_node_impl_1.BaseNodeImpl) {
855
+ return options.nodeId;
856
+ }
857
+ return (0, node_opcua_nodeid_1.resolveNodeId)(options);
858
+ }
859
+ const dataType = toNodeId(options.dataType);
860
+ const optionals = [];
861
+ if (Object.prototype.hasOwnProperty.call(options, "instrumentRange")) {
862
+ optionals.push("InstrumentRange");
863
+ }
864
+ const variable = YArrayItemType.instantiate({
865
+ browseName: options.browseName,
866
+ componentOf: options.componentOf,
867
+ dataType,
868
+ optionals
869
+ });
870
+ function coerceAxisScale(value) {
871
+ const ret = node_opcua_data_access_1.AxisScaleEnumeration[value];
872
+ (0, node_opcua_assert_1.assert)(!utils.isNullOrUndefined(ret));
873
+ return ret;
874
+ }
875
+ variable.setValueFromSource(options.value, node_opcua_status_code_1.StatusCodes.Good);
876
+ variable.euRange.setValueFromSource(new node_opcua_variant_1.Variant({
877
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
878
+ value: new node_opcua_types_1.Range(options.engineeringUnitsRange)
879
+ }));
880
+ if (Object.prototype.hasOwnProperty.call(options, "instrumentRange") && variable.instrumentRange) {
881
+ variable.instrumentRange.setValueFromSource(new node_opcua_variant_1.Variant({
882
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
883
+ value: new node_opcua_types_1.Range(options.instrumentRange)
884
+ }));
885
+ }
886
+ variable.title.setValueFromSource(new node_opcua_variant_1.Variant({
887
+ dataType: node_opcua_variant_1.DataType.LocalizedText,
888
+ value: (0, node_opcua_data_model_1.coerceLocalizedText)(options.title || "")
889
+ }));
890
+ // Linear/Log/Ln
891
+ variable.axisScaleType.setValueFromSource(new node_opcua_variant_1.Variant({
892
+ dataType: node_opcua_variant_1.DataType.Int32,
893
+ value: coerceAxisScale(options.axisScaleType)
894
+ }));
895
+ variable.xAxisDefinition.setValueFromSource(new node_opcua_variant_1.Variant({
896
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
897
+ value: new node_opcua_types_1.AxisInformation(options.xAxisDefinition)
898
+ }));
899
+ return variable;
900
+ }
901
+ // - Methods ----------------------------------------------------------------------------------------------------
902
+ /**
903
+ * @method addMethod
904
+ * @param parentObject {Object}
905
+ * @param options {Object}
906
+ * @param [options.nodeId=null] {NodeId} the object nodeid.
907
+ * @param [options.browseName=""] {String} the object browse name.
908
+ * @param [options.description=""] {String} the object description.
909
+ * @param options.inputArguments {Array<Argument>}
910
+ * @param options.outputArguments {Array<Argument>}
911
+ * @return {Object}
912
+ */
913
+ addMethod(parentObject, options) {
914
+ const addressSpace = this.addressSpace;
915
+ (0, node_opcua_assert_1.assert)(parentObject !== null && typeof parentObject === "object" && parentObject instanceof base_node_impl_1.BaseNodeImpl, "expecting a valid parent object");
916
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "browseName"));
917
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "inputArguments") || Array.isArray(options.inputArguments));
918
+ (0, node_opcua_assert_1.assert)(!Object.prototype.hasOwnProperty.call(options, "outputArguments") || Array.isArray(options.outputArguments));
919
+ options.componentOf = parentObject;
920
+ const method = this._addMethod(options);
921
+ const propertyTypeId = addressSpace._coerce_VariableTypeIds("PropertyType");
922
+ const nodeId_ArgumentDataType = "Argument"; // makeNodeId(DataTypeIds.Argument);
923
+ if (options.inputArguments) {
924
+ const _inputArgs = new node_opcua_variant_1.Variant({
925
+ arrayType: node_opcua_variant_1.VariantArrayType.Array,
926
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
927
+ value: options.inputArguments.map((opt) => new node_opcua_types_1.Argument(opt))
928
+ });
929
+ const inputArguments = this.addVariable({
930
+ accessLevel: "CurrentRead",
931
+ arrayDimensions: [_inputArgs.value.length],
932
+ browseName: { name: "InputArguments", namespaceIndex: 0 },
933
+ dataType: nodeId_ArgumentDataType,
934
+ description: "the definition of the input argument of method " +
935
+ parentObject.browseName.toString() +
936
+ "." +
937
+ method.browseName.toString(),
938
+ minimumSamplingInterval: -1,
939
+ modellingRule: "Mandatory",
940
+ propertyOf: method,
941
+ typeDefinition: "PropertyType",
942
+ value: _inputArgs,
943
+ valueRank: 1
944
+ });
945
+ inputArguments.setValueFromSource(_inputArgs);
946
+ (0, node_opcua_assert_1.assert)(inputArguments.typeDefinition.toString() === propertyTypeId.toString());
947
+ (0, node_opcua_assert_1.assert)(Array.isArray(inputArguments.arrayDimensions));
948
+ }
949
+ if (options.outputArguments) {
950
+ const _outputArgs = new node_opcua_variant_1.Variant({
951
+ arrayType: node_opcua_variant_1.VariantArrayType.Array,
952
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
953
+ value: options.outputArguments.map((opts) => new node_opcua_types_1.Argument(opts))
954
+ });
955
+ const outputArguments = this.addVariable({
956
+ accessLevel: "CurrentRead",
957
+ arrayDimensions: [_outputArgs.value.length],
958
+ browseName: { name: "OutputArguments", namespaceIndex: 0 },
959
+ dataType: nodeId_ArgumentDataType,
960
+ description: "the definition of the output arguments of method " +
961
+ parentObject.browseName.toString() +
962
+ "." +
963
+ method.browseName.toString(),
964
+ minimumSamplingInterval: -1,
965
+ modellingRule: "Mandatory",
966
+ propertyOf: method,
967
+ typeDefinition: "PropertyType",
968
+ value: _outputArgs,
969
+ valueRank: 1
970
+ });
971
+ outputArguments.setValueFromSource(_outputArgs);
972
+ (0, node_opcua_assert_1.assert)(outputArguments.typeDefinition.toString() === propertyTypeId.toString());
973
+ (0, node_opcua_assert_1.assert)(Array.isArray(outputArguments.arrayDimensions));
974
+ }
975
+ // verifying post-conditions
976
+ parentObject.install_extra_properties();
977
+ return method;
978
+ }
979
+ // - Enumeration ------------------------------------------------------------------------------------------------
980
+ /**
981
+ *
982
+ * @method addEnumerationType
983
+ * @param options
984
+ * @param options.browseName {String}
985
+ * @param options.enumeration {Array}
986
+ * @param options.enumeration[].displayName {String|LocalizedText}
987
+ * @param options.enumeration[].value {Number}
988
+ * @param options.enumeration[].description {String|LocalizedText|null}
989
+ */
990
+ addEnumerationType(options) {
991
+ // Release 1.03 OPC Unified Architecture, Part 3 - page 34
992
+ // Enumeration DataTypes are DataTypes that represent discrete sets of named values.
993
+ // Enumerations are always encoded as Int32 on the wire as defined in Part 6. Enumeration
994
+ // DataTypes inherit directly or indirectly from the DataType Enumeration defined in 8.14.
995
+ // Enumerations have no encodings exposed in the IAddressSpace. To expose the human readable
996
+ // representation of an enumerated value the DataType Node may have the EnumString
997
+ // Property that contains an array of LocalizedText. The Integer representation of the enumeration
998
+ // value points to a position within that array. EnumValues Property can be used instead of the
999
+ // EnumStrings to support integer representation of enumerations that are not zero-based or have
1000
+ // gaps. It contains an array of a Structured DataType containing the integer representation as
1001
+ // well as the human-readable representation. An example of an enumeration DataType containing
1002
+ // a sparse list of Integers is NodeClass which is defined in 8.30.
1003
+ // OPC Unified Architecture, Part 3 Release 1.03 page 35
1004
+ // Table 11 – DataType NodeClass
1005
+ // EnumStrings O LocalizedText[] The EnumStrings Property only applies for Enumeration DataTypes.
1006
+ // It shall not be applied for other DataTypes. If the EnumValues
1007
+ // Property is provided, the EnumStrings Property shall not be provided.
1008
+ // Each entry of the array of LocalizedText in this Property represents
1009
+ // the human-readable representation of an enumerated value. The
1010
+ // Integer representation of the enumeration value points to a position
1011
+ // of the array.
1012
+ // EnumValues O EnumValueType[] The EnumValues Property only applies for Enumeration DataTypes.
1013
+ // It shall not be applied for other DataTypes. If the EnumStrings
1014
+ // Property is provided, the EnumValues Property shall not be provided.
1015
+ // Using the EnumValues Property it is possible to represent.
1016
+ // Enumerations with integers that are not zero-based or have gaps
1017
+ // (e.g. 1, 2, 4, 8, 16).
1018
+ // Each entry of the array of EnumValueType in this Property
1019
+ // represents one enumeration value with its integer notation, human readable
1020
+ // representation and help information.
1021
+ // The Property EnumStrings contains human-readable representations of enumeration values and is
1022
+ // only applied to Enumeration DataTypes. Instead of the EnumStrings Property an Enumeration
1023
+ // DataType can also use the EnumValues Property to represent Enumerations with integer values that are not
1024
+ // zero-based or containing gaps. There are no additional Properties defined for DataTypes in this standard.
1025
+ // Additional parts of this series of standards may define additional Properties for DataTypes.
1026
+ // 8.40 EnumValueType
1027
+ // This Structured DataType is used to represent a human-readable representation of an
1028
+ // Enumeration. Its elements are described inTable 27. When this type is used in an array representing
1029
+ // human-readable representations of an enumeration, each Value shall be unique in that array.
1030
+ // Table 27 – EnumValueType Definition
1031
+ // Name Type Description
1032
+ // EnumValueType structure
1033
+ // Value Int64 The Integer representation of an Enumeration.
1034
+ // DisplayName LocalizedText A human-readable representation of the Value of the Enumeration.
1035
+ // Description LocalizedText A localized description of the enumeration value. This field can
1036
+ // contain an empty string if no description is available.
1037
+ // Note that the EnumValueType has been defined with a Int64 Value to meet a variety of usages.
1038
+ // When it is used to define the string representation of an Enumeration DataType, the value range
1039
+ // is limited to Int32, because the Enumeration DataType is a subtype of Int32. Part 8 specifies
1040
+ // other usages where the actual value might be between 8 and 64 Bit.
1041
+ const self = this;
1042
+ (0, node_opcua_assert_1.assert)(typeof options.browseName === "string");
1043
+ (0, node_opcua_assert_1.assert)(Array.isArray(options.enumeration));
1044
+ const addressSpace = self.addressSpace;
1045
+ let definition;
1046
+ const enumerationType = addressSpace.findDataType("Enumeration");
1047
+ (0, node_opcua_assert_1.assert)(enumerationType.nodeId instanceof node_opcua_nodeid_2.NodeId);
1048
+ (0, node_opcua_assert_1.assert)(enumerationType instanceof ua_data_type_impl_1.UADataTypeImpl);
1049
+ const references = [{ referenceType: "HasSubtype", isForward: false, nodeId: enumerationType.nodeId }];
1050
+ const opts = {
1051
+ browseName: options.browseName,
1052
+ definition,
1053
+ description: (0, node_opcua_data_model_1.coerceLocalizedText)(options.description) || null,
1054
+ displayName: options.displayName || null,
1055
+ isAbstract: false,
1056
+ nodeClass: node_opcua_data_model_4.NodeClass.DataType,
1057
+ references
1058
+ };
1059
+ const enumType = self.internalCreateNode(opts); // as UAEnumeration;
1060
+ enumType.propagate_back_references();
1061
+ if (typeof options.enumeration[0] === "string") {
1062
+ const enumeration = options.enumeration;
1063
+ // enumeration is a array of string
1064
+ definition = enumeration.map((str, index) => (0, node_opcua_data_model_1.coerceLocalizedText)(str));
1065
+ const value = new node_opcua_variant_1.Variant({
1066
+ arrayType: node_opcua_variant_1.VariantArrayType.Array,
1067
+ dataType: node_opcua_variant_1.DataType.LocalizedText,
1068
+ value: definition
1069
+ });
1070
+ const enumStrings = self.addVariable({
1071
+ browseName: { name: "EnumStrings", namespaceIndex: 0 },
1072
+ dataType: "LocalizedText",
1073
+ description: "",
1074
+ modellingRule: "Mandatory",
1075
+ propertyOf: enumType,
1076
+ value,
1077
+ valueRank: 1
1078
+ });
1079
+ (0, node_opcua_assert_1.assert)(enumStrings.browseName.toString() === "EnumStrings");
1080
+ // set $definition
1081
+ // EnumDefinition
1082
+ // This Structured DataType is used to provide the metadata for a custom Enumeration or
1083
+ // OptionSet DataType. It is derived from the DataType DataTypeDefinition.
1084
+ // Enum Field:
1085
+ // This Structured DataType is used to provide the metadata for a field of a custom Enumeration
1086
+ // or OptionSet DataType. It is derived from the DataType EnumValueType. If used for an
1087
+ // OptionSet, the corresponding Value in the base type contains the number of the bit associated
1088
+ // with the field. The EnumField is formally defined in Table 37.
1089
+ enumType.$definition = new node_opcua_types_1.EnumDefinition({
1090
+ fields: enumeration.map((x, index) => new node_opcua_types_1.EnumField({
1091
+ name: x,
1092
+ description: (0, node_opcua_data_model_1.coerceLocalizedText)(x),
1093
+ value: (0, node_opcua_basic_types_1.coerceInt64)(index)
1094
+ }))
1095
+ });
1096
+ }
1097
+ else {
1098
+ const enumeration = options.enumeration;
1099
+ // construct the definition object
1100
+ definition = enumeration.map((enumItem) => {
1101
+ return new node_opcua_types_1.EnumValueType({
1102
+ description: (0, node_opcua_data_model_1.coerceLocalizedText)(enumItem.description),
1103
+ displayName: (0, node_opcua_data_model_1.coerceLocalizedText)(enumItem.displayName),
1104
+ value: [0, enumItem.value]
1105
+ });
1106
+ });
1107
+ const value = new node_opcua_variant_1.Variant({
1108
+ arrayType: node_opcua_variant_1.VariantArrayType.Array,
1109
+ dataType: node_opcua_variant_1.DataType.ExtensionObject,
1110
+ value: definition
1111
+ });
1112
+ const enumValues = self.addVariable({
1113
+ browseName: { name: "EnumValues", namespaceIndex: 0 },
1114
+ dataType: "EnumValueType",
1115
+ description: undefined,
1116
+ modellingRule: "Mandatory",
1117
+ propertyOf: enumType,
1118
+ value,
1119
+ valueRank: 1
1120
+ });
1121
+ (0, node_opcua_assert_1.assert)(enumValues.browseName.toString() === "EnumValues");
1122
+ enumType.$definition = new node_opcua_types_1.EnumDefinition({
1123
+ fields: enumeration.map((x, index) => new node_opcua_types_1.EnumField({
1124
+ name: x.displayName.toString(),
1125
+ description: x.description || "",
1126
+ value: (0, node_opcua_basic_types_1.coerceInt64)(x.value)
1127
+ }))
1128
+ });
1129
+ }
1130
+ // now create the string value property
1131
+ // <UAVariable NodeId="i=7612" BrowseName="EnumStrings"
1132
+ // ParentNodeId="i=852" DataType="LocalizedText" ValueRank="1">
1133
+ // <DisplayName>EnumStrings</DisplayName>
1134
+ // <References>
1135
+ // <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
1136
+ // <Reference ReferenceType="HasModellingRule">i=78</Reference>
1137
+ // <Reference ReferenceType="HasProperty" IsForward="false">i=852</Reference>
1138
+ // </References>
1139
+ // <Value>
1140
+ // <ListOfLocalizedText xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
1141
+ // <LocalizedText><Locale></Locale><Text>Running</Text></LocalizedText>
1142
+ // <LocalizedText><Locale></Locale><Text>Failed</Text>
1143
+ // </ListOfLocalizedText>
1144
+ // </Value>
1145
+ // </UAVariable>
1146
+ return enumType;
1147
+ }
1148
+ // -------------------------------------------------------------------------
1149
+ // State and Transition
1150
+ // -------------------------------------------------------------------------
1151
+ toNodeset2XML() {
1152
+ return "";
1153
+ }
1154
+ // -------------------------------------------------------------------------
1155
+ // State and Transition
1156
+ // -------------------------------------------------------------------------
1157
+ /**
1158
+ * @class IAddressSpace
1159
+ * @method addState
1160
+ * @param component
1161
+ * @param stateName {string}
1162
+ * @param stateNumber {number}
1163
+ * @param isInitialState {boolean}
1164
+ * @return {UAObject} {StateType|InitialStateType}
1165
+ */
1166
+ addState(component, stateName, stateNumber, isInitialState) {
1167
+ const namespace = this;
1168
+ const addressSpace = namespace.addressSpace;
1169
+ isInitialState = !!isInitialState;
1170
+ const _component = component;
1171
+ (0, node_opcua_assert_1.assert)(_component.nodeClass === node_opcua_data_model_4.NodeClass.Object || _component.nodeClass === node_opcua_data_model_4.NodeClass.ObjectType);
1172
+ (0, node_opcua_assert_1.assert)(typeof stateName === "string");
1173
+ (0, node_opcua_assert_1.assert)(typeof isInitialState === "boolean");
1174
+ const initialStateType = addressSpace.findObjectType("InitialStateType");
1175
+ const stateType = addressSpace.findObjectType("StateType");
1176
+ let state;
1177
+ if (isInitialState) {
1178
+ state = initialStateType.instantiate({
1179
+ browseName: stateName,
1180
+ componentOf: _component
1181
+ });
1182
+ }
1183
+ else {
1184
+ state = stateType.instantiate({
1185
+ browseName: stateName,
1186
+ componentOf: _component
1187
+ });
1188
+ }
1189
+ // ensure state number is unique
1190
+ state.stateNumber.setValueFromSource({
1191
+ dataType: node_opcua_variant_1.DataType.UInt32,
1192
+ value: stateNumber
1193
+ });
1194
+ return state;
1195
+ }
1196
+ /**
1197
+ */
1198
+ addTransition(component, fromState, toState, transitionNumber) {
1199
+ const namespace = this;
1200
+ const addressSpace = namespace.addressSpace;
1201
+ const _component = component;
1202
+ (0, node_opcua_assert_1.assert)(_component.nodeClass === node_opcua_data_model_4.NodeClass.Object || _component.nodeClass === node_opcua_data_model_4.NodeClass.ObjectType);
1203
+ (0, node_opcua_assert_1.assert)(typeof fromState === "string");
1204
+ (0, node_opcua_assert_1.assert)(typeof toState === "string");
1205
+ (0, node_opcua_assert_1.assert)(isFinite(transitionNumber));
1206
+ const fromStateNode = _component.getComponentByName(fromState, _component.nodeId.namespace);
1207
+ // istanbul ignore next
1208
+ if (!fromStateNode) {
1209
+ throw new Error("Cannot find state with name " + fromState);
1210
+ }
1211
+ (0, node_opcua_assert_1.assert)(fromStateNode.browseName.name.toString() === fromState);
1212
+ const toStateNode = _component.getComponentByName(toState);
1213
+ // istanbul ignore next
1214
+ if (!toStateNode) {
1215
+ throw new Error("Cannot find state with name " + toState);
1216
+ }
1217
+ (0, node_opcua_assert_1.assert)(toStateNode.browseName.name.toString() === toState);
1218
+ const transitionType = addressSpace.findObjectType("TransitionType");
1219
+ if (!transitionType) {
1220
+ throw new Error("Cannot find TransitionType");
1221
+ }
1222
+ const transition = transitionType.instantiate({
1223
+ browseName: fromState + "To" + toState + "Transition",
1224
+ componentOf: _component
1225
+ });
1226
+ transition.addReference({
1227
+ isForward: true,
1228
+ nodeId: toStateNode.nodeId,
1229
+ referenceType: "ToState"
1230
+ });
1231
+ transition.addReference({
1232
+ isForward: true,
1233
+ nodeId: fromStateNode.nodeId,
1234
+ referenceType: "FromState"
1235
+ });
1236
+ transition.transitionNumber.setValueFromSource({
1237
+ dataType: node_opcua_variant_1.DataType.UInt32,
1238
+ value: transitionNumber
1239
+ });
1240
+ return transition;
1241
+ }
1242
+ /**
1243
+ * @method addTwoStateVariable
1244
+ *
1245
+ * @return {UATwoStateVariable}
1246
+ */
1247
+ addTwoStateVariable(options) {
1248
+ const namespace = this;
1249
+ return (0, ua_two_state_variable_1._addTwoStateVariable)(namespace, options);
1250
+ }
1251
+ /**
1252
+ * @method addTwoStateDiscrete
1253
+ *
1254
+ * Add a TwoStateDiscrete Variable
1255
+ * @return {UATwoStateDiscrete}
1256
+ */
1257
+ addTwoStateDiscrete(options) {
1258
+ const namespace = this;
1259
+ return (0, ua_two_state_discrete_1._addTwoStateDiscrete)(namespace, options);
1260
+ }
1261
+ // --- Alarms & Conditions -------------------------------------------------
1262
+ instantiateCondition(conditionTypeId, options, data) {
1263
+ return ua_condition_impl_1.UAConditionImpl.instantiate(this, conditionTypeId, options, data);
1264
+ }
1265
+ instantiateAcknowledgeableCondition(conditionTypeId, options, data) {
1266
+ // @ts-ignore
1267
+ return alarms_and_conditions_1.UAAcknowledgeableConditionImpl.instantiate(this, conditionTypeId, options, data);
1268
+ }
1269
+ instantiateAlarmCondition(alarmConditionTypeId, options, data) {
1270
+ return source_1.UAAlarmConditionImpl.instantiate(this, alarmConditionTypeId, options, data);
1271
+ }
1272
+ instantiateLimitAlarm(limitAlarmTypeId, options, data) {
1273
+ return ua_limit_alarm_impl_1.UALimitAlarmImpl.instantiate(this, limitAlarmTypeId, options, data);
1274
+ }
1275
+ instantiateExclusiveLimitAlarm(exclusiveLimitAlarmTypeId, options, data) {
1276
+ return ua_exclusive_limit_alarm_impl_1.UAExclusiveLimitAlarmImpl.instantiate(this, exclusiveLimitAlarmTypeId, options, data);
1277
+ }
1278
+ instantiateExclusiveDeviationAlarm(options, data) {
1279
+ return ua_exclusive_deviation_alarm_impl_1.UAExclusiveDeviationAlarmImpl.instantiate(this, "ExclusiveDeviationAlarmType", options, data);
1280
+ }
1281
+ instantiateNonExclusiveLimitAlarm(nonExclusiveLimitAlarmTypeId, options, data) {
1282
+ return ua_non_exclusive_limit_alarm_impl_1.UANonExclusiveLimitAlarmImpl.instantiate(this, nonExclusiveLimitAlarmTypeId, options, data);
1283
+ }
1284
+ instantiateNonExclusiveDeviationAlarm(options, data) {
1285
+ return ua_non_exclusive_deviation_alarm_impl_1.UANonExclusiveDeviationAlarmImpl.instantiate(this, "NonExclusiveDeviationAlarmType", options, data);
1286
+ }
1287
+ instantiateDiscreteAlarm(discreteAlarmType, options, data) {
1288
+ return ua_discrete_alarm_impl_1.UADiscreteAlarmImpl.instantiate(this, discreteAlarmType, options, data);
1289
+ }
1290
+ instantiateOffNormalAlarm(options, data) {
1291
+ return ua_off_normal_alarm_impl_1.UAOffNormalAlarmImpl.instantiate(this, "OffNormalAlarmType", options, data);
1292
+ }
1293
+ // default roles and permissions
1294
+ setDefaultRolePermissions(rolePermissions) {
1295
+ this.defaultRolePermissions = rolePermissions ? (0, role_permissions_1.coerceRolePermissions)(rolePermissions) : undefined;
1296
+ }
1297
+ getDefaultRolePermissions() {
1298
+ return this.defaultRolePermissions || null;
1299
+ }
1300
+ setDefaultAccessRestrictions(accessRestrictions) {
1301
+ this.defaultAccessRestrictions = accessRestrictions;
1302
+ }
1303
+ getDefaultAccessRestrictions() {
1304
+ return this.defaultAccessRestrictions || node_opcua_data_model_1.AccessRestrictionsFlag.None;
1305
+ }
1306
+ // --- internal stuff
1307
+ constructNodeId(options) {
1308
+ return this._nodeIdManager.constructNodeId(options);
1309
+ }
1310
+ _register(node) {
1311
+ (0, node_opcua_assert_1.assert)(node instanceof base_node_impl_1.BaseNodeImpl, "Expecting a instance of BaseNode in _register");
1312
+ (0, node_opcua_assert_1.assert)(node.nodeId instanceof node_opcua_nodeid_2.NodeId, "Expecting a NodeId");
1313
+ if (node.nodeId.namespace !== this.index) {
1314
+ throw new Error("node must belongs to this namespace");
1315
+ }
1316
+ (0, node_opcua_assert_1.assert)(node.nodeId.namespace === this.index, "node must belongs to this namespace");
1317
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(node, "browseName"), "Node must have a browseName");
1318
+ // assert(node.browseName.namespaceIndex === this.index,"browseName must belongs to this namespace");
1319
+ const hashKey = _makeHashKey(node.nodeId);
1320
+ // istanbul ignore next
1321
+ if (this._nodeid_index.has(hashKey)) {
1322
+ throw new Error("node " +
1323
+ node.browseName.toString() +
1324
+ "nodeId = " +
1325
+ node.nodeId.displayText() +
1326
+ " already registered " +
1327
+ node.nodeId.toString() +
1328
+ "\n" +
1329
+ " in namespace " +
1330
+ this.namespaceUri +
1331
+ " index = " +
1332
+ this.index +
1333
+ "\n" +
1334
+ " browseName = " +
1335
+ node.browseName.toString());
1336
+ }
1337
+ this._nodeid_index.set(hashKey, node);
1338
+ switch (node.nodeClass) {
1339
+ case node_opcua_data_model_4.NodeClass.ObjectType:
1340
+ this._registerObjectType(node);
1341
+ break;
1342
+ case node_opcua_data_model_4.NodeClass.VariableType:
1343
+ this._registerVariableType(node);
1344
+ break;
1345
+ case node_opcua_data_model_4.NodeClass.ReferenceType:
1346
+ this._registerReferenceType(node);
1347
+ break;
1348
+ case node_opcua_data_model_4.NodeClass.DataType:
1349
+ this._registerDataType(node);
1350
+ break;
1351
+ case node_opcua_data_model_4.NodeClass.Object:
1352
+ case node_opcua_data_model_4.NodeClass.Variable:
1353
+ case node_opcua_data_model_4.NodeClass.Method:
1354
+ case node_opcua_data_model_4.NodeClass.View:
1355
+ break;
1356
+ default:
1357
+ // tslint:disable-next-line:no-console
1358
+ console.log("Invalid class Name", node.nodeClass);
1359
+ throw new Error("Invalid class name specified");
1360
+ }
1361
+ }
1362
+ /**
1363
+ * @method internalCreateNode
1364
+ * @internal
1365
+ */
1366
+ internalCreateNode(options) {
1367
+ (0, node_opcua_assert_1.assert)(options.nodeClass !== undefined, " options.nodeClass must be specified");
1368
+ (0, node_opcua_assert_1.assert)(options.browseName, "options.browseName must be specified");
1369
+ // xx assert(options.browseName instanceof QualifiedName
1370
+ // ? (options.browseName.namespaceIndex === this.index): true,
1371
+ // "Expecting browseName to have the same namespaceIndex as the namespace");
1372
+ options.description = (0, node_opcua_data_model_1.coerceLocalizedText)(options.description);
1373
+ // browseName adjustment
1374
+ if (typeof options.browseName === "string") {
1375
+ const match = options.browseName.match(regExpNamespaceDotBrowseName);
1376
+ if (match) {
1377
+ const correctedName = match[1];
1378
+ // the application is using an old scheme
1379
+ console.log(chalk.green("Warning : since node-opcua 0.4.2 " + "namespace index should not be prepended to the browse name anymore"));
1380
+ console.log(" ", options.browseName, " will be replaced with ", correctedName);
1381
+ console.log(" Please update your code");
1382
+ const indexVerif = parseInt(match[0], 10);
1383
+ if (indexVerif !== this.index) {
1384
+ console.log(chalk.red.bold("Error: namespace index used at the front of the browseName " +
1385
+ indexVerif +
1386
+ " do not match the index of the current namespace (" +
1387
+ this.index +
1388
+ ")"));
1389
+ console.log(" Please fix your code so that the created node is inserted in the correct namespace," +
1390
+ " please refer to the NodeOPCUA documentation");
1391
+ }
1392
+ }
1393
+ options.browseName = new node_opcua_data_model_2.QualifiedName({ name: options.browseName, namespaceIndex: this.index });
1394
+ }
1395
+ else if (!(options.browseName instanceof node_opcua_data_model_2.QualifiedName)) {
1396
+ options.browseName = new node_opcua_data_model_2.QualifiedName(options.browseName);
1397
+ }
1398
+ (0, node_opcua_assert_1.assert)(options.browseName instanceof node_opcua_data_model_2.QualifiedName, "Expecting options.browseName to be instanceof QualifiedName ");
1399
+ // ------------- set display name
1400
+ if (!options.displayName) {
1401
+ (0, node_opcua_assert_1.assert)(typeof options.browseName.name === "string");
1402
+ options.displayName = options.browseName.name;
1403
+ }
1404
+ // --- nodeId adjustment
1405
+ options.nodeId = this.constructNodeId(options);
1406
+ (0, node_opcua_debug_1.dumpIf)(!options.nodeId, options); // missing node Id
1407
+ (0, node_opcua_assert_1.assert)(options.nodeId instanceof node_opcua_nodeid_2.NodeId);
1408
+ // assert(options.browseName.namespaceIndex === this.index,"Expecting browseName to have
1409
+ // the same namespaceIndex as the namespace");
1410
+ const Constructor = _constructors_map[node_opcua_data_model_4.NodeClass[options.nodeClass]];
1411
+ if (!Constructor) {
1412
+ throw new Error(" missing constructor for NodeClass " + node_opcua_data_model_4.NodeClass[options.nodeClass]);
1413
+ }
1414
+ options.addressSpace = this.addressSpace;
1415
+ const node = new Constructor(options);
1416
+ this._register(node);
1417
+ // object shall now be registered
1418
+ // istanbul ignore next
1419
+ if (doDebug) {
1420
+ (0, node_opcua_assert_1.assert)(this.findNode(node.nodeId) !== null && typeof this.findNode(node.nodeId) === "object");
1421
+ }
1422
+ return node;
1423
+ }
1424
+ _deleteNode(node) {
1425
+ (0, node_opcua_assert_1.assert)(node instanceof base_node_impl_1.BaseNodeImpl);
1426
+ const hashKey = _makeHashKey(node.nodeId);
1427
+ // istanbul ignore next
1428
+ if (!this._nodeid_index.has(hashKey)) {
1429
+ throw new Error("deleteNode : nodeId " + node.nodeId.displayText() + " is not registered " + node.nodeId.toString());
1430
+ }
1431
+ switch (node.nodeClass) {
1432
+ case node_opcua_data_model_4.NodeClass.ObjectType:
1433
+ this._unregisterObjectType(node);
1434
+ break;
1435
+ case node_opcua_data_model_4.NodeClass.VariableType:
1436
+ this._unregisterVariableType(node);
1437
+ break;
1438
+ case node_opcua_data_model_4.NodeClass.Object:
1439
+ case node_opcua_data_model_4.NodeClass.Variable:
1440
+ case node_opcua_data_model_4.NodeClass.Method:
1441
+ case node_opcua_data_model_4.NodeClass.View:
1442
+ break;
1443
+ default:
1444
+ // tslint:disable:no-console
1445
+ console.log("Invalid class Name", node.nodeClass);
1446
+ throw new Error("Invalid class name specified");
1447
+ }
1448
+ const deleted = this._nodeid_index.delete(hashKey);
1449
+ (0, node_opcua_assert_1.assert)(deleted);
1450
+ node.dispose();
1451
+ }
1452
+ // --- Private stuff
1453
+ _addObjectOrVariableType(options1, topMostBaseType, nodeClass) {
1454
+ const addressSpace = this.addressSpace;
1455
+ (0, node_opcua_assert_1.assert)(typeof topMostBaseType === "string");
1456
+ (0, node_opcua_assert_1.assert)(nodeClass === node_opcua_data_model_4.NodeClass.ObjectType || nodeClass === node_opcua_data_model_4.NodeClass.VariableType);
1457
+ const options = options1;
1458
+ (0, node_opcua_assert_1.assert)(!options.nodeClass);
1459
+ (0, node_opcua_assert_1.assert)(options.browseName);
1460
+ (0, node_opcua_assert_1.assert)(typeof options.browseName === "string");
1461
+ if (Object.prototype.hasOwnProperty.call(options, "references")) {
1462
+ throw new Error("options.references should not be provided, use options.subtypeOf instead");
1463
+ }
1464
+ const references = [];
1465
+ function process_subtypeOf_options(options2, references1) {
1466
+ // check common misspelling mistake
1467
+ (0, node_opcua_assert_1.assert)(!options2.subTypeOf, "misspell error : it should be 'subtypeOf' instead");
1468
+ if (options2.hasOwnProperty("hasTypeDefinition")) {
1469
+ throw new Error("hasTypeDefinition option is invalid. Do you mean typeDefinition instead ?");
1470
+ }
1471
+ (0, node_opcua_assert_1.assert)(!options2.typeDefinition, " do you mean subtypeOf ?");
1472
+ const subtypeOfNodeId = addressSpace._coerceType(options2.subtypeOf, topMostBaseType, nodeClass);
1473
+ (0, node_opcua_assert_1.assert)(subtypeOfNodeId);
1474
+ references1.push({
1475
+ isForward: false,
1476
+ nodeId: subtypeOfNodeId,
1477
+ referenceType: "HasSubtype"
1478
+ });
1479
+ }
1480
+ process_subtypeOf_options.call(this, options, references);
1481
+ const objectType = this.internalCreateNode({
1482
+ browseName: options.browseName,
1483
+ displayName: options.displayName,
1484
+ eventNotifier: +options.eventNotifier,
1485
+ isAbstract: !!options.isAbstract,
1486
+ nodeClass,
1487
+ nodeId: options.nodeId,
1488
+ references
1489
+ });
1490
+ objectType.propagate_back_references();
1491
+ objectType.install_extra_properties();
1492
+ objectType.installPostInstallFunc(options.postInstantiateFunc);
1493
+ return objectType;
1494
+ }
1495
+ // private _adjust_options(options: any) {
1496
+ // const ns = this.addressSpace.getNamespaceIndex(this.namespaceUri);
1497
+ // if (!options.nodeId) {
1498
+ // const id = this._getNextAvailableId();
1499
+ // options.nodeId = new NodeId(NodeId.NodeIdType.NUMERIC, id, ns);
1500
+ // }
1501
+ // options.nodeId = NodeId.coerce(options.nodeId);
1502
+ // if (typeof options.browseName === "string") {
1503
+ // options.browseName = new QualifiedName({
1504
+ // name: options.browseName,
1505
+ // namespaceIndex: ns
1506
+ // });
1507
+ // }
1508
+ // return options;
1509
+ // }
1510
+ _registerObjectType(node) {
1511
+ (0, node_opcua_assert_1.assert)(this.index === node.nodeId.namespace);
1512
+ const key = node.browseName.name;
1513
+ (0, node_opcua_assert_1.assert)(!this._objectTypeMap.has(key), " UAObjectType already declared");
1514
+ this._objectTypeMap.set(key, node);
1515
+ }
1516
+ _registerVariableType(node) {
1517
+ (0, node_opcua_assert_1.assert)(this.index === node.nodeId.namespace);
1518
+ const key = node.browseName.name;
1519
+ (0, node_opcua_assert_1.assert)(!this._variableTypeMap.has(key), " UAVariableType already declared");
1520
+ this._variableTypeMap.set(key, node);
1521
+ }
1522
+ _registerReferenceType(node) {
1523
+ (0, node_opcua_assert_1.assert)(this.index === node.nodeId.namespace);
1524
+ (0, node_opcua_assert_1.assert)(node.browseName instanceof node_opcua_data_model_2.QualifiedName);
1525
+ const key = node.browseName.name;
1526
+ this._referenceTypeMap.set(key, node);
1527
+ this._referenceTypeMapInv.set(node.inverseName.text, node);
1528
+ }
1529
+ _registerDataType(node) {
1530
+ (0, node_opcua_assert_1.assert)(this.index === node.nodeId.namespace);
1531
+ const key = node.browseName.name;
1532
+ (0, node_opcua_assert_1.assert)(node.browseName instanceof node_opcua_data_model_2.QualifiedName);
1533
+ (0, node_opcua_assert_1.assert)(!this._dataTypeMap.has(key), " DataType already declared");
1534
+ this._dataTypeMap.set(key, node);
1535
+ }
1536
+ _unregisterObjectType(node) {
1537
+ const key = node.browseName.name;
1538
+ this._objectTypeMap.delete(key);
1539
+ }
1540
+ _unregisterVariableType(node) {
1541
+ const key = node.browseName.name;
1542
+ this._variableTypeMap.delete(key);
1543
+ }
1544
+ /**
1545
+ * @private
1546
+ */
1547
+ _addVariable(options) {
1548
+ const addressSpace = this.addressSpace;
1549
+ const baseDataVariableType = addressSpace.findVariableType("BaseDataVariableType");
1550
+ if (!baseDataVariableType) {
1551
+ throw new Error("cannot find BaseDataVariableType");
1552
+ }
1553
+ const baseDataVariableTypeId = baseDataVariableType.nodeId;
1554
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "browseName"), "options.browseName must be provided");
1555
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "dataType"), "options.dataType must be provided");
1556
+ options.historizing = !!options.historizing;
1557
+ // xx assert(this.FolderTypeId && this.BaseObjectTypeId); // is default address space generated.?
1558
+ // istanbul ignore next
1559
+ if (Object.prototype.hasOwnProperty.call(options, "hasTypeDefinition")) {
1560
+ throw new Error("hasTypeDefinition option is invalid. Do you mean typeDefinition instead ?");
1561
+ }
1562
+ // ------------------------------------------ TypeDefinition
1563
+ let typeDefinition = options.typeDefinition || baseDataVariableTypeId;
1564
+ typeDefinition = addressSpace._coerce_VariableTypeIds(typeDefinition);
1565
+ (0, node_opcua_assert_1.assert)(typeDefinition instanceof node_opcua_nodeid_2.NodeId);
1566
+ // ------------------------------------------ DataType
1567
+ options.dataType = addressSpace._coerce_DataType(options.dataType);
1568
+ options.valueRank = utils.isNullOrUndefined(options.valueRank)
1569
+ ? options.arrayDimensions
1570
+ ? options.arrayDimensions.length
1571
+ : -1
1572
+ : options.valueRank;
1573
+ (0, node_opcua_assert_1.assert)(typeof options.valueRank === "number" && isFinite(options.valueRank));
1574
+ options.arrayDimensions = options.arrayDimensions || null;
1575
+ (0, node_opcua_assert_1.assert)(Array.isArray(options.arrayDimensions) || options.arrayDimensions === null);
1576
+ // -----------------------------------------------------
1577
+ options.minimumSamplingInterval = options.minimumSamplingInterval !== undefined ? +options.minimumSamplingInterval : 0;
1578
+ let references = options.references || [];
1579
+ references = [].concat(references, [
1580
+ {
1581
+ isForward: true,
1582
+ nodeId: typeDefinition,
1583
+ referenceType: "HasTypeDefinition"
1584
+ }
1585
+ ]);
1586
+ (0, node_opcua_assert_1.assert)(!options.nodeClass || options.nodeClass === node_opcua_data_model_4.NodeClass.Variable);
1587
+ options.nodeClass = node_opcua_data_model_4.NodeClass.Variable;
1588
+ options.references = references;
1589
+ const variable = this.createNode(options);
1590
+ return variable;
1591
+ }
1592
+ /**
1593
+ * @private
1594
+ */
1595
+ _addMethod(options) {
1596
+ const addressSpace = this.addressSpace;
1597
+ (0, node_opcua_assert_1.assert)(isNonEmptyQualifiedName(options.browseName));
1598
+ const references = [];
1599
+ (0, node_opcua_assert_1.assert)(isNonEmptyQualifiedName(options.browseName));
1600
+ _handle_hierarchy_parent(addressSpace, references, options);
1601
+ (0, namespace_private_1.UANamespace_process_modelling_rule)(references, options.modellingRule);
1602
+ const method = this.internalCreateNode({
1603
+ browseName: options.browseName,
1604
+ description: options.description || "",
1605
+ displayName: options.displayName,
1606
+ eventNotifier: +options.eventNotifier,
1607
+ isAbstract: false,
1608
+ nodeClass: node_opcua_data_model_4.NodeClass.Method,
1609
+ nodeId: options.nodeId,
1610
+ references,
1611
+ rolePermissions: options.rolePermissions
1612
+ });
1613
+ (0, node_opcua_assert_1.assert)(method.nodeId !== null);
1614
+ method.propagate_back_references();
1615
+ (0, node_opcua_assert_1.assert)(!method.typeDefinition);
1616
+ return method;
1617
+ }
1618
+ }
1619
+ exports.UANamespace = UANamespace;
1620
+ UANamespace._handle_hierarchy_parent = _handle_hierarchy_parent;
1621
+ UANamespace.isNonEmptyQualifiedName = isNonEmptyQualifiedName;
1622
+ const _constructors_map = {
1623
+ DataType: ua_data_type_impl_1.UADataTypeImpl,
1624
+ Method: ua_method_impl_1.UAMethodImpl,
1625
+ Object: ua_object_impl_1.UAObjectImpl,
1626
+ ObjectType: ua_object_type_impl_1.UAObjectTypeImpl,
1627
+ ReferenceType: ua_reference_type_impl_1.UAReferenceTypeImpl,
1628
+ Variable: ua_variable_impl_1.UAVariableImpl,
1629
+ VariableType: ua_variable_type_impl_1.UAVariableTypeImpl,
1630
+ View: ua_view_impl_1.UAViewImpl
1631
+ };
1632
+ /**
1633
+ * @method _coerce_parent
1634
+ * convert a 'string' , NodeId or Object into a valid and existing object
1635
+ * @param addressSpace {IAddressSpace}
1636
+ * @param value
1637
+ * @param coerceFunc
1638
+ * @private
1639
+ */
1640
+ function _coerce_parent(addressSpace, value, coerceFunc) {
1641
+ (0, node_opcua_assert_1.assert)(typeof coerceFunc === "function");
1642
+ if (value) {
1643
+ if (typeof value === "string") {
1644
+ value = coerceFunc.call(addressSpace, value);
1645
+ }
1646
+ if (value instanceof node_opcua_nodeid_2.NodeId) {
1647
+ value = addressSpace.findNode(value);
1648
+ }
1649
+ }
1650
+ (0, node_opcua_assert_1.assert)(!value || value instanceof base_node_impl_1.BaseNodeImpl);
1651
+ return value;
1652
+ }
1653
+ function _handle_event_hierarchy_parent(addressSpace, references, options) {
1654
+ options.eventSourceOf = _coerce_parent(addressSpace, options.eventSourceOf, addressSpace._coerceNode);
1655
+ options.notifierOf = _coerce_parent(addressSpace, options.notifierOf, addressSpace._coerceNode);
1656
+ if (options.eventSourceOf) {
1657
+ (0, node_opcua_assert_1.assert)(!options.notifierOf, "notifierOf shall not be provided with eventSourceOf ");
1658
+ references.push({
1659
+ isForward: false,
1660
+ nodeId: options.eventSourceOf.nodeId,
1661
+ referenceType: "HasEventSource"
1662
+ });
1663
+ options.eventNotifier = options.eventNotifier || 1;
1664
+ }
1665
+ else if (options.notifierOf) {
1666
+ (0, node_opcua_assert_1.assert)(!options.eventSourceOf, "eventSourceOf shall not be provided with notifierOf ");
1667
+ references.push({
1668
+ isForward: false,
1669
+ nodeId: options.notifierOf.nodeId,
1670
+ referenceType: "HasNotifier"
1671
+ });
1672
+ }
1673
+ }
1674
+ function _handle_hierarchy_parent(addressSpace, references, options) {
1675
+ options.componentOf = _coerce_parent(addressSpace, options.componentOf, addressSpace._coerceNode);
1676
+ options.propertyOf = _coerce_parent(addressSpace, options.propertyOf, addressSpace._coerceNode);
1677
+ options.organizedBy = _coerce_parent(addressSpace, options.organizedBy, addressSpace._coerceFolder);
1678
+ options.encodingOf = _coerce_parent(addressSpace, options.encodingOf, addressSpace._coerceNode);
1679
+ if (options.componentOf) {
1680
+ (0, node_opcua_assert_1.assert)(!options.propertyOf);
1681
+ (0, node_opcua_assert_1.assert)(!options.organizedBy);
1682
+ (0, node_opcua_assert_1.assert)(addressSpace.rootFolder.objects, "addressSpace must have a rootFolder.objects folder");
1683
+ (0, node_opcua_assert_1.assert)(options.componentOf.nodeId !== addressSpace.rootFolder.objects.nodeId, "Only Organizes References are used to relate Objects to the 'Objects' standard Object.");
1684
+ references.push({
1685
+ isForward: false,
1686
+ nodeId: options.componentOf.nodeId,
1687
+ referenceType: "HasComponent"
1688
+ });
1689
+ }
1690
+ if (options.propertyOf) {
1691
+ (0, node_opcua_assert_1.assert)(!options.componentOf);
1692
+ (0, node_opcua_assert_1.assert)(!options.organizedBy);
1693
+ (0, node_opcua_assert_1.assert)(options.propertyOf.nodeId !== addressSpace.rootFolder.objects.nodeId, "Only Organizes References are used to relate Objects to the 'Objects' standard Object.");
1694
+ references.push({
1695
+ isForward: false,
1696
+ nodeId: options.propertyOf.nodeId,
1697
+ referenceType: "HasProperty"
1698
+ });
1699
+ }
1700
+ if (options.organizedBy) {
1701
+ (0, node_opcua_assert_1.assert)(!options.propertyOf);
1702
+ (0, node_opcua_assert_1.assert)(!options.componentOf);
1703
+ references.push({
1704
+ isForward: false,
1705
+ nodeId: options.organizedBy.nodeId,
1706
+ referenceType: "Organizes"
1707
+ });
1708
+ }
1709
+ if (options.encodingOf) {
1710
+ // parent must be a DataType
1711
+ (0, node_opcua_assert_1.assert)(options.encodingOf.nodeClass === node_opcua_data_model_4.NodeClass.DataType, "encodingOf must be toward a DataType");
1712
+ references.push({
1713
+ isForward: false,
1714
+ nodeId: options.encodingOf.nodeId,
1715
+ referenceType: "HasEncoding"
1716
+ });
1717
+ }
1718
+ }
1719
+ exports._handle_hierarchy_parent = _handle_hierarchy_parent;
1720
+ function _copy_reference(reference) {
1721
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(reference, "referenceType"));
1722
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(reference, "isForward"));
1723
+ (0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(reference, "nodeId"));
1724
+ (0, node_opcua_assert_1.assert)(reference.nodeId instanceof node_opcua_nodeid_2.NodeId);
1725
+ return {
1726
+ isForward: reference.isForward,
1727
+ nodeId: reference.nodeId,
1728
+ referenceType: reference.referenceType
1729
+ };
1730
+ }
1731
+ function _copy_references(references) {
1732
+ references = references || [];
1733
+ return references.map(_copy_reference);
1734
+ }
1735
+ function isNonEmptyQualifiedName(browseName) {
1736
+ if (!browseName) {
1737
+ return false;
1738
+ }
1739
+ if (typeof browseName === "string") {
1740
+ return browseName.length >= 0;
1741
+ }
1742
+ if (!(browseName instanceof node_opcua_data_model_2.QualifiedName)) {
1743
+ browseName = new node_opcua_data_model_2.QualifiedName(browseName);
1744
+ }
1745
+ (0, node_opcua_assert_1.assert)(browseName instanceof node_opcua_data_model_2.QualifiedName);
1746
+ return browseName.name.length > 0;
1747
+ }
1748
+ exports.isNonEmptyQualifiedName = isNonEmptyQualifiedName;
1749
+ function _handle_node_version(node, options) {
1750
+ (0, node_opcua_assert_1.assert)(options);
1751
+ if (options.nodeVersion) {
1752
+ (0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_4.NodeClass.Variable || node.nodeClass === node_opcua_data_model_4.NodeClass.Object);
1753
+ const nodeVersion = node.addressSpace.getOwnNamespace().addVariable({
1754
+ browseName: "NodeVersion",
1755
+ dataType: "String",
1756
+ propertyOf: node
1757
+ });
1758
+ const initialValue = typeof options.nodeVersion === "string" ? options.nodeVersion : "0";
1759
+ // xx console.log(" init value =",initialValue);
1760
+ nodeVersion.setValueFromSource({ dataType: "String", value: initialValue });
1761
+ }
1762
+ }
1763
+ //# sourceMappingURL=namespace_impl.js.map