@yuneta/gobj-js 7.26.3 → 7.26.5

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.
@@ -4005,6 +4005,12 @@ var gobjJs = (function(exports) {
4005
4005
  * called gobj_short_name() on a null gobj ("gobj bad type"), and a
4006
4006
  * null middle segment threw a TypeError.
4007
4007
  ************************************************************/
4008
+ function list_segment_index(list, seg) {
4009
+ if (!/^[0-9]+$/.test(seg)) return -1;
4010
+ const idx = Number(seg);
4011
+ if (idx >= list.length) return -1;
4012
+ return idx;
4013
+ }
4008
4014
  function kw_find_path(gobj, kw, path, verbose) {
4009
4015
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
4010
4016
  const prefix = gobj ? `${gobj_short_name(gobj)}: ` : "";
@@ -4020,11 +4026,12 @@ var gobjJs = (function(exports) {
4020
4026
  let len = ss.length;
4021
4027
  for (let i = 0; i < len; i++) {
4022
4028
  if (is_array(kw)) {
4023
- if (!/^[0-9]+$/.test(ss[i])) {
4029
+ const idx = list_segment_index(kw, ss[i]);
4030
+ if (idx < 0) {
4024
4031
  if (verbose) log_error(`${prefix}path not found: '${path}'`);
4025
4032
  return;
4026
4033
  }
4027
- ss[i] = String(Number(ss[i]));
4034
+ ss[i] = String(idx);
4028
4035
  }
4029
4036
  if (is_prototype_segment(kw, ss[i])) {
4030
4037
  if (verbose) log_error(`${prefix}path not found: '${path}'`);
@@ -4059,8 +4066,14 @@ var gobjJs = (function(exports) {
4059
4066
  function kw_delete(gobj, kw, path) {
4060
4067
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
4061
4068
  let [path_, k] = strrchr_split(path, "`");
4062
- if (!empty_string(k)) json_object_del(kw_find_path(gobj, kw, path_, true), k);
4063
- else json_object_del(kw, path);
4069
+ if (!empty_string(k)) {
4070
+ let v = kw_find_path(gobj, kw, path_, true);
4071
+ if (is_array(v)) {
4072
+ log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}kw_delete(): cannot delete an item of a list: '${path}'`);
4073
+ return -1;
4074
+ }
4075
+ json_object_del(v, k);
4076
+ } else json_object_del(kw, path);
4064
4077
  return 0;
4065
4078
  }
4066
4079
  /************************************************************
@@ -4416,6 +4429,14 @@ var gobjJs = (function(exports) {
4416
4429
  let len = ss.length;
4417
4430
  for (let i = 0; i < len; i++) {
4418
4431
  let key = ss[i];
4432
+ if (is_array(kw)) {
4433
+ const idx = list_segment_index(kw, key);
4434
+ if (idx < 0) {
4435
+ log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}kw_set_dict_value(): segment '${key}' is not an index of its list: '${path}'`);
4436
+ return -1;
4437
+ }
4438
+ key = String(idx);
4439
+ }
4419
4440
  if (i === len - 1) set_own_key(kw, key, value);
4420
4441
  else {
4421
4442
  let seg = is_prototype_segment(kw, key) ? void 0 : kw[key];
@@ -6580,7 +6601,7 @@ var gobjJs = (function(exports) {
6580
6601
  let default_value;
6581
6602
  if (is_object(col)) default_value = col.default;
6582
6603
  let value = kw_get_dict_value(null, kw, field, default_value);
6583
- new_record[field] = value;
6604
+ json_object_set(new_record, field, value);
6584
6605
  });
6585
6606
  return new_record;
6586
6607
  }
@@ -7302,13 +7323,13 @@ var gobjJs = (function(exports) {
7302
7323
  websocket = new WebSocket(url);
7303
7324
  } catch (e) {
7304
7325
  log_error(`${gobj_short_name(gobj)}: Cannot open WebSocket to '${url}', Error: ${e.message}`);
7305
- gobj_post_event(gobj, "EV_ON_CLOSE", {
7326
+ if (gobj_post_event(gobj, "EV_ON_CLOSE", {
7306
7327
  url,
7307
7328
  ws_seq,
7308
7329
  code: 1006,
7309
7330
  reason: e.message,
7310
7331
  was_clean: false
7311
- }, gobj);
7332
+ }, gobj) < 0) set_timeout(gobj.priv.gobj_timer, next_retry(gobj));
7312
7333
  return null;
7313
7334
  }
7314
7335
  if (!websocket) {