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