node-opcua-address-space 2.71.0 → 2.72.2

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