@yuneta/gobj-js 7.26.26 → 7.26.27

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.
@@ -2391,11 +2391,13 @@ function rc_walk_by_list(iter_, walk_type, cb_walking, user_data, user_data2) {
2391
2391
  let child;
2392
2392
  if (walk_type & walk_type_t.WALK_LAST2FIRST) for (let i = iter.length; i > 0; i--) {
2393
2393
  child = iter[i - 1];
2394
+ if (gobj_is_destroying(child)) continue;
2394
2395
  let ret = walk_ret(cb_walking(child, user_data, user_data2));
2395
2396
  if (ret < 0) return ret;
2396
2397
  }
2397
2398
  else for (let i = 0; i < iter.length; i++) {
2398
2399
  child = iter[i];
2400
+ if (gobj_is_destroying(child)) continue;
2399
2401
  let ret = walk_ret(cb_walking(child, user_data, user_data2));
2400
2402
  if (ret < 0) return ret;
2401
2403
  }
@@ -2410,18 +2412,21 @@ function rc_walk_by_list(iter_, walk_type, cb_walking, user_data, user_data2) {
2410
2412
  * or
2411
2413
  * WALK_LAST2FIRST
2412
2414
  ***************************************************************/
2413
- function rc_walk_by_level(iter, walk_type, cb_walking, user_data, user_data2) {
2415
+ function rc_walk_by_level(iter_, walk_type, cb_walking, user_data, user_data2) {
2416
+ let iter = [...iter_];
2414
2417
  let ret = rc_walk_by_list(iter, walk_type, cb_walking, user_data, user_data2);
2415
2418
  if (ret < 0) return ret;
2416
2419
  let child;
2417
2420
  if (walk_type & walk_type_t.WALK_LAST2FIRST) for (let i = iter.length; i > 0; i--) {
2418
2421
  child = iter[i - 1];
2419
- ret = rc_walk_by_level([...child.dl_children], walk_type, cb_walking, user_data, user_data2);
2422
+ if (gobj_is_destroying(child)) continue;
2423
+ ret = rc_walk_by_level(child.dl_children, walk_type, cb_walking, user_data, user_data2);
2420
2424
  if (ret < 0) return ret;
2421
2425
  }
2422
2426
  else for (let i = 0; i < iter.length; i++) {
2423
2427
  child = iter[i];
2424
- ret = rc_walk_by_level([...child.dl_children], walk_type, cb_walking, user_data, user_data2);
2428
+ if (gobj_is_destroying(child)) continue;
2429
+ ret = rc_walk_by_level(child.dl_children, walk_type, cb_walking, user_data, user_data2);
2425
2430
  if (ret < 0) return ret;
2426
2431
  }
2427
2432
  return ret;
@@ -2441,23 +2446,27 @@ function rc_walk_by_level(iter, walk_type, cb_walking, user_data, user_data2) {
2441
2446
  * or
2442
2447
  * WALK_LAST2FIRST
2443
2448
  ***************************************************************/
2444
- function rc_walk_by_tree(iter, walk_type, cb_walking, user_data, user_data2) {
2445
- if (walk_type & walk_type_t.WALK_BYLEVEL) return rc_walk_by_level(iter, walk_type, cb_walking, user_data, user_data2);
2449
+ function rc_walk_by_tree(iter_, walk_type, cb_walking, user_data, user_data2) {
2450
+ if (walk_type & walk_type_t.WALK_BYLEVEL) return rc_walk_by_level(iter_, walk_type, cb_walking, user_data, user_data2);
2451
+ let iter = [...iter_];
2446
2452
  let ret;
2447
2453
  let child;
2448
2454
  if (walk_type & walk_type_t.WALK_BOTTOM2TOP) for (let i = iter.length; i > 0; i--) {
2449
2455
  child = iter[i - 1];
2450
- ret = rc_walk_by_tree([...child.dl_children], walk_type, cb_walking, user_data, user_data2);
2456
+ if (gobj_is_destroying(child)) continue;
2457
+ ret = rc_walk_by_tree(child.dl_children, walk_type, cb_walking, user_data, user_data2);
2451
2458
  if (ret < 0) return ret;
2459
+ if (gobj_is_destroying(child)) continue;
2452
2460
  ret = walk_ret(cb_walking(child, user_data, user_data2));
2453
2461
  if (ret < 0) return ret;
2454
2462
  }
2455
2463
  else for (let i = 0; i < iter.length; i++) {
2456
2464
  child = iter[i];
2465
+ if (gobj_is_destroying(child)) continue;
2457
2466
  ret = walk_ret(cb_walking(child, user_data, user_data2));
2458
2467
  if (ret < 0) return ret;
2459
- else if (ret === 0) {
2460
- ret = rc_walk_by_tree([...child.dl_children], walk_type, cb_walking, user_data, user_data2);
2468
+ else if (ret === 0 && !gobj_is_destroying(child)) {
2469
+ ret = rc_walk_by_tree(child.dl_children, walk_type, cb_walking, user_data, user_data2);
2461
2470
  if (ret < 0) return ret;
2462
2471
  }
2463
2472
  }
@@ -6042,40 +6051,83 @@ function kw_clone_by_not_keys(gobj, kw, keys, verbose) {
6042
6051
  return kw_clone;
6043
6052
  }
6044
6053
  /********************************************
6054
+ * The browser's localStorage, or null when there is none (outside a
6055
+ * browser).
6056
+ *
6057
+ * With the site's data blocked (Chrome with cookies blocked, a sandboxed
6058
+ * iframe), READING the window.localStorage property already throws a
6059
+ * SecurityError, not only its getItem(): every app reads its locale at
6060
+ * start, so the app did not start. Such a store is answered as one whose
6061
+ * every call throws that error, so each helper fails as it fails for any
6062
+ * store that refuses it: a read gives the default, a write -1.
6063
+ ********************************************/
6064
+ function local_store() {
6065
+ if (typeof window === "undefined") return null;
6066
+ let store;
6067
+ try {
6068
+ store = window.localStorage;
6069
+ } catch (e) {
6070
+ const refuse = () => {
6071
+ throw e;
6072
+ };
6073
+ return {
6074
+ getItem: refuse,
6075
+ setItem: refuse,
6076
+ removeItem: refuse
6077
+ };
6078
+ }
6079
+ return store || null;
6080
+ }
6081
+ /********************************************
6082
+ * A failure of the store that would repeat on every read is warned
6083
+ * once per key, until a read of the key goes well again.
6084
+ ********************************************/
6085
+ var local_storage_warned = /* @__PURE__ */ new Set();
6086
+ function warn_local_storage_once(key, msg) {
6087
+ if (local_storage_warned.has(key)) return;
6088
+ local_storage_warned.add(key);
6089
+ log_warning(msg);
6090
+ }
6091
+ /********************************************
6045
6092
  * Get a local attribute
6046
6093
  *
6047
6094
  * The json the entry holds, or `default_value` when there is none
6048
6095
  * (written there too with `create`). A json null is no value, as
6049
6096
  * json_absent() in C: the default. An entry that is not json (a
6050
- * corrupt or foreign write) is one WARNING and is REMOVED, so the
6097
+ * corrupt or foreign write) is a WARNING and is REMOVED, so the
6051
6098
  * next read finds no entry: it used to console.warn on every read,
6052
- * for ever. Its text is never shown (JSON.parse() quotes it in its
6053
- * error, and an entry can hold a token). A store that cannot be read
6054
- * is warned once per key. Outside a browser: the default.
6099
+ * for ever; a new corrupt entry is a new WARNING. Its text is never
6100
+ * shown (JSON.parse() quotes it in its error, and an entry can hold a
6101
+ * token). A store that cannot be read (blocked) is warned once per
6102
+ * key, and the default is NOT written there. Outside a browser: the
6103
+ * default.
6055
6104
  ********************************************/
6056
- var local_storage_warned = /* @__PURE__ */ new Set();
6057
- function warn_local_storage_once(key, what) {
6058
- if (local_storage_warned.has(key)) return;
6059
- local_storage_warned.add(key);
6060
- log_warning(`kw_get_local_storage_value(): localStorage key "${key}" ${what}`);
6061
- }
6062
6105
  function kw_get_local_storage_value(key, default_value, create = false) {
6063
- if (typeof window === "undefined" || !window.localStorage) return default_value;
6106
+ const store = local_store();
6107
+ if (!store) return default_value;
6108
+ const where = `kw_get_local_storage_value(): localStorage key "${key}"`;
6064
6109
  let text;
6065
6110
  try {
6066
- text = window.localStorage.getItem(key);
6111
+ text = store.getItem(key);
6067
6112
  } catch (e) {
6068
- warn_local_storage_once(key, "cannot be read (storage blocked?): the default is used");
6113
+ warn_local_storage_once(key, `${where} cannot be read (storage blocked?): the default is used`);
6069
6114
  return default_value;
6070
6115
  }
6071
6116
  let value = null;
6072
6117
  if (text !== null) try {
6073
6118
  value = JSON.parse(text);
6074
6119
  } catch (e) {
6075
- warn_local_storage_once(key, "does not hold json: removed, the default is used");
6076
- kw_remove_local_storage_value(key);
6077
6120
  value = null;
6121
+ try {
6122
+ store.removeItem(key);
6123
+ log_warning(`${where} does not hold json: removed, the default is used`);
6124
+ local_storage_warned.delete(key);
6125
+ } catch (e2) {
6126
+ warn_local_storage_once(key, `${where} does not hold json and cannot be removed: the default is used`);
6127
+ }
6128
+ text = void 0;
6078
6129
  }
6130
+ if (text !== void 0) local_storage_warned.delete(key);
6079
6131
  if (value === null) {
6080
6132
  if (create) kw_set_local_storage_value(key, default_value);
6081
6133
  return default_value;
@@ -6091,15 +6143,26 @@ function kw_get_local_storage_value(key, default_value, create = false) {
6091
6143
  * reported success on a store that had rejected the write: a full or blocked
6092
6144
  * localStorage (quota, private mode) silently discarded the change while the
6093
6145
  * UI showed it as saved.
6146
+ *
6147
+ * A value with no json text is refused with an ERROR, as a typed writer
6148
+ * refuses it (json_text_of()): a function was stored as the text
6149
+ * "undefined", and a NaN, a Date or a Map as a text that reads back as
6150
+ * another value. Checked in Node.js too, where there is no store.
6094
6151
  ********************************************/
6095
6152
  function kw_set_local_storage_value(key, value) {
6096
- if (typeof window === "undefined" || !window.localStorage) return 0;
6097
- if (!key || value === void 0) {
6098
- log_error(`kw_set_local_storage_value(): invalid key or value: key=${key}`);
6153
+ if (!key) {
6154
+ log_error(`kw_set_local_storage_value(): invalid key: key=${key}`);
6099
6155
  return -1;
6100
6156
  }
6157
+ const text = json_text_of(value);
6158
+ if (text === void 0) {
6159
+ log_error(`kw_set_local_storage_value(): cannot save "${key}": a value with no json text`);
6160
+ return -1;
6161
+ }
6162
+ const store = local_store();
6163
+ if (!store) return 0;
6101
6164
  try {
6102
- window.localStorage.setItem(key, JSON.stringify(value));
6165
+ store.setItem(key, text);
6103
6166
  return 0;
6104
6167
  } catch (e) {
6105
6168
  log_error(`kw_set_local_storage_value(): cannot save "${key}" (storage full or blocked?): ${e && e.message ? e.message : e}`);
@@ -6110,15 +6173,16 @@ function kw_set_local_storage_value(key, value) {
6110
6173
  * Remove local attribute
6111
6174
  ********************************************/
6112
6175
  function kw_remove_local_storage_value(key) {
6113
- if (typeof window === "undefined" || !window.localStorage) return;
6176
+ const store = local_store();
6177
+ if (!store) return;
6114
6178
  if (!key) {
6115
- window.console.warn(`Invalid key for localStorage removal: ${key}`);
6179
+ log_error(`kw_remove_local_storage_value(): invalid key: key=${key}`);
6116
6180
  return;
6117
6181
  }
6118
6182
  try {
6119
- window.localStorage.removeItem(key);
6183
+ store.removeItem(key);
6120
6184
  } catch (e) {
6121
- window.console.warn(`Error removing localStorage key "${key}":`, e);
6185
+ log_warning(`kw_remove_local_storage_value(): cannot remove "${key}" (storage blocked?): ${e && e.message ? e.message : e}`);
6122
6186
  }
6123
6187
  }
6124
6188
  /*************************************************************
@@ -7311,11 +7375,21 @@ function index_in_list(list, elm) {
7311
7375
  ************************************************************/
7312
7376
  function node_uuid() {
7313
7377
  let uuid = "";
7314
- if (typeof window !== "undefined" && window.localStorage) {
7315
- uuid = window.localStorage.getItem("host_uuid");
7378
+ const store = local_store();
7379
+ if (store) {
7380
+ try {
7381
+ uuid = store.getItem("host_uuid");
7382
+ } catch (e) {
7383
+ uuid = null;
7384
+ warn_local_storage_once("host_uuid", "node_uuid(): localStorage cannot be read (storage blocked?): a uuid of this page only");
7385
+ }
7316
7386
  if (!uuid && window.crypto?.randomUUID) {
7317
7387
  uuid = window.crypto.randomUUID();
7318
- window.localStorage.setItem("host_uuid", uuid);
7388
+ try {
7389
+ store.setItem("host_uuid", uuid);
7390
+ } catch (e) {
7391
+ warn_local_storage_once("host_uuid", "node_uuid(): localStorage cannot be written (storage full or blocked?): a uuid of this page only");
7392
+ }
7319
7393
  }
7320
7394
  } else if (typeof globalThis !== "undefined" && globalThis.crypto?.randomUUID) uuid = globalThis.crypto.randomUUID();
7321
7395
  else uuid = "00000000-0000-0000-0000-000000000000";
@@ -8604,7 +8678,7 @@ var attrs_table = [
8604
8678
  SDATA(data_type_t.DTP_STRING, "cert_pem", sdata_flag_t.SDF_PERSIST, "", "SSL server certification, PEM str format"),
8605
8679
  SDATA(data_type_t.DTP_JSON, "extra_info", sdata_flag_t.SDF_RD, "{}", "dict data set by user, added to the identity card msg."),
8606
8680
  SDATA(data_type_t.DTP_LIST, "required_services", sdata_flag_t.SDF_RD, "[]", "Services this LINK requires (identity card). Empty = the yuno's `required_services`, as before. A yuno with several links to DIFFERENT backends must set it per link: the yuno-wide list is the union, so every backend is told the service names of all the others."),
8607
- SDATA(data_type_t.DTP_INTEGER, "timeout_retry", sdata_flag_t.SDF_RD, "5000", "First reconnect delay (ms). It BACKS OFF from here, doubling up to timeout_retry_max, and resets when a session is reached"),
8681
+ SDATA(data_type_t.DTP_INTEGER, "timeout_retry", sdata_flag_t.SDF_RD, "5000", "First reconnect delay (ms), at least 1000. It BACKS OFF from here, doubling up to timeout_retry_max, and resets when a session is reached"),
8608
8682
  SDATA(data_type_t.DTP_INTEGER, "timeout_retry_max", sdata_flag_t.SDF_RD, "60000", "Cap of the reconnect backoff (ms). Set it equal to timeout_retry for the old fixed-interval behaviour"),
8609
8683
  SDATA(data_type_t.DTP_INTEGER, "timeout_idack", sdata_flag_t.SDF_RD, "5000", "timeout waiting idAck"),
8610
8684
  SDATA(data_type_t.DTP_POINTER, "subscriber", 0, 0, "subscriber of output-events. If null then subscriber is the parent"),
@@ -8629,7 +8703,8 @@ var PRIVATE_DATA = {
8629
8703
  inside_on_open: false,
8630
8704
  retry_ms: 0,
8631
8705
  retry_ms_before_session: 0,
8632
- session_since: 0
8706
+ session_since: 0,
8707
+ retry_floor_warned: false
8633
8708
  };
8634
8709
  var __gclass__ = null;
8635
8710
  /******************************
@@ -8901,7 +8976,7 @@ var CLOSE_PEER_FAULT = 4002;
8901
8976
  function close_for_peer_fault(gobj, reason) {
8902
8977
  let priv = gobj.priv;
8903
8978
  if (gobj_current_state(gobj) === "ST_SESSION") {
8904
- if (performance.now() - priv.session_since < Math.max(gobj_read_integer_attr(gobj, "timeout_retry"), gobj_read_integer_attr(gobj, "timeout_retry_max"))) priv.retry_ms = priv.retry_ms_before_session;
8979
+ if (performance.now() - priv.session_since < retry_bounds(gobj).max) priv.retry_ms = priv.retry_ms_before_session;
8905
8980
  priv.retry_ms_before_session = 0;
8906
8981
  }
8907
8982
  close_websocket(gobj, CLOSE_PEER_FAULT, reason);
@@ -9173,6 +9248,32 @@ function ac_on_close(gobj, event, kw, src) {
9173
9248
  return 0;
9174
9249
  }
9175
9250
  /***************************************************************
9251
+ * The first delay of the backoff and its cap.
9252
+ *
9253
+ * A first delay below RETRY_FLOOR_MS is raised to it, with a WARNING
9254
+ * once: `timeout_retry` 0 never left 0 (0 doubled is 0), so a server
9255
+ * that closed before the ack was reconnected in a loop with no wait,
9256
+ * hundreds of connections a second.
9257
+ ***************************************************************/
9258
+ var RETRY_FLOOR_MS = 1e3;
9259
+ function retry_bounds(gobj) {
9260
+ let priv = gobj.priv;
9261
+ let base = gobj_read_integer_attr(gobj, "timeout_retry");
9262
+ let max = gobj_read_integer_attr(gobj, "timeout_retry_max");
9263
+ if (!(base >= RETRY_FLOOR_MS)) {
9264
+ if (!priv.retry_floor_warned) {
9265
+ priv.retry_floor_warned = true;
9266
+ log_warning(`${gobj_short_name(gobj)}: timeout_retry ${base} ms is below ${RETRY_FLOOR_MS} ms: ${RETRY_FLOOR_MS} ms is used`);
9267
+ }
9268
+ base = RETRY_FLOOR_MS;
9269
+ }
9270
+ if (!(max >= base)) max = base;
9271
+ return {
9272
+ base,
9273
+ max
9274
+ };
9275
+ }
9276
+ /***************************************************************
9176
9277
  * How long to wait before the next reconnect attempt.
9177
9278
  *
9178
9279
  * The delay used to be a constant (`timeout_retry`, 5s), for ever. A
@@ -9193,9 +9294,7 @@ function ac_on_close(gobj, event, kw, src) {
9193
9294
  ***************************************************************/
9194
9295
  function next_retry(gobj) {
9195
9296
  let priv = gobj.priv;
9196
- let base = gobj_read_integer_attr(gobj, "timeout_retry");
9197
- let max = gobj_read_integer_attr(gobj, "timeout_retry_max");
9198
- if (max < base) max = base;
9297
+ const { base, max } = retry_bounds(gobj);
9199
9298
  priv.retry_ms = priv.retry_ms ? Math.min(priv.retry_ms * 2, max) : base;
9200
9299
  let jitter = priv.retry_ms * .2;
9201
9300
  let ms = priv.retry_ms - jitter + Math.random() * 2 * jitter;
@@ -9488,6 +9587,6 @@ function register_c_ievent_cli() {
9488
9587
  return create_gclass(GCLASS_NAME);
9489
9588
  }
9490
9589
  //#endregion
9491
- export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parameter_from_json, command_parameter_from_text, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_json, empty_string, escapeHtml, event_flag_t, flat2json, flat_apply, flat_diff, flat_key_join, flat_key_split, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_deliver_posted_events, gobj_destroy, gobj_find_child, gobj_find_event_type, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_get_gclass_trace_level, gobj_get_gclass_trace_level2, gobj_get_gclass_trace_no_level, gobj_get_global_trace_level, gobj_get_global_trace_no_level, gobj_global_trace_level, gobj_global_trace_no_level, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_posted_events_size, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_no_trace2, gobj_set_global_trace, gobj_set_global_trace2, gobj_set_gobj_no_trace, gobj_set_gobj_trace, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_level, gobj_trace_machine_format, gobj_trace_no_level, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, html_markup, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_html_markup, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_secret_name, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json2flat, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_mask_secrets, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, kwid_new_list, list2options, load_json_file, log_debug, log_error, log_info, log_warning, mask_secrets_inline, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_console_log_enabled, set_console_log_filter, set_log_callback, set_remote_log_functions, set_strings_are_text, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strings_are_text, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_json_masked, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf, walk_type_t };
9590
+ export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parameter_from_json, command_parameter_from_text, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_json, empty_string, escapeHtml, event_flag_t, flat2json, flat_apply, flat_diff, flat_key_join, flat_key_split, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_deliver_posted_events, gobj_destroy, gobj_find_child, gobj_find_event_type, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_get_gclass_trace_level, gobj_get_gclass_trace_level2, gobj_get_gclass_trace_no_level, gobj_get_global_trace_level, gobj_get_global_trace_no_level, gobj_global_trace_level, gobj_global_trace_no_level, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_posted_events_size, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_no_trace2, gobj_set_global_trace, gobj_set_global_trace2, gobj_set_gobj_no_trace, gobj_set_gobj_trace, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_level, gobj_trace_machine_format, gobj_trace_no_level, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, html_markup, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_html_markup, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_secret_name, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json2flat, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_mask_secrets, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, json_text_of, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, kwid_new_list, list2options, load_json_file, log_debug, log_error, log_info, log_warning, mask_secrets_inline, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_console_log_enabled, set_console_log_filter, set_log_callback, set_remote_log_functions, set_strings_are_text, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strings_are_text, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_json_masked, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf, walk_type_t };
9492
9591
 
9493
9592
  //# sourceMappingURL=gobj-js.es.js.map