@yuneta/gobj-js 7.26.1 → 7.26.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.
@@ -907,7 +907,7 @@ function json2item(gobj, sdata, it, jn_value_) {
907
907
  }
908
908
  if (jn_value2 === void 0) log_error(`${gobj_short_name(gobj)}: attr undefined: ${it.name}`);
909
909
  sdata[it.name] = jn_value2;
910
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(it.name)) gobj.priv[it.name] = jn_value2;
910
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, it.name)) gobj.priv[it.name] = jn_value2;
911
911
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
912
912
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, it.name);
913
913
  }
@@ -2110,7 +2110,7 @@ function gobj_has_attr(gobj, name) {
2110
2110
  function gobj_read_attr(gobj, name, src) {
2111
2111
  let jn_attrs = gobj.jn_attrs;
2112
2112
  if (name in jn_attrs) {
2113
- if (jn_attrs.hasOwnProperty(name)) {
2113
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, name)) {
2114
2114
  let value = jn_attrs[name];
2115
2115
  if (gobj.gclass.gmt.mt_reading) return gobj.gclass.gmt.mt_reading(gobj, name, value);
2116
2116
  return value;
@@ -2216,9 +2216,9 @@ function gobj_write_attr(gobj, path, value, src) {
2216
2216
  if (ss.length <= 1) {
2217
2217
  let key = path;
2218
2218
  if (key in jn_attrs) {
2219
- if (jn_attrs.hasOwnProperty(key)) {
2219
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, key)) {
2220
2220
  jn_attrs[key] = value;
2221
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(key)) gobj.priv[key] = value;
2221
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, key)) gobj.priv[key] = value;
2222
2222
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2223
2223
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, key);
2224
2224
  }
@@ -2239,9 +2239,9 @@ function gobj_write_attr(gobj, path, value, src) {
2239
2239
  }
2240
2240
  let jn_attrs = gobj.jn_attrs;
2241
2241
  if (key in jn_attrs) {
2242
- if (jn_attrs.hasOwnProperty(key)) {
2242
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, key)) {
2243
2243
  jn_attrs[key] = value;
2244
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(key)) gobj.priv[key] = value;
2244
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, key)) gobj.priv[key] = value;
2245
2245
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2246
2246
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, key);
2247
2247
  }
@@ -2268,7 +2268,7 @@ function sdata_write_default_values(gobj, include_flag, exclude_flag) {
2268
2268
  if (exclude_flag && it.flag & exclude_flag) continue;
2269
2269
  if (include_flag === -1 || it.flag & include_flag) {
2270
2270
  set_default(gobj, gobj.jn_attrs, it);
2271
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(it.name)) gobj.priv[it.name] = gobj.jn_attrs[it.name];
2271
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, it.name)) gobj.priv[it.name] = gobj.jn_attrs[it.name];
2272
2272
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, it.name);
2273
2273
  }
2274
2274
  }
