@yuneta/gobj-js 7.26.8 → 7.26.9

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.
@@ -4466,6 +4466,26 @@ var gobjJs = (function(exports) {
4466
4466
  return 0;
4467
4467
  }
4468
4468
  /************************************************************
4469
+ * Whether walking `path` meets a value that is neither a dict nor
4470
+ * a list BEFORE its last segment: kw_find_path() logs that one
4471
+ * even when it is not verbose, so a writer that goes on to
4472
+ * kw_set_dict_value() would log it a second time.
4473
+ ************************************************************/
4474
+ function path_crosses_a_scalar(kw, path) {
4475
+ let ss = path.split("`");
4476
+ let v = kw;
4477
+ for (let i = 0; i < ss.length - 1; i++) {
4478
+ if (is_array(v)) {
4479
+ const idx = list_segment_index(v, ss[i]);
4480
+ if (idx < 0) return false;
4481
+ v = v[idx];
4482
+ } else v = Object.prototype.hasOwnProperty.call(v, ss[i]) ? v[ss[i]] : void 0;
4483
+ if (v === void 0 || v === null) return false;
4484
+ if (!(is_object(v) || is_array(v))) return true;
4485
+ }
4486
+ return false;
4487
+ }
4488
+ /************************************************************
4469
4489
  *
4470
4490
  ************************************************************/
4471
4491
  function kw_set_subdict_value(gobj, kw, path, key, value) {
@@ -4476,7 +4496,7 @@ var gobjJs = (function(exports) {
4476
4496
  }
4477
4497
  let subdict = kw_find_path(gobj, kw, path, false);
4478
4498
  if (subdict === void 0) {
4479
- if (!is_string(path)) return -1;
4499
+ if (!is_string(path) || path_crosses_a_scalar(kw, path)) return -1;
4480
4500
  subdict = {};
4481
4501
  if (kw_set_dict_value(gobj, kw, path, subdict) < 0) return -1;
4482
4502
  }
@@ -5204,12 +5224,12 @@ var gobjJs = (function(exports) {
5204
5224
  ************************************************************/
5205
5225
  function jdb_init(jdb, prefix, duplicate) {
5206
5226
  if (duplicate) jdb = json_deep_copy(jdb);
5207
- let type = kw_get_dict_value(null, jdb, "type", [], 1);
5208
- kw_get_str(null, jdb, "hook", "data", 1);
5209
- let schema = kw_get_dict_value(null, jdb, "schema", {}, 1);
5210
- let topics = kw_get_dict_value(null, jdb, "topics", {}, 1);
5227
+ let type = kw_get_dict_value(null, jdb, "type", [], kw_flag_t.KW_CREATE);
5228
+ kw_get_str(null, jdb, "hook", "data", kw_flag_t.KW_CREATE);
5229
+ let schema = kw_get_dict_value(null, jdb, "schema", {}, kw_flag_t.KW_CREATE);
5230
+ let topics = kw_get_dict_value(null, jdb, "topics", {}, kw_flag_t.KW_CREATE);
5211
5231
  let walk = function(obj, key, value, full_path) {
5212
- if (key.substring(0, 2) !== "__") kw_get_dict_value(null, topics, full_path, json_deep_copy(type), 1);
5232
+ if (key.substring(0, 2) !== "__") kw_get_dict_value(null, topics, full_path, json_deep_copy(type), kw_flag_t.KW_CREATE);
5213
5233
  };
5214
5234
  _traverse_dict(schema, walk, prefix);
5215
5235
  return jdb;
@@ -5237,14 +5257,14 @@ var gobjJs = (function(exports) {
5237
5257
  let v = topic;
5238
5258
  while (id = ids.shift()) {
5239
5259
  if (empty_string(id) || !v) break;
5240
- if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, [], 1);
5260
+ if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, [], kw_flag_t.KW_CREATE);
5241
5261
  v = _jdb_get(v, null, id, false);
5242
5262
  }
5243
5263
  if (ids.length === 0 && v) {
5244
5264
  if (is_array(v)) v.push(kw);
5245
5265
  else if (v["id"] === kw["id"]) json_object_update(v, kw);
5246
5266
  else {
5247
- let v_ = kw_get_dict_value(null, v, jdb.hook, [], 1);
5267
+ let v_ = kw_get_dict_value(null, v, jdb.hook, [], kw_flag_t.KW_CREATE);
5248
5268
  let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
5249
5269
  if (v__) json_object_update(v__, kw);
5250
5270
  else v_.push(kw);