@yuneta/gobj-js 7.26.10 → 7.26.11

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.
@@ -5263,23 +5263,31 @@
5263
5263
  let v = topic;
5264
5264
  while (id = ids.shift()) {
5265
5265
  if (empty_string(id) || !v) break;
5266
- if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, [], kw_flag_t.KW_CREATE);
5266
+ if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, null, 0);
5267
5267
  v = _jdb_get(v, null, id, false);
5268
5268
  }
5269
5269
  if (!v || ids.length !== 0) {
5270
5270
  log_error(`jdb_update: path not found in topic '${topic_name}': '${path}'`);
5271
5271
  return null;
5272
5272
  }
5273
- if (ids.length === 0 && v) {
5274
- if (is_array(v)) v.push(kw);
5275
- else if (v["id"] === kw["id"]) json_object_update(v, kw);
5276
- else {
5277
- let v_ = kw_get_dict_value(null, v, jdb.hook, [], kw_flag_t.KW_CREATE);
5278
- let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
5279
- if (v__) json_object_update(v__, kw);
5280
- else v_.push(kw);
5273
+ let list;
5274
+ if (is_array(v)) list = v;
5275
+ else if (v["id"] === kw["id"]) {
5276
+ json_object_update(v, kw);
5277
+ return topic;
5278
+ } else {
5279
+ list = kw_get_dict_value(null, v, jdb.hook, null, 0);
5280
+ if (list === null || list === void 0) {
5281
+ list = [];
5282
+ json_object_set(v, jdb.hook, list);
5283
+ } else if (!is_array(list)) {
5284
+ log_error(`jdb_update: the hook '${jdb.hook}' of '${path}' is not a list in topic '${topic_name}'`);
5285
+ return null;
5281
5286
  }
5282
5287
  }
5288
+ let found = _jdb_get(list, jdb.hook, kw["id"], false);
5289
+ if (found) json_object_update(found, kw);
5290
+ else list.push(kw);
5283
5291
  return topic;
5284
5292
  }
5285
5293
  /********************************************