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