@@ -2302,7 +2302,7 @@ function gobj_write_bool_attr(gobj, name, value) {
2302
2302
  let hs = gobj_hsdata2(gobj, name, false);
2303
2303
  if (hs) {
2304
2304
  hs[name] = parseBoolean(value);
2305
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2305
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2306
2306
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2307
2307
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2308
2308
  }
@@ -2318,7 +2318,7 @@ function gobj_write_integer_attr(gobj, name, value) {
2318
2318
  let hs = gobj_hsdata2(gobj, name, false);
2319
2319
  if (hs) {
2320
2320
  hs[name] = parseInt(value);
2321
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2321
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2322
2322
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2323
2323
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2324
2324
  }
@@ -2334,7 +2334,7 @@ function gobj_write_str_attr(gobj, name, value) {
2334
2334
  let hs = gobj_hsdata2(gobj, name, false);
2335
2335
  if (hs) {
2336
2336
  hs[name] = String(value);
2337
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2337
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2338
2338
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2339
2339
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2340
2340
  }
@@ -2722,8 +2722,8 @@ function _subscription_match_kw(kw, event) {
2722
2722
  kw,
2723
2723
  renamed_event: ""
2724
2724
  };
2725
- let kw_match = Object.assign({}, kw);
2726
- let config_match = Object.assign({}, __config__);
2725
+ let kw_match = json_object_update({}, kw);
2726
+ let config_match = json_object_update({}, __config__);
2727
2727
  kw_match.__config__ = config_match;
2728
2728
  let renamed_event = "";
2729
2729
  let rename = config_match.__rename_event_name__;
@@ -2731,7 +2731,7 @@ function _subscription_match_kw(kw, event) {
2731
2731
  if (event_type) {
2732
2732
  renamed_event = event_type.event_name;
2733
2733
  delete config_match.__rename_event_name__;
2734
- if (event && json_size(kw_match.__global__) > 0) kw_match.__global__ = Object.assign({}, kw_match.__global__, { __original_event_name__: event });
2734
+ if (event && json_size(kw_match.__global__) > 0) kw_match.__global__ = json_object_update(json_object_update({}, kw_match.__global__), { __original_event_name__: event });
2735
2735
  }
2736
2736
  delete config_match.__hard_subscription__;
2737
2737
  delete config_match.__own_event__;
@@ -3107,7 +3107,7 @@ function gobj_publish_event(publisher, event, kw) {
3107
3107
  }
3108
3108
  }
3109
3109
  let kw2publish = kw;
3110
- if (json_size(__local__) > 0 || json_size(__global__) > 0) kw2publish = Object.assign({}, kw);
3110
+ if (json_size(__local__) > 0 || json_size(__global__) > 0) kw2publish = json_object_update({}, kw);
3111
3111
  if (json_size(__local__) > 0) kw_pop(kw2publish, __local__);
3112
3112
  if (__config__) {}
3113
3113
  if (json_size(__global__) > 0) json_object_update(kw2publish, json_deep_copy(__global__));
@@ -3644,10 +3644,7 @@ function json_deep_copy(obj) {
3644
3644
  ************************************************************/
3645
3645
  function duplicate_objects(...sourceObjects) {
3646
3646
  const result = {};
3647
- for (const obj of sourceObjects) {
3648
- const clonedObj = structuredClone(obj);
3649
- Object.assign(result, clonedObj);
3650
- }
3647
+ for (const obj of sourceObjects) json_object_update(result, structuredClone(obj));
3651
3648
  return result;
3652
3649
  }
3653
3650
  /************************************************************
@@ -4020,6 +4017,13 @@ function kw_find_path(gobj, kw, path, verbose) {
4020
4017
  let ss = path.split("`");
4021
4018
  let len = ss.length;
4022
4019
  for (let i = 0; i < len; i++) {
4020
+ if (is_array(kw)) {
4021
+ if (!/^[0-9]+$/.test(ss[i])) {
4022
+ if (verbose) log_error(`${prefix}path not found: '${path}'`);
4023
+ return;
4024
+ }
4025
+ ss[i] = String(Number(ss[i]));
4026
+ }
4023
4027
  if (is_prototype_segment(kw, ss[i])) {
4024
4028
  if (verbose) log_error(`${prefix}path not found: '${path}'`);
4025
4029
  return;
@@ -4437,7 +4441,7 @@ function kw_set_subdict_value(gobj, kw, path, key, value) {
4437
4441
  log_error("subdict is not an object");
4438
4442
  return -1;
4439
4443
  }
4440
- subdict[key] = value;
4444
+ set_own_key(subdict, key, value);
4441
4445
  return 0;
4442
4446
  }
4443
4447
  /***************************************************************************
@@ -4745,7 +4749,7 @@ function kwid_new_dict(gobj, kw, path) {
4745
4749
  else if (is_array(kw)) for (let i = 0; i < kw.length; i++) {
4746
4750
  let kv = kw[i];
4747
4751
  let id = kw_get_str(gobj, kv, "id", "", kw_flag_t.KW_REQUIRED);
4748
- if (!empty_string(id)) new_dict[id] = kv;
4752
+ if (!empty_string(id)) set_own_key(new_dict, id, kv);
4749
4753
  }
4750
4754
  else log_error(`${gobj_short_name(gobj)} kwid_new_dict: data type unknown`);
4751
4755
  return new_dict;
@@ -5191,11 +5195,11 @@ function jdb_update(jdb, topic_name, path, kw) {
5191
5195
  }
5192
5196
  if (ids.length === 0 && v) {
5193
5197
  if (is_array(v)) v.push(kw);
5194
- else if (v["id"] === kw["id"]) Object.assign(v, kw);
5198
+ else if (v["id"] === kw["id"]) json_object_update(v, kw);
5195
5199
  else {
5196
5200
  let v_ = kw_get_dict_value(null, v, jdb.hook, [], 1);
5197
5201
  let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
5198
- if (v__) Object.assign(v__, kw);
5202
+ if (v__) json_object_update(v__, kw);
5199
5203
  else v_.push(kw);
5200
5204
  }
5201
5205
  }
@@ -5562,6 +5566,10 @@ parent: document.body
5562
5566
  * as a bare string, or "<img src=x onerror=...>" runs.
5563
5567
  * Pass it as a Text node, which is always text:
5564
5568
  * ['span', {}, document.createTextNode(value)]
5569
+ * In a LIST of children a node (element, svg, Text) is
5570
+ * appended as it is and a string is always text -- but a
5571
+ * list whose first item is a string is read as ONE
5572
+ * description (the string is its tag).
5565
5573
  * if attrs['i18n'] is not empty then (or 'data-i18n' or 'data_i18next')
5566
5574
  * it will be overridden with the translation
5567
5575
  * content = translate(attrs['i18n']));
@@ -5614,8 +5622,11 @@ function createElement2(description, translate_fn) {
5614
5622
  } else if (is_array(content)) {
5615
5623
  if (content.length > 0) {
5616
5624
  if (is_string(content[0])) el.appendChild(createElement2(content, translate_fn));
5617
- else for (let child of content) if (Array.isArray(child) && child.length > 0) el.appendChild(createElement2(child, translate_fn));
5618
- else if (child instanceof HTMLElement) el.appendChild(child);
5625
+ else for (let child of content) if (Array.isArray(child)) {
5626
+ if (child.length > 0) el.appendChild(createElement2(child, translate_fn));
5627
+ } else if (child instanceof Node) el.appendChild(child);
5628
+ else if (is_string(child)) el.appendChild(document.createTextNode(child));
5629
+ else if (child !== null && child !== void 0 && child !== false) log_error(`createElement2: child ignored, type ${typeof child}`);
5619
5630
  }
5620
5631
  } else if (content instanceof HTMLElement || content instanceof Text || content instanceof SVGElement) el.appendChild(content);
5621
5632
  else if (content != null) {
@@ -6048,12 +6059,12 @@ function flat_diff(flat1, flat2) {
6048
6059
  removed: {},
6049
6060
  changed: {}
6050
6061
  };
6051
- for (const key of Object.keys(a)) if (!Object.prototype.hasOwnProperty.call(b, key)) diff.removed[key] = a[key];
6052
- else if (!flat_value_equal(a[key], b[key])) diff.changed[key] = {
6062
+ for (const key of Object.keys(a)) if (!Object.prototype.hasOwnProperty.call(b, key)) set_own_key(diff.removed, key, a[key]);
6063
+ else if (!flat_value_equal(a[key], b[key])) set_own_key(diff.changed, key, {
6053
6064
  from: a[key],
6054
6065
  to: b[key]
6055
- };
6056
- for (const key of Object.keys(b)) if (!Object.prototype.hasOwnProperty.call(a, key)) diff.added[key] = b[key];
6066
+ });
6067
+ for (const key of Object.keys(b)) if (!Object.prototype.hasOwnProperty.call(a, key)) set_own_key(diff.added, key, b[key]);
6057
6068
  return diff;
6058
6069
  }
6059
6070
  /************************************************************
@@ -7161,7 +7172,7 @@ function mt_inject_event(gobj, event, kw, src) {
7161
7172
  window.console.error(`Not in session`);
7162
7173
  return -1;
7163
7174
  }
7164
- kw = Object.assign({}, is_object(kw) ? kw : {});
7175
+ kw = json_object_update({}, is_object(kw) ? kw : {});
7165
7176
  if (is_object(kw["__md_iev__"])) kw["__md_iev__"] = json_deep_copy(kw["__md_iev__"]);
7166
7177
  if (msg_iev_get_stack(gobj, kw, IEVENT_STACK_ID)) {} else {
7167
7178
  let jn_ievent_id = build_cli_ievent_request(gobj, gobj_name(src), kw_get_str(gobj, kw, "__service__", 0, 0));
@@ -7219,6 +7230,13 @@ function setup_websocket(gobj) {
7219
7230
  websocket = new WebSocket(url);
7220
7231
  } catch (e) {
7221
7232
  log_error(`${gobj_short_name(gobj)}: Cannot open WebSocket to '${url}', Error: ${e.message}`);
7233
+ gobj_post_event(gobj, "EV_ON_CLOSE", {
7234
+ url,
7235
+ ws_seq,
7236
+ code: 1006,
7237
+ reason: e.message,
7238
+ was_clean: false
7239
+ }, gobj);
7222
7240
  return null;
7223
7241
  }
7224
7242
  if (!websocket) {
@@ -7477,6 +7495,7 @@ function ac_on_open(gobj, event, kw, src) {
7477
7495
  function ac_on_close(gobj, event, kw, src) {
7478
7496
  let priv = gobj.priv;
7479
7497
  let url = kw.url;
7498
+ if (kw.ws_seq !== void 0 && kw.ws_seq !== priv.ws_seq) return 0;
7480
7499
  set_remote_log_functions();
7481
7500
  log_warning(`${gobj_short_name(gobj)}: WebSocket closed ${url} (Code: ${kw.code}, Reason: "${kw.reason}", Clean: ${kw.was_clean})`);
7482
7501
  if (priv.websocket) {
@@ -7494,7 +7513,7 @@ function ac_on_close(gobj, event, kw, src) {
7494
7513
  remote_yuno_role: priv.remote_yuno_role,
7495
7514
  remote_yuno_service: priv.remote_yuno_service
7496
7515
  });
7497
- } else {
7516
+ } else if (!gobj_is_running(gobj)) {} else {
7498
7517
  log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${kw.reason}", Clean: ${kw.was_clean})`);
7499
7518
  gobj_publish_event(gobj, "EV_ON_OPEN_ERROR", {
7500
7519
  url,