@yuneta/gobj-js 7.7.1 → 7.7.3

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.
@@ -3621,7 +3621,7 @@ function kwid_new_dict(gobj, kw, path) {
3621
3621
  if (is_object(kw)) new_dict = kw;
3622
3622
  else if (is_array(kw)) for (let i = 0; i < kw.length; i++) {
3623
3623
  let kv = kw[i];
3624
- let id = kw_get_str(kv, "id", null, false);
3624
+ let id = kw_get_str(gobj, kv, "id", "", 0);
3625
3625
  if (!empty_string(id)) new_dict[id] = kv;
3626
3626
  }
3627
3627
  else log_error(`${gobj_short_name(gobj)} kwid_new_dict: data type unknown`);
@@ -4912,6 +4912,7 @@ function treedb_decoder_hook(col, hook) {
4912
4912
  * is_writable // field writable (no readonly)
4913
4913
  * default_value
4914
4914
  * placeholder
4915
+ * fkey // fkey mapping {topic_name: hook_name}, null if none
4915
4916
  * ]
4916
4917
  *
4917
4918
  * The template is recursive, in values you can set dictionaries, or arrays,
@@ -4981,7 +4982,8 @@ function treedb_get_field_desc(col) {
4981
4982
  is_hidden: false,
4982
4983
  default_value: col.default,
4983
4984
  placeholder: col.placeholder,
4984
- fillspace: col.fillspace || 4
4985
+ fillspace: col.fillspace || 4,
4986
+ fkey: col.fkey || null
4985
4987
  };
4986
4988
  if (!col.flag) return field_desc;
4987
4989
  for (let i = 0; i < col.flag.length; i++) {
@@ -5027,7 +5029,8 @@ function template_get_field_desc(key, value) {
5027
5029
  is_writable: false,
5028
5030
  is_hidden: false,
5029
5031
  default_value: void 0,
5030
- placeholder: void 0
5032
+ placeholder: void 0,
5033
+ fkey: null
5031
5034
  };
5032
5035
  if (is_string(value)) {
5033
5036
  let values = value.split(".");
@@ -5071,7 +5074,9 @@ function create_template_record(template, kw) {
5071
5074
  let new_record = {};
5072
5075
  if (!kw) kw = {};
5073
5076
  Object.entries(template).forEach(([field, col]) => {
5074
- new_record[field] = kw_get_dict_value(null, kw, field, kw_get_dict_value(col, "default"));
5077
+ let default_value;
5078
+ if (is_object(col)) default_value = col.default;
5079
+ new_record[field] = kw_get_dict_value(null, kw, field, default_value);
5075
5080
  });
5076
5081
  return new_record;
5077
5082
  }
@@ -5588,7 +5593,7 @@ function mt_inject_event(gobj, event, kw, src) {
5588
5593
  ***************************************************************/
5589
5594
  function mt_subscription_added(gobj, subs) {
5590
5595
  let priv = gobj.priv;
5591
- if (gobj_current_state(gobj) !== "ST_SESSION") return 0;
5596
+ if (gobj_current_state(gobj) !== "ST_SESSION" || !priv.websocket) return 0;
5592
5597
  if (priv.inside_on_open) return 0;
5593
5598
  return send_remote_subscription(gobj, subs);
5594
5599
  }
@@ -5597,7 +5602,7 @@ function mt_subscription_added(gobj, subs) {
5597
5602
  ***************************************************************/
5598
5603
  function mt_subscription_deleted(gobj, subs) {
5599
5604
  let priv = gobj.priv;
5600
- if (gobj_current_state(gobj) !== "ST_SESSION") return 0;
5605
+ if (gobj_current_state(gobj) !== "ST_SESSION" || !priv.websocket) return 0;
5601
5606
  if (priv.inside_on_open) return 0;
5602
5607
  if (empty_string(subs.event)) return 0;
5603
5608
  let kw = {};
@@ -5718,6 +5723,10 @@ function send_iev(gobj, iev) {
5718
5723
  trace_ievent_callback(prefix, iev, 1, size);
5719
5724
  } else trace_inter_event(gobj, prefix, iev);
5720
5725
  }
5726
+ if (!priv.websocket || priv.websocket.readyState !== WebSocket.OPEN) {
5727
+ log_warning(`${gobj_short_name(gobj)}: send_iev(): websocket not open, message lost`);
5728
+ return -1;
5729
+ }
5721
5730
  try {
5722
5731
  priv.websocket.send(msg);
5723
5732
  } catch (e) {