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