@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.
@@ -911,7 +911,7 @@
911
911
  }
912
912
  if (jn_value2 === void 0) log_error(`${gobj_short_name(gobj)}: attr undefined: ${it.name}`);
913
913
  sdata[it.name] = jn_value2;
914
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(it.name)) gobj.priv[it.name] = jn_value2;
914
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, it.name)) gobj.priv[it.name] = jn_value2;
915
915
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
916
916
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, it.name);
917
917
  }
@@ -2114,7 +2114,7 @@
2114
2114
  function gobj_read_attr(gobj, name, src) {
2115
2115
  let jn_attrs = gobj.jn_attrs;
2116
2116
  if (name in jn_attrs) {
2117
- if (jn_attrs.hasOwnProperty(name)) {
2117
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, name)) {
2118
2118
  let value = jn_attrs[name];
2119
2119
  if (gobj.gclass.gmt.mt_reading) return gobj.gclass.gmt.mt_reading(gobj, name, value);
2120
2120
  return value;
@@ -2220,9 +2220,9 @@
2220
2220
  if (ss.length <= 1) {
2221
2221
  let key = path;
2222
2222
  if (key in jn_attrs) {
2223
- if (jn_attrs.hasOwnProperty(key)) {
2223
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, key)) {
2224
2224
  jn_attrs[key] = value;
2225
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(key)) gobj.priv[key] = value;
2225
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, key)) gobj.priv[key] = value;
2226
2226
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2227
2227
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, key);
2228
2228
  }
@@ -2243,9 +2243,9 @@
2243
2243
  }
2244
2244
  let jn_attrs = gobj.jn_attrs;
2245
2245
  if (key in jn_attrs) {
2246
- if (jn_attrs.hasOwnProperty(key)) {
2246
+ if (Object.prototype.hasOwnProperty.call(jn_attrs, key)) {
2247
2247
  jn_attrs[key] = value;
2248
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(key)) gobj.priv[key] = value;
2248
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, key)) gobj.priv[key] = value;
2249
2249
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2250
2250
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, key);
2251
2251
  }
@@ -2272,7 +2272,7 @@
2272
2272
  if (exclude_flag && it.flag & exclude_flag) continue;
2273
2273
  if (include_flag === -1 || it.flag & include_flag) {
2274
2274
  set_default(gobj, gobj.jn_attrs, it);
2275
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(it.name)) gobj.priv[it.name] = gobj.jn_attrs[it.name];
2275
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, it.name)) gobj.priv[it.name] = gobj.jn_attrs[it.name];
2276
2276
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, it.name);
2277
2277
  }
2278
2278
  }
@@ -2306,7 +2306,7 @@
2306
2306
  let hs = gobj_hsdata2(gobj, name, false);
2307
2307
  if (hs) {
2308
2308
  hs[name] = parseBoolean(value);
2309
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2309
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2310
2310
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2311
2311
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2312
2312
  }
@@ -2322,7 +2322,7 @@
2322
2322
  let hs = gobj_hsdata2(gobj, name, false);
2323
2323
  if (hs) {
2324
2324
  hs[name] = parseInt(value);
2325
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2325
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2326
2326
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2327
2327
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2328
2328
  }
@@ -2338,7 +2338,7 @@
2338
2338
  let hs = gobj_hsdata2(gobj, name, false);
2339
2339
  if (hs) {
2340
2340
  hs[name] = String(value);
2341
- if (is_object(gobj.priv) && gobj.priv.hasOwnProperty(name)) gobj.priv[name] = hs[name];
2341
+ if (is_object(gobj.priv) && Object.prototype.hasOwnProperty.call(gobj.priv, name)) gobj.priv[name] = hs[name];
2342
2342
  if (gobj.obflag & obflag_t.obflag_created && !(gobj.obflag & obflag_t.obflag_destroyed)) {
2343
2343
  if (gobj.gclass.gmt.mt_writing) gobj.gclass.gmt.mt_writing(gobj, name);
2344
2344
  }
@@ -2726,8 +2726,8 @@
2726
2726
  kw,
2727
2727
  renamed_event: ""
2728
2728
  };
2729
- let kw_match = Object.assign({}, kw);
2730
- let config_match = Object.assign({}, __config__);
2729
+ let kw_match = json_object_update({}, kw);
2730
+ let config_match = json_object_update({}, __config__);
2731
2731
  kw_match.__config__ = config_match;
2732
2732
  let renamed_event = "";
2733
2733
  let rename = config_match.__rename_event_name__;
