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,438 +1,438 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractPartialData = exports._bindExtensionObject = exports._installExtensionObjectBindingOnProperties = exports.setExtensionObjectValue = exports._setExtensionObject = exports.propagateTouchValueUpward = exports._touchValue = void 0;
4
- const chalk = require("chalk");
5
- const node_opcua_assert_1 = require("node-opcua-assert");
6
- const node_opcua_data_model_1 = require("node-opcua-data-model");
7
- const node_opcua_date_time_1 = require("node-opcua-date-time");
8
- const node_opcua_data_value_1 = require("node-opcua-data-value");
9
- const node_opcua_debug_1 = require("node-opcua-debug");
10
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
11
- const node_opcua_status_code_1 = require("node-opcua-status-code");
12
- const node_opcua_utils_1 = require("node-opcua-utils");
13
- const node_opcua_variant_1 = require("node-opcua-variant");
14
- const base_node_private_1 = require("./base_node_private");
15
- const ua_variable_impl_1 = require("./ua_variable_impl");
16
- const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
17
- const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
18
- // const doDebug = true; // checkDebugFlag(__filename);
19
- // const debugLog = make_warningLog(__filename);
20
- const warningLog = (0, node_opcua_debug_1.make_warningLog)(__filename);
21
- const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
22
- function w(str, n) {
23
- return str.padEnd(n).substring(n);
24
- }
25
- function isProxy(ext) {
26
- return ext.$isProxy ? true : false;
27
- }
28
- function getProxyTarget(ext) {
29
- (0, node_opcua_assert_1.default)(isProxy(ext));
30
- return ext.$proxyTarget;
31
- }
32
- function unProxy(ext) {
33
- return isProxy(ext) ? getProxyTarget(ext) : ext;
34
- }
35
- function _extensionObjectFieldGetter(target, key /*, receiver*/) {
36
- if (key === "$isProxy") {
37
- return true;
38
- }
39
- if (key === "$proxyTarget") {
40
- return target;
41
- }
42
- if (target[key] === undefined) {
43
- return undefined;
44
- }
45
- return target[key];
46
- }
47
- function _extensionObjectFieldSetter(variable, target, key, value /*, receiver*/) {
48
- target[key] = value;
49
- const child = variable[key];
50
- if (child && child.touchValue) {
51
- child.touchValue();
52
- }
53
- return true; // true means the set operation has succeeded
54
- }
55
- function makeHandler(variable) {
56
- const handler = {
57
- get: _extensionObjectFieldGetter,
58
- set: _extensionObjectFieldSetter.bind(null, variable)
59
- };
60
- return handler;
61
- }
62
- /**
63
- * inconditionnaly change the time stamp of the variable
64
- * if the variable is being listened to, and if the minimumSamplingInterval is exactly zero,
65
- * then the change will be reported to the observer
66
- *
67
- */
68
- function _touchValue(property, now) {
69
- property.$dataValue.sourceTimestamp = now.timestamp;
70
- property.$dataValue.sourcePicoseconds = now.picoseconds;
71
- property.$dataValue.serverTimestamp = now.timestamp;
72
- property.$dataValue.serverPicoseconds = now.picoseconds;
73
- property.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
74
- if (property.minimumSamplingInterval === 0) {
75
- if (property.listenerCount("value_changed") > 0) {
76
- const clonedDataValue = property.readValue();
77
- property.emit("value_changed", clonedDataValue);
78
- }
79
- }
80
- }
81
- exports._touchValue = _touchValue;
82
- function propagateTouchValueUpward(self, now) {
83
- _touchValue(self, now);
84
- if (self.parent && self.parent.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
85
- const parentVar = self.parent;
86
- if (!parentVar.isExtensionObject())
87
- return;
88
- propagateTouchValueUpward(parentVar, now);
89
- }
90
- }
91
- exports.propagateTouchValueUpward = propagateTouchValueUpward;
92
- function propagateTouchValueDownward(self, now) {
93
- if (!self.isExtensionObject())
94
- return;
95
- // also propagate changes to embeded variables
96
- const dataTypeNode = self.getDataTypeNode();
97
- const definition = dataTypeNode.getStructureDefinition();
98
- for (const field of definition.fields || []) {
99
- const property = self.getChildByName(field.name);
100
- if (property) {
101
- _touchValue(property, now);
102
- // to do cascade recursivelly ?
103
- }
104
- }
105
- }
106
- function _setExtensionObject(self, ext) {
107
- // assert(!(ext as any).$isProxy, "internal error ! ExtensionObject has already been proxied !");
108
- if (Array.isArray(ext)) {
109
- (0, node_opcua_assert_1.default)(self.valueRank === 1, "Only Array is supported for the time being");
110
- ext = ext.map((e) => unProxy(e));
111
- self.$dataValue.value.arrayType = node_opcua_variant_1.VariantArrayType.Array;
112
- self.$extensionObject = ext.map((e) => new Proxy(e, makeHandler(self)));
113
- self.$dataValue.value.dataType = node_opcua_variant_1.DataType.ExtensionObject;
114
- self.$dataValue.value.value = self.$extensionObject;
115
- self.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
116
- return;
117
- }
118
- else {
119
- ext = unProxy(ext);
120
- self.$extensionObject = new Proxy(ext, makeHandler(self));
121
- self.$dataValue.value.dataType = node_opcua_variant_1.DataType.ExtensionObject;
122
- self.$dataValue.value.value = self.$extensionObject;
123
- self.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
124
- }
125
- const now = (0, node_opcua_date_time_1.getCurrentClock)();
126
- propagateTouchValueUpward(self, now);
127
- propagateTouchValueDownward(self, now);
128
- }
129
- exports._setExtensionObject = _setExtensionObject;
130
- function setExtensionObjectValue(node, partialObject) {
131
- const extensionObject = node.$extensionObject;
132
- if (!extensionObject) {
133
- throw new Error("setExtensionObjectValue node has no extension object " + node.browseName.toString());
134
- }
135
- function _update_extension_object(extObject, partialObject1) {
136
- const keys = Object.keys(partialObject1);
137
- for (const prop of keys) {
138
- if (extObject[prop] instanceof Object) {
139
- _update_extension_object(extObject[prop], partialObject1[prop]);
140
- }
141
- else {
142
- extObject[prop] = partialObject1[prop];
143
- }
144
- }
145
- }
146
- _update_extension_object(extensionObject, partialObject);
147
- }
148
- exports.setExtensionObjectValue = setExtensionObjectValue;
149
- function getOrCreateProperty(variableNode, field, options) {
150
- const dt = variableNode.getDataTypeNode();
151
- // the namespace for the structure browse name elements
152
- const structureNamespace = dt.nodeId.namespace;
153
- const components = variableNode.getComponents();
154
- let property;
155
- const selectedComponents = components.filter((f) => f instanceof ua_variable_impl_1.UAVariableImpl && f.browseName.name.toString() === field.name);
156
- // istanbul ignore next
157
- if (field.dataType.value === node_opcua_variant_1.DataType.Variant) {
158
- warningLog("Warning : variant is not supported in ExtensionObject");
159
- }
160
- if (selectedComponents.length === 1) {
161
- property = selectedComponents[0];
162
- /* istanbul ignore next */
163
- }
164
- else {
165
- if (!options.createMissingProp) {
166
- return null;
167
- }
168
- debugLog("adding missing array variable", field.name, variableNode.browseName.toString(), variableNode.nodeId.toString());
169
- // todo: Handle array appropriately...
170
- (0, node_opcua_assert_1.default)(selectedComponents.length === 0);
171
- // create a variable (Note we may use ns=1;s=parentName/0:PropertyName)
172
- property = variableNode.namespace.addVariable({
173
- browseName: { namespaceIndex: structureNamespace, name: field.name.toString() },
174
- componentOf: variableNode,
175
- dataType: field.dataType,
176
- minimumSamplingInterval: variableNode.minimumSamplingInterval
177
- });
178
- (0, node_opcua_assert_1.default)(property.minimumSamplingInterval === variableNode.minimumSamplingInterval);
179
- }
180
- return property;
181
- }
182
- function prepareVariantValue(dataType, value) {
183
- if ((dataType === node_opcua_variant_1.DataType.Int32 || dataType === node_opcua_variant_1.DataType.UInt32) && value && value.key) {
184
- value = value.value;
185
- }
186
- return value;
187
- }
188
- function bindProperty(variableNode, propertyNode, name, dataType) {
189
- // eslint-disable-next-line @typescript-eslint/no-this-alias
190
- propertyNode.bindVariable({
191
- timestamped_get: () => {
192
- const propertyValue = variableNode.$extensionObject[name];
193
- if (propertyValue === undefined) {
194
- propertyNode.$dataValue.value.dataType = node_opcua_variant_1.DataType.Null;
195
- propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
196
- propertyNode.$dataValue.value.value = null;
197
- return new node_opcua_data_value_1.DataValue(propertyNode.$dataValue);
198
- }
199
- const value = prepareVariantValue(dataType, propertyValue);
200
- propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
201
- propertyNode.$dataValue.value.dataType = dataType;
202
- propertyNode.$dataValue.value.value = value;
203
- return new node_opcua_data_value_1.DataValue(propertyNode.$dataValue);
204
- },
205
- timestamped_set: (_dataValue, callback) => {
206
- callback(null, node_opcua_status_code_1.StatusCodes.BadNotWritable);
207
- }
208
- }, true);
209
- }
210
- function _installExtensionObjectBindingOnProperties(variableNode, options) {
211
- const addressSpace = variableNode.addressSpace;
212
- const dt = variableNode.getDataTypeNode();
213
- const definition = dt.getStructureDefinition();
214
- for (const field of definition.fields || []) {
215
- // istanbul ignore next
216
- if (node_opcua_nodeid_1.NodeId.sameNodeId(node_opcua_nodeid_1.NodeId.nullNodeId, field.dataType)) {
217
- warningLog("field.dataType is null ! ", field.name, node_opcua_nodeid_1.NodeId.nullNodeId.toString());
218
- warningLog(field.toString());
219
- warningLog(" dataType replaced with BaseDataType ");
220
- warningLog(definition.toString());
221
- field.dataType = variableNode.resolveNodeId("BaseDataType");
222
- }
223
- const propertyNode = getOrCreateProperty(variableNode, field, options);
224
- if (!propertyNode) {
225
- continue;
226
- }
227
- propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
228
- propertyNode.touchValue();
229
- const basicDataType = addressSpace.findCorrespondingBasicDataType(field.dataType);
230
- // istanbul ignore next
231
- if (doDebug) {
232
- const x = addressSpace.findNode(field.dataType).browseName.toString();
233
- debugLog(chalk.cyan("xxx"), " dataType", w(field.dataType.toString(), 8), w(field.name, 25), "valueRank", chalk.cyan(w((0, base_node_private_1.valueRankToString)(field.valueRank), 10)), chalk.green(w(x, 15)), "basicType = ", chalk.yellow(w(basicDataType.toString(), 20)), propertyNode.nodeId.toString(), propertyNode.readValue().statusCode.toString());
234
- }
235
- const camelCaseName = (0, node_opcua_utils_1.lowerFirstLetter)(field.name);
236
- (0, node_opcua_assert_1.default)(Object.prototype.hasOwnProperty.call(variableNode.$extensionObject, camelCaseName));
237
- if (variableNode.$extensionObject[camelCaseName] !== undefined && basicDataType === node_opcua_variant_1.DataType.ExtensionObject) {
238
- propertyNode.bindExtensionObject(variableNode.$extensionObject[camelCaseName], Object.assign(Object.assign({}, options), { force: true }));
239
- // replace upwards
240
- variableNode.$extensionObject[camelCaseName] = propertyNode.$extensionObject;
241
- }
242
- else {
243
- const prop = variableNode.$extensionObject[camelCaseName];
244
- if (prop === undefined) {
245
- propertyNode._internal_set_value(new node_opcua_variant_1.Variant({
246
- dataType: node_opcua_variant_1.DataType.Null
247
- }));
248
- }
249
- else {
250
- const preparedValue = prepareVariantValue(basicDataType, prop);
251
- propertyNode._internal_set_value(new node_opcua_variant_1.Variant({
252
- dataType: basicDataType,
253
- value: preparedValue
254
- }));
255
- }
256
- // eslint-disable-next-line @typescript-eslint/no-this-alias
257
- // property.camelCaseName = camelCaseName;
258
- propertyNode.setValueFromSource = function (variant) {
259
- // eslint-disable-next-line @typescript-eslint/no-this-alias
260
- const inner_this = this;
261
- const variant1 = node_opcua_variant_1.Variant.coerce(variant);
262
- inner_this.verifyVariantCompatibility(variant1);
263
- // because self.$extensionObject is a Proxy with handlers that
264
- // cascade the chagne we do not need to call touchValue() here
265
- variableNode.$extensionObject[camelCaseName] = variant1.value;
266
- };
267
- }
268
- (0, node_opcua_assert_1.default)(propertyNode.readValue().statusCode.equals(node_opcua_status_code_1.StatusCodes.Good));
269
- bindProperty(variableNode, propertyNode, camelCaseName, basicDataType);
270
- }
271
- }
272
- exports._installExtensionObjectBindingOnProperties = _installExtensionObjectBindingOnProperties;
273
- // eslint-disable-next-line complexity
274
- function _bindExtensionObject(self, optionalExtensionObject, options) {
275
- var _a, _b;
276
- options = options || { createMissingProp: false };
277
- const addressSpace = self.addressSpace;
278
- const structure = addressSpace.findDataType("Structure");
279
- let extensionObject_;
280
- if (!structure) {
281
- // the addressSpace is limited and doesn't provide extension object
282
- // bindExtensionObject cannot be performed and shall finish here.
283
- return null;
284
- }
285
- (0, node_opcua_assert_1.default)(structure.browseName.toString() === "Structure", "expecting DataType Structure to be in IAddressSpace");
286
- const dt = self.getDataTypeNode();
287
- if (!dt.isSupertypeOf(structure)) {
288
- return null;
289
- }
290
- if (self.valueRank !== -1 && self.valueRank !== 1) {
291
- throw new Error("Cannot bind an extension object here, valueRank must be scalar (-1) or one-dimensional (1)");
292
- }
293
- // istanbul ignore next
294
- if (doDebug) {
295
- debugLog(" ------------------------------ binding ", self.browseName.toString(), self.nodeId.toString());
296
- }
297
- // ignore bindExtensionObject on sub extension object, bindExtensionObject has to be called from the top most object
298
- if (!options.force &&
299
- self.parent &&
300
- (self.parent.nodeClass === node_opcua_data_model_1.NodeClass.Variable || self.parent.nodeClass === node_opcua_data_model_1.NodeClass.VariableType)) {
301
- const parentDataType = self.parent.dataType;
302
- const dataTypeNode = addressSpace.findNode(parentDataType);
303
- // istanbul ignore next
304
- if (dataTypeNode && dataTypeNode.isSupertypeOf(structure)) {
305
- // warningLog(
306
- // "Ignoring bindExtensionObject on sub extension object",
307
- // "child=",
308
- // self.browseName.toString(),
309
- // "parent=",
310
- // self.parent.browseName.toString()
311
- // );
312
- return null;
313
- }
314
- }
315
- // -------------------- make sure we do not bind a variable twice ....
316
- if (self.$extensionObject && !optionalExtensionObject) {
317
- // istanbul ignore next
318
- if (!self.checkExtensionObjectIsCorrect(self.$extensionObject)) {
319
- warningLog("on node : ", self.browseName.toString(), self.nodeId.toString(), "dataType=", self.dataType.toString({ addressSpace: self.addressSpace }));
320
- warningLog((_a = self.$extensionObject) === null || _a === void 0 ? void 0 : _a.toString());
321
- throw new Error("bindExtensionObject: $extensionObject is incorrect: we are expecting a " +
322
- self.dataType.toString({ addressSpace: self.addressSpace }) +
323
- " but we got a " +
324
- ((_b = self.$extensionObject) === null || _b === void 0 ? void 0 : _b.constructor.name));
325
- }
326
- return self.$extensionObject;
327
- // throw new Error("Variable already bound");
328
- }
329
- // ------------------------------------------------------
330
- // make sure we have a structure
331
- // ------------------------------------------------------
332
- const s = self.readValue();
333
- // istanbul ignore next
334
- if (self.dataTypeObj.isAbstract) {
335
- warningLog("Warning the DataType associated with this Variable is abstract ", self.dataTypeObj.browseName.toString());
336
- warningLog("You need to provide a extension object yourself ");
337
- throw new Error("bindExtensionObject requires a extensionObject as associated dataType is only abstract");
338
- }
339
- if (s.value && s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject && s.value.value && optionalExtensionObject) {
340
- // we want to replace the extension object
341
- s.value.value = null;
342
- }
343
- innerBindExtensionObject();
344
- (0, node_opcua_assert_1.default)(self.$extensionObject instanceof Object);
345
- return self.$extensionObject;
346
- function innerBindExtensionObject() {
347
- if (s.value && (s.value.dataType === node_opcua_variant_1.DataType.Null || (s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject && !s.value.value))) {
348
- if (self.valueRank === -1 /** Scalar */) {
349
- // create a structure and bind it
350
- extensionObject_ = optionalExtensionObject || addressSpace.constructExtensionObject(self.dataType, {});
351
- // eslint-disable-next-line @typescript-eslint/no-this-alias
352
- self.bindVariable({
353
- timestamped_get() {
354
- const d = new node_opcua_data_value_1.DataValue(self.$dataValue);
355
- d.value.value = self.$extensionObject ? self.$extensionObject.clone() : null;
356
- return d;
357
- },
358
- timestamped_set(dataValue, callback) {
359
- const ext = dataValue.value.value;
360
- if (!self.checkExtensionObjectIsCorrect(ext)) {
361
- return callback(null, node_opcua_status_code_1.StatusCodes.BadInvalidArgument);
362
- }
363
- _setExtensionObject(self, ext);
364
- callback(null, node_opcua_status_code_1.StatusCodes.Good);
365
- }
366
- }, true);
367
- _setExtensionObject(self, extensionObject_);
368
- }
369
- else if (self.valueRank === 1 /** Array */) {
370
- // create a structure and bind it
371
- extensionObject_ = optionalExtensionObject || [];
372
- // eslint-disable-next-line @typescript-eslint/no-this-alias
373
- self.bindVariable({
374
- timestamped_get() {
375
- const d = new node_opcua_data_value_1.DataValue(self.$dataValue);
376
- d.value.value = self.$extensionObject
377
- ? self.$extensionObject.map((e) => e.clone())
378
- : null;
379
- return d;
380
- },
381
- timestamped_set(dataValue, callback) {
382
- const ext = dataValue.value.value;
383
- if (!self.checkExtensionObjectIsCorrect(ext)) {
384
- return callback(null, node_opcua_status_code_1.StatusCodes.BadInvalidArgument);
385
- }
386
- _setExtensionObject(self, ext);
387
- callback(null, node_opcua_status_code_1.StatusCodes.Good);
388
- }
389
- }, true);
390
- _setExtensionObject(self, extensionObject_);
391
- }
392
- else {
393
- errorLog(self.toString());
394
- errorLog("Unsupported case ! valueRank= ", self.valueRank);
395
- }
396
- }
397
- else {
398
- // verify that variant has the correct type
399
- (0, node_opcua_assert_1.default)(s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject);
400
- self.$extensionObject = s.value.value;
401
- (0, node_opcua_assert_1.default)(self.checkExtensionObjectIsCorrect(self.$extensionObject));
402
- (0, node_opcua_assert_1.default)(s.statusCode.equals(node_opcua_status_code_1.StatusCodes.Good));
403
- }
404
- _installExtensionObjectBindingOnProperties(self, options);
405
- }
406
- }
407
- exports._bindExtensionObject = _bindExtensionObject;
408
- function extractPartialData(path, extensionObject) {
409
- let name;
410
- if (typeof path === "string") {
411
- path = path.split(".");
412
- }
413
- (0, node_opcua_assert_1.default)(path instanceof Array);
414
- let i;
415
- // read partial value
416
- const partialData = {};
417
- let p = partialData;
418
- for (i = 0; i < path.length - 1; i++) {
419
- name = path[i];
420
- p[name] = {};
421
- p = p[name];
422
- }
423
- name = path[path.length - 1];
424
- p[name] = 0;
425
- let c1 = partialData;
426
- let c2 = extensionObject;
427
- for (i = 0; i < path.length - 1; i++) {
428
- name = path[i];
429
- c1 = partialData[name];
430
- c2 = extensionObject[name];
431
- }
432
- name = path[path.length - 1];
433
- c1[name] = c2[name];
434
- c1[name] += 1;
435
- return partialData;
436
- }
437
- exports.extractPartialData = extractPartialData;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractPartialData = exports._bindExtensionObject = exports._installExtensionObjectBindingOnProperties = exports.setExtensionObjectValue = exports._setExtensionObject = exports.propagateTouchValueUpward = exports._touchValue = void 0;
4
+ const chalk = require("chalk");
5
+ const node_opcua_assert_1 = require("node-opcua-assert");
6
+ const node_opcua_data_model_1 = require("node-opcua-data-model");
7
+ const node_opcua_date_time_1 = require("node-opcua-date-time");
8
+ const node_opcua_data_value_1 = require("node-opcua-data-value");
9
+ const node_opcua_debug_1 = require("node-opcua-debug");
10
+ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
11
+ const node_opcua_status_code_1 = require("node-opcua-status-code");
12
+ const node_opcua_utils_1 = require("node-opcua-utils");
13
+ const node_opcua_variant_1 = require("node-opcua-variant");
14
+ const base_node_private_1 = require("./base_node_private");
15
+ const ua_variable_impl_1 = require("./ua_variable_impl");
16
+ const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
17
+ const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
18
+ // const doDebug = true; // checkDebugFlag(__filename);
19
+ // const debugLog = make_warningLog(__filename);
20
+ const warningLog = (0, node_opcua_debug_1.make_warningLog)(__filename);
21
+ const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
22
+ function w(str, n) {
23
+ return str.padEnd(n).substring(n);
24
+ }
25
+ function isProxy(ext) {
26
+ return ext.$isProxy ? true : false;
27
+ }
28
+ function getProxyTarget(ext) {
29
+ (0, node_opcua_assert_1.default)(isProxy(ext));
30
+ return ext.$proxyTarget;
31
+ }
32
+ function unProxy(ext) {
33
+ return isProxy(ext) ? getProxyTarget(ext) : ext;
34
+ }
35
+ function _extensionObjectFieldGetter(target, key /*, receiver*/) {
36
+ if (key === "$isProxy") {
37
+ return true;
38
+ }
39
+ if (key === "$proxyTarget") {
40
+ return target;
41
+ }
42
+ if (target[key] === undefined) {
43
+ return undefined;
44
+ }
45
+ return target[key];
46
+ }
47
+ function _extensionObjectFieldSetter(variable, target, key, value /*, receiver*/) {
48
+ target[key] = value;
49
+ const child = variable[key];
50
+ if (child && child.touchValue) {
51
+ child.touchValue();
52
+ }
53
+ return true; // true means the set operation has succeeded
54
+ }
55
+ function makeHandler(variable) {
56
+ const handler = {
57
+ get: _extensionObjectFieldGetter,
58
+ set: _extensionObjectFieldSetter.bind(null, variable)
59
+ };
60
+ return handler;
61
+ }
62
+ /**
63
+ * inconditionnaly change the time stamp of the variable
64
+ * if the variable is being listened to, and if the minimumSamplingInterval is exactly zero,
65
+ * then the change will be reported to the observer
66
+ *
67
+ */
68
+ function _touchValue(property, now) {
69
+ property.$dataValue.sourceTimestamp = now.timestamp;
70
+ property.$dataValue.sourcePicoseconds = now.picoseconds;
71
+ property.$dataValue.serverTimestamp = now.timestamp;
72
+ property.$dataValue.serverPicoseconds = now.picoseconds;
73
+ property.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
74
+ if (property.minimumSamplingInterval === 0) {
75
+ if (property.listenerCount("value_changed") > 0) {
76
+ const clonedDataValue = property.readValue();
77
+ property.emit("value_changed", clonedDataValue);
78
+ }
79
+ }
80
+ }
81
+ exports._touchValue = _touchValue;
82
+ function propagateTouchValueUpward(self, now) {
83
+ _touchValue(self, now);
84
+ if (self.parent && self.parent.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
85
+ const parentVar = self.parent;
86
+ if (!parentVar.isExtensionObject())
87
+ return;
88
+ propagateTouchValueUpward(parentVar, now);
89
+ }
90
+ }
91
+ exports.propagateTouchValueUpward = propagateTouchValueUpward;
92
+ function propagateTouchValueDownward(self, now) {
93
+ if (!self.isExtensionObject())
94
+ return;
95
+ // also propagate changes to embeded variables
96
+ const dataTypeNode = self.getDataTypeNode();
97
+ const definition = dataTypeNode.getStructureDefinition();
98
+ for (const field of definition.fields || []) {
99
+ const property = self.getChildByName(field.name);
100
+ if (property) {
101
+ _touchValue(property, now);
102
+ // to do cascade recursivelly ?
103
+ }
104
+ }
105
+ }
106
+ function _setExtensionObject(self, ext) {
107
+ // assert(!(ext as any).$isProxy, "internal error ! ExtensionObject has already been proxied !");
108
+ if (Array.isArray(ext)) {
109
+ (0, node_opcua_assert_1.default)(self.valueRank === 1, "Only Array is supported for the time being");
110
+ ext = ext.map((e) => unProxy(e));
111
+ self.$dataValue.value.arrayType = node_opcua_variant_1.VariantArrayType.Array;
112
+ self.$extensionObject = ext.map((e) => new Proxy(e, makeHandler(self)));
113
+ self.$dataValue.value.dataType = node_opcua_variant_1.DataType.ExtensionObject;
114
+ self.$dataValue.value.value = self.$extensionObject;
115
+ self.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
116
+ return;
117
+ }
118
+ else {
119
+ ext = unProxy(ext);
120
+ self.$extensionObject = new Proxy(ext, makeHandler(self));
121
+ self.$dataValue.value.dataType = node_opcua_variant_1.DataType.ExtensionObject;
122
+ self.$dataValue.value.value = self.$extensionObject;
123
+ self.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
124
+ }
125
+ const now = (0, node_opcua_date_time_1.getCurrentClock)();
126
+ propagateTouchValueUpward(self, now);
127
+ propagateTouchValueDownward(self, now);
128
+ }
129
+ exports._setExtensionObject = _setExtensionObject;
130
+ function setExtensionObjectValue(node, partialObject) {
131
+ const extensionObject = node.$extensionObject;
132
+ if (!extensionObject) {
133
+ throw new Error("setExtensionObjectValue node has no extension object " + node.browseName.toString());
134
+ }
135
+ function _update_extension_object(extObject, partialObject1) {
136
+ const keys = Object.keys(partialObject1);
137
+ for (const prop of keys) {
138
+ if (extObject[prop] instanceof Object) {
139
+ _update_extension_object(extObject[prop], partialObject1[prop]);
140
+ }
141
+ else {
142
+ extObject[prop] = partialObject1[prop];
143
+ }
144
+ }
145
+ }
146
+ _update_extension_object(extensionObject, partialObject);
147
+ }
148
+ exports.setExtensionObjectValue = setExtensionObjectValue;
149
+ function getOrCreateProperty(variableNode, field, options) {
150
+ const dt = variableNode.getDataTypeNode();
151
+ // the namespace for the structure browse name elements
152
+ const structureNamespace = dt.nodeId.namespace;
153
+ const components = variableNode.getComponents();
154
+ let property;
155
+ const selectedComponents = components.filter((f) => f instanceof ua_variable_impl_1.UAVariableImpl && f.browseName.name.toString() === field.name);
156
+ // istanbul ignore next
157
+ if (field.dataType.value === node_opcua_variant_1.DataType.Variant) {
158
+ warningLog("Warning : variant is not supported in ExtensionObject");
159
+ }
160
+ if (selectedComponents.length === 1) {
161
+ property = selectedComponents[0];
162
+ /* istanbul ignore next */
163
+ }
164
+ else {
165
+ if (!options.createMissingProp) {
166
+ return null;
167
+ }
168
+ debugLog("adding missing array variable", field.name, variableNode.browseName.toString(), variableNode.nodeId.toString());
169
+ // todo: Handle array appropriately...
170
+ (0, node_opcua_assert_1.default)(selectedComponents.length === 0);
171
+ // create a variable (Note we may use ns=1;s=parentName/0:PropertyName)
172
+ property = variableNode.namespace.addVariable({
173
+ browseName: { namespaceIndex: structureNamespace, name: field.name.toString() },
174
+ componentOf: variableNode,
175
+ dataType: field.dataType,
176
+ minimumSamplingInterval: variableNode.minimumSamplingInterval
177
+ });
178
+ (0, node_opcua_assert_1.default)(property.minimumSamplingInterval === variableNode.minimumSamplingInterval);
179
+ }
180
+ return property;
181
+ }
182
+ function prepareVariantValue(dataType, value) {
183
+ if ((dataType === node_opcua_variant_1.DataType.Int32 || dataType === node_opcua_variant_1.DataType.UInt32) && value && value.key) {
184
+ value = value.value;
185
+ }
186
+ return value;
187
+ }
188
+ function bindProperty(variableNode, propertyNode, name, dataType) {
189
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
190
+ propertyNode.bindVariable({
191
+ timestamped_get: () => {
192
+ const propertyValue = variableNode.$extensionObject[name];
193
+ if (propertyValue === undefined) {
194
+ propertyNode.$dataValue.value.dataType = node_opcua_variant_1.DataType.Null;
195
+ propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
196
+ propertyNode.$dataValue.value.value = null;
197
+ return new node_opcua_data_value_1.DataValue(propertyNode.$dataValue);
198
+ }
199
+ const value = prepareVariantValue(dataType, propertyValue);
200
+ propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
201
+ propertyNode.$dataValue.value.dataType = dataType;
202
+ propertyNode.$dataValue.value.value = value;
203
+ return new node_opcua_data_value_1.DataValue(propertyNode.$dataValue);
204
+ },
205
+ timestamped_set: (_dataValue, callback) => {
206
+ callback(null, node_opcua_status_code_1.StatusCodes.BadNotWritable);
207
+ }
208
+ }, true);
209
+ }
210
+ function _installExtensionObjectBindingOnProperties(variableNode, options) {
211
+ const addressSpace = variableNode.addressSpace;
212
+ const dt = variableNode.getDataTypeNode();
213
+ const definition = dt.getStructureDefinition();
214
+ for (const field of definition.fields || []) {
215
+ // istanbul ignore next
216
+ if (node_opcua_nodeid_1.NodeId.sameNodeId(node_opcua_nodeid_1.NodeId.nullNodeId, field.dataType)) {
217
+ warningLog("field.dataType is null ! ", field.name, node_opcua_nodeid_1.NodeId.nullNodeId.toString());
218
+ warningLog(field.toString());
219
+ warningLog(" dataType replaced with BaseDataType ");
220
+ warningLog(definition.toString());
221
+ field.dataType = variableNode.resolveNodeId("BaseDataType");
222
+ }
223
+ const propertyNode = getOrCreateProperty(variableNode, field, options);
224
+ if (!propertyNode) {
225
+ continue;
226
+ }
227
+ propertyNode.$dataValue.statusCode = node_opcua_status_code_1.StatusCodes.Good;
228
+ propertyNode.touchValue();
229
+ const basicDataType = addressSpace.findCorrespondingBasicDataType(field.dataType);
230
+ // istanbul ignore next
231
+ if (doDebug) {
232
+ const x = addressSpace.findNode(field.dataType).browseName.toString();
233
+ debugLog(chalk.cyan("xxx"), " dataType", w(field.dataType.toString(), 8), w(field.name, 25), "valueRank", chalk.cyan(w((0, base_node_private_1.valueRankToString)(field.valueRank), 10)), chalk.green(w(x, 15)), "basicType = ", chalk.yellow(w(basicDataType.toString(), 20)), propertyNode.nodeId.toString(), propertyNode.readValue().statusCode.toString());
234
+ }
235
+ const camelCaseName = (0, node_opcua_utils_1.lowerFirstLetter)(field.name);
236
+ (0, node_opcua_assert_1.default)(Object.prototype.hasOwnProperty.call(variableNode.$extensionObject, camelCaseName));
237
+ if (variableNode.$extensionObject[camelCaseName] !== undefined && basicDataType === node_opcua_variant_1.DataType.ExtensionObject) {
238
+ propertyNode.bindExtensionObject(variableNode.$extensionObject[camelCaseName], Object.assign(Object.assign({}, options), { force: true }));
239
+ // replace upwards
240
+ variableNode.$extensionObject[camelCaseName] = propertyNode.$extensionObject;
241
+ }
242
+ else {
243
+ const prop = variableNode.$extensionObject[camelCaseName];
244
+ if (prop === undefined) {
245
+ propertyNode._internal_set_value(new node_opcua_variant_1.Variant({
246
+ dataType: node_opcua_variant_1.DataType.Null
247
+ }));
248
+ }
249
+ else {
250
+ const preparedValue = prepareVariantValue(basicDataType, prop);
251
+ propertyNode._internal_set_value(new node_opcua_variant_1.Variant({
252
+ dataType: basicDataType,
253
+ value: preparedValue
254
+ }));
255
+ }
256
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
257
+ // property.camelCaseName = camelCaseName;
258
+ propertyNode.setValueFromSource = function (variant) {
259
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
260
+ const inner_this = this;
261
+ const variant1 = node_opcua_variant_1.Variant.coerce(variant);
262
+ inner_this.verifyVariantCompatibility(variant1);
263
+ // because self.$extensionObject is a Proxy with handlers that
264
+ // cascade the chagne we do not need to call touchValue() here
265
+ variableNode.$extensionObject[camelCaseName] = variant1.value;
266
+ };
267
+ }
268
+ (0, node_opcua_assert_1.default)(propertyNode.readValue().statusCode.equals(node_opcua_status_code_1.StatusCodes.Good));
269
+ bindProperty(variableNode, propertyNode, camelCaseName, basicDataType);
270
+ }
271
+ }
272
+ exports._installExtensionObjectBindingOnProperties = _installExtensionObjectBindingOnProperties;
273
+ // eslint-disable-next-line complexity
274
+ function _bindExtensionObject(self, optionalExtensionObject, options) {
275
+ var _a, _b;
276
+ options = options || { createMissingProp: false };
277
+ const addressSpace = self.addressSpace;
278
+ const structure = addressSpace.findDataType("Structure");
279
+ let extensionObject_;
280
+ if (!structure) {
281
+ // the addressSpace is limited and doesn't provide extension object
282
+ // bindExtensionObject cannot be performed and shall finish here.
283
+ return null;
284
+ }
285
+ (0, node_opcua_assert_1.default)(structure.browseName.toString() === "Structure", "expecting DataType Structure to be in IAddressSpace");
286
+ const dt = self.getDataTypeNode();
287
+ if (!dt.isSupertypeOf(structure)) {
288
+ return null;
289
+ }
290
+ if (self.valueRank !== -1 && self.valueRank !== 1) {
291
+ throw new Error("Cannot bind an extension object here, valueRank must be scalar (-1) or one-dimensional (1)");
292
+ }
293
+ // istanbul ignore next
294
+ if (doDebug) {
295
+ debugLog(" ------------------------------ binding ", self.browseName.toString(), self.nodeId.toString());
296
+ }
297
+ // ignore bindExtensionObject on sub extension object, bindExtensionObject has to be called from the top most object
298
+ if (!options.force &&
299
+ self.parent &&
300
+ (self.parent.nodeClass === node_opcua_data_model_1.NodeClass.Variable || self.parent.nodeClass === node_opcua_data_model_1.NodeClass.VariableType)) {
301
+ const parentDataType = self.parent.dataType;
302
+ const dataTypeNode = addressSpace.findNode(parentDataType);
303
+ // istanbul ignore next
304
+ if (dataTypeNode && dataTypeNode.isSupertypeOf(structure)) {
305
+ // warningLog(
306
+ // "Ignoring bindExtensionObject on sub extension object",
307
+ // "child=",
308
+ // self.browseName.toString(),
309
+ // "parent=",
310
+ // self.parent.browseName.toString()
311
+ // );
312
+ return null;
313
+ }
314
+ }
315
+ // -------------------- make sure we do not bind a variable twice ....
316
+ if (self.$extensionObject && !optionalExtensionObject) {
317
+ // istanbul ignore next
318
+ if (!self.checkExtensionObjectIsCorrect(self.$extensionObject)) {
319
+ warningLog("on node : ", self.browseName.toString(), self.nodeId.toString(), "dataType=", self.dataType.toString({ addressSpace: self.addressSpace }));
320
+ warningLog((_a = self.$extensionObject) === null || _a === void 0 ? void 0 : _a.toString());
321
+ throw new Error("bindExtensionObject: $extensionObject is incorrect: we are expecting a " +
322
+ self.dataType.toString({ addressSpace: self.addressSpace }) +
323
+ " but we got a " +
324
+ ((_b = self.$extensionObject) === null || _b === void 0 ? void 0 : _b.constructor.name));
325
+ }
326
+ return self.$extensionObject;
327
+ // throw new Error("Variable already bound");
328
+ }
329
+ // ------------------------------------------------------
330
+ // make sure we have a structure
331
+ // ------------------------------------------------------
332
+ const s = self.readValue();
333
+ // istanbul ignore next
334
+ if (self.dataTypeObj.isAbstract) {
335
+ warningLog("Warning the DataType associated with this Variable is abstract ", self.dataTypeObj.browseName.toString());
336
+ warningLog("You need to provide a extension object yourself ");
337
+ throw new Error("bindExtensionObject requires a extensionObject as associated dataType is only abstract");
338
+ }
339
+ if (s.value && s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject && s.value.value && optionalExtensionObject) {
340
+ // we want to replace the extension object
341
+ s.value.value = null;
342
+ }
343
+ innerBindExtensionObject();
344
+ (0, node_opcua_assert_1.default)(self.$extensionObject instanceof Object);
345
+ return self.$extensionObject;
346
+ function innerBindExtensionObject() {
347
+ if (s.value && (s.value.dataType === node_opcua_variant_1.DataType.Null || (s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject && !s.value.value))) {
348
+ if (self.valueRank === -1 /** Scalar */) {
349
+ // create a structure and bind it
350
+ extensionObject_ = optionalExtensionObject || addressSpace.constructExtensionObject(self.dataType, {});
351
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
352
+ self.bindVariable({
353
+ timestamped_get() {
354
+ const d = new node_opcua_data_value_1.DataValue(self.$dataValue);
355
+ d.value.value = self.$extensionObject ? self.$extensionObject.clone() : null;
356
+ return d;
357
+ },
358
+ timestamped_set(dataValue, callback) {
359
+ const ext = dataValue.value.value;
360
+ if (!self.checkExtensionObjectIsCorrect(ext)) {
361
+ return callback(null, node_opcua_status_code_1.StatusCodes.BadInvalidArgument);
362
+ }
363
+ _setExtensionObject(self, ext);
364
+ callback(null, node_opcua_status_code_1.StatusCodes.Good);
365
+ }
366
+ }, true);
367
+ _setExtensionObject(self, extensionObject_);
368
+ }
369
+ else if (self.valueRank === 1 /** Array */) {
370
+ // create a structure and bind it
371
+ extensionObject_ = optionalExtensionObject || [];
372
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
373
+ self.bindVariable({
374
+ timestamped_get() {
375
+ const d = new node_opcua_data_value_1.DataValue(self.$dataValue);
376
+ d.value.value = self.$extensionObject
377
+ ? self.$extensionObject.map((e) => e.clone())
378
+ : null;
379
+ return d;
380
+ },
381
+ timestamped_set(dataValue, callback) {
382
+ const ext = dataValue.value.value;
383
+ if (!self.checkExtensionObjectIsCorrect(ext)) {
384
+ return callback(null, node_opcua_status_code_1.StatusCodes.BadInvalidArgument);
385
+ }
386
+ _setExtensionObject(self, ext);
387
+ callback(null, node_opcua_status_code_1.StatusCodes.Good);
388
+ }
389
+ }, true);
390
+ _setExtensionObject(self, extensionObject_);
391
+ }
392
+ else {
393
+ errorLog(self.toString());
394
+ errorLog("Unsupported case ! valueRank= ", self.valueRank);
395
+ }
396
+ }
397
+ else {
398
+ // verify that variant has the correct type
399
+ (0, node_opcua_assert_1.default)(s.value.dataType === node_opcua_variant_1.DataType.ExtensionObject);
400
+ self.$extensionObject = s.value.value;
401
+ (0, node_opcua_assert_1.default)(self.checkExtensionObjectIsCorrect(self.$extensionObject));
402
+ (0, node_opcua_assert_1.default)(s.statusCode.equals(node_opcua_status_code_1.StatusCodes.Good));
403
+ }
404
+ _installExtensionObjectBindingOnProperties(self, options);
405
+ }
406
+ }
407
+ exports._bindExtensionObject = _bindExtensionObject;
408
+ function extractPartialData(path, extensionObject) {
409
+ let name;
410
+ if (typeof path === "string") {
411
+ path = path.split(".");
412
+ }
413
+ (0, node_opcua_assert_1.default)(path instanceof Array);
414
+ let i;
415
+ // read partial value
416
+ const partialData = {};
417
+ let p = partialData;
418
+ for (i = 0; i < path.length - 1; i++) {
419
+ name = path[i];
420
+ p[name] = {};
421
+ p = p[name];
422
+ }
423
+ name = path[path.length - 1];
424
+ p[name] = 0;
425
+ let c1 = partialData;
426
+ let c2 = extensionObject;
427
+ for (i = 0; i < path.length - 1; i++) {
428
+ name = path[i];
429
+ c1 = partialData[name];
430
+ c2 = extensionObject[name];
431
+ }
432
+ name = path[path.length - 1];
433
+ c1[name] = c2[name];
434
+ c1[name] += 1;
435
+ return partialData;
436
+ }
437
+ exports.extractPartialData = extractPartialData;
438
438
  //# sourceMappingURL=ua_variable_impl_ext_obj.js.map