@@ -2735,7 +2735,7 @@
2735
2735
  if (event_type) {
2736
2736
  renamed_event = event_type.event_name;
2737
2737
  delete config_match.__rename_event_name__;
2738
- if (event && json_size(kw_match.__global__) > 0) kw_match.__global__ = Object.assign({}, kw_match.__global__, { __original_event_name__: event });
2738
+ if (event && json_size(kw_match.__global__) > 0) kw_match.__global__ = json_object_update(json_object_update({}, kw_match.__global__), { __original_event_name__: event });
2739
2739
  }
2740
2740
  delete config_match.__hard_subscription__;
2741
2741
  delete config_match.__own_event__;
@@ -3111,7 +3111,7 @@
3111
3111
  }
3112
3112
  }
3113
3113
  let kw2publish = kw;
3114
- if (json_size(__local__) > 0 || json_size(__global__) > 0) kw2publish = Object.assign({}, kw);
3114
+ if (json_size(__local__) > 0 || json_size(__global__) > 0) kw2publish = json_object_update({}, kw);
3115
3115
  if (json_size(__local__) > 0) kw_pop(kw2publish, __local__);
3116
3116
  if (__config__) {}
3117
3117
  if (json_size(__global__) > 0) json_object_update(kw2publish, json_deep_copy(__global__));
@@ -3648,10 +3648,7 @@
3648
3648
  ************************************************************/
3649
3649
  function duplicate_objects(...sourceObjects) {
3650
3650
  const result = {};
3651
- for (const obj of sourceObjects) {
3652
- const clonedObj = structuredClone(obj);
3653
- Object.assign(result, clonedObj);
3654
- }
3651
+ for (const obj of sourceObjects) json_object_update(result, structuredClone(obj));
3655
3652
  return result;
3656
3653
  }
3657
3654
  /************************************************************
@@ -4024,6 +4021,13 @@
4024
4021
  let ss = path.split("`");
4025
4022
  let len = ss.length;
4026
4023
  for (let i = 0; i < len; i++) {
4024
+ if (is_array(kw)) {
4025
+ if (!/^[0-9]+$/.test(ss[i])) {
4026
+ if (verbose) log_error(`${prefix}path not found: '${path}'`);
4027
+ return;
4028
+ }
4029
+ ss[i] = String(Number(ss[i]));
4030
+ }
4027
4031
  if (is_prototype_segment(kw, ss[i])) {
4028
4032
  if (verbose) log_error(`${prefix}path not found: '${path}'`);
4029
4033
  return;
@@ -4441,7 +4445,7 @@
4441
4445
  log_error("subdict is not an object");
4442
4446
  return -1;
4443
4447
  }
4444
- subdict[key] = value;
4448
+ set_own_key(subdict, key, value);
4445
4449
  return 0;
4446
4450
  }
4447
4451
  /***************************************************************************
@@ -4749,7 +4753,7 @@
4749
4753
  else if (is_array(kw)) for (let i = 0; i < kw.length; i++) {
4750
4754
  let kv = kw[i];
4751
4755
  let id = kw_get_str(gobj, kv, "id", "", kw_flag_t.KW_REQUIRED);
4752
- if (!empty_string(id)) new_dict[id] = kv;
4756
+ if (!empty_string(id)) set_own_key(new_dict, id, kv);
4753
4757
  }
4754
4758
  else log_error(`${gobj_short_name(gobj)} kwid_new_dict: data type unknown`);
4755
4759
  return new_dict;
@@ -5195,11 +5199,11 @@
5195
5199
  }
5196
5200
  if (ids.length === 0 && v) {
5197
5201
  if (is_array(v)) v.push(kw);
5198
- else if (v["id"] === kw["id"]) Object.assign(v, kw);
5202
+ else if (v["id"] === kw["id"]) json_object_update(v, kw);
5199
5203
  else {
5200
5204
  let v_ = kw_get_dict_value(null, v, jdb.hook, [], 1);
5201
5205
  let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
5202
- if (v__) Object.assign(v__, kw);
5206
+ if (v__) json_object_update(v__, kw);
5203
5207
  else v_.push(kw);
5204
5208
  }
5205
5209
  }
@@ -5566,6 +5570,10 @@
5566
5570
  * as a bare string, or "<img src=x onerror=...>" runs.
5567
5571
  * Pass it as a Text node, which is always text:
5568
5572
  * ['span', {}, document.createTextNode(value)]
5573
+ * In a LIST of children a node (element, svg, Text) is
5574
+ * appended as it is and a string is always text -- but a
5575
+ * list whose first item is a string is read as ONE
5576
+ * description (the string is its tag).
5569
5577
  * if attrs['i18n'] is not empty then (or 'data-i18n' or 'data_i18next')
5570
5578
  * it will be overridden with the translation
5571
5579
  * content = translate(attrs['i18n']));
@@ -5618,8 +5626,11 @@
5618
5626
  } else if (is_array(content)) {
5619
5627
  if (content.length > 0) {
5620
5628
  if (is_string(content[0])) el.appendChild(createElement2(content, translate_fn));
5621
- else for (let child of content) if (Array.isArray(child) && child.length > 0) el.appendChild(createElement2(child, translate_fn));
5622
- else if (child instanceof HTMLElement) el.appendChild(child);
5629
+ else for (let child of content) if (Array.isArray(child)) {
5630
+ if (child.length > 0) el.appendChild(createElement2(child, translate_fn));
5631
+ } else if (child instanceof Node) el.appendChild(child);
5632
+ else if (is_string(child)) el.appendChild(document.createTextNode(child));
5633
+ else if (child !== null && child !== void 0 && child !== false) log_error(`createElement2: child ignored, type ${typeof child}`);
5623
5634
  }
5624
5635
  } else if (content instanceof HTMLElement || content instanceof Text || content instanceof SVGElement) el.appendChild(content);
5625
5636
  else if (content != null) {
@@ -6052,12 +6063,12 @@
6052
6063
  removed: {},
6053
6064
  changed: {}
6054
6065
  };
6055
- for (const key of Object.keys(a)) if (!Object.prototype.hasOwnProperty.call(b, key)) diff.removed[key] = a[key];
6056
- else if (!flat_value_equal(a[key], b[key])) diff.changed[key] = {
6066
+ for (const key of Object.keys(a)) if (!Object.prototype.hasOwnProperty.call(b, key)) set_own_key(diff.removed, key, a[key]);
6067
+ else if (!flat_value_equal(a[key], b[key])) set_own_key(diff.changed, key, {
6057
6068
  from: a[key],
6058
6069
  to: b[key]
6059
- };
6060
- for (const key of Object.keys(b)) if (!Object.prototype.hasOwnProperty.call(a, key)) diff.added[key] = b[key];
6070
+ });
6071
+ for (const key of Object.keys(b)) if (!Object.prototype.hasOwnProperty.call(a, key)) set_own_key(diff.added, key, b[key]);
6061
6072
  return diff;
6062
6073
  }
6063
6074
  /************************************************************
@@ -7165,7 +7176,7 @@
7165
7176
  window.console.error(`Not in session`);
7166
7177
  return -1;
7167
7178
  }
7168
- kw = Object.assign({}, is_object(kw) ? kw : {});
7179
+ kw = json_object_update({}, is_object(kw) ? kw : {});
7169
7180
  if (is_object(kw["__md_iev__"])) kw["__md_iev__"] = json_deep_copy(kw["__md_iev__"]);
7170
7181
  if (msg_iev_get_stack(gobj, kw, IEVENT_STACK_ID)) {} else {
7171
7182
  let jn_ievent_id = build_cli_ievent_request(gobj, gobj_name(src), kw_get_str(gobj, kw, "__service__", 0, 0));
@@ -7223,6 +7234,13 @@
7223
7234
  websocket = new WebSocket(url);
7224
7235
  } catch (e) {
7225
7236
  log_error(`${gobj_short_name(gobj)}: Cannot open WebSocket to '${url}', Error: ${e.message}`);
7237
+ gobj_post_event(gobj, "EV_ON_CLOSE", {
7238
+ url,
7239
+ ws_seq,
7240
+ code: 1006,
7241
+ reason: e.message,
7242
+ was_clean: false
7243
+ }, gobj);
7226
7244
  return null;
7227
7245
  }
7228
7246
  if (!websocket) {
@@ -7481,6 +7499,7 @@
7481
7499
  function ac_on_close(gobj, event, kw, src) {
7482
7500
  let priv = gobj.priv;
7483
7501
  let url = kw.url;
7502
+ if (kw.ws_seq !== void 0 && kw.ws_seq !== priv.ws_seq) return 0;
7484
7503
  set_remote_log_functions();
7485
7504
  log_warning(`${gobj_short_name(gobj)}: WebSocket closed ${url} (Code: ${kw.code}, Reason: "${kw.reason}", Clean: ${kw.was_clean})`);
7486
7505
  if (priv.websocket) {
@@ -7498,7 +7517,7 @@
7498
7517
  remote_yuno_role: priv.remote_yuno_role,
7499
7518
  remote_yuno_service: priv.remote_yuno_service
7500
7519
  });
7501
- } else {
7520
+ } else if (!gobj_is_running(gobj)) {} else {
7502
7521
  log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${kw.reason}", Clean: ${kw.was_clean})`);
7503
7522
  gobj_publish_event(gobj, "EV_ON_OPEN_ERROR", {
7504
7523
  url,