@yuneta/gobj-js 7.25.5 → 7.25.7

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.
@@ -3561,30 +3561,46 @@ var gobjJs = (function(exports) {
3561
3561
  return false;
3562
3562
  }
3563
3563
  /************************************************************
3564
- *
3564
+ * The value at `path` (keys joined by a backtick), as the C
3565
+ * kw_find_path() finds it: undefined when it is not there.
3566
+ * A kw that is not a dict or a list is LOGGED ("kw must be list
3567
+ * or dict") and answers undefined, as C answers NULL; so does a
3568
+ * segment in the middle of the path whose value is a scalar. A
3569
+ * middle segment that is absent or null answers undefined, logged
3570
+ * only when `verbose`. Before gobj-js 7.25.6 a bad kw answered 0,
3571
+ * which the typed readers took for a value found (kw_get_int() and
3572
+ * kw_get_real() answered 0 instead of the default, kw_get_str() and
3573
+ * kw_get_bool() logged a second line), the log named no path and
3574
+ * called gobj_short_name() on a null gobj ("gobj bad type"), and a
3575
+ * null middle segment threw a TypeError.
3565
3576
  ************************************************************/
3566
3577
  function kw_find_path(gobj, kw, path, verbose) {
3567
3578
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
3579
+ const prefix = gobj ? `${gobj_short_name(gobj)}: ` : "";
3568
3580
  if (!(is_object(kw) || is_array(kw))) {
3569
- log_error(`${gobj_short_name(gobj)}: kw must be list or dict`);
3570
- return 0;
3581
+ log_error(`${prefix}kw must be list or dict: '${String(path)}'`);
3582
+ return;
3571
3583
  }
3572
3584
  if (!is_string(path)) {
3573
- log_error(`${gobj_short_name(gobj)}: path must be a string: ${String(path)}`);
3574
- return 0;
3585
+ log_error(`${prefix}path must be a string: ${String(path)}`);
3586
+ return;
3575
3587
  }
3576
3588
  let ss = path.split("`");
3577
- if (ss.length <= 1) return kw[path];
3578
3589
  let len = ss.length;
3579
- for (let i = 0; i < len; i++) {
3580
- let key = ss[i];
3581
- kw = kw[key];
3582
- if (kw === void 0) {
3583
- if (verbose) log_error(`${gobj_short_name(gobj)}: path not found: ${String(path)}`);
3590
+ for (let i = 0; i < len - 1; i++) {
3591
+ kw = kw[ss[i]];
3592
+ if (kw === void 0 || kw === null) {
3593
+ if (verbose) log_error(`${prefix}path not found: '${path}'`);
3594
+ return;
3595
+ }
3596
+ if (!(is_object(kw) || is_array(kw))) {
3597
+ log_error(`${prefix}kw must be list or dict: '${path}'`);
3584
3598
  return;
3585
3599
  }
3586
3600
  }
3587
- return kw;
3601
+ let value = kw[ss[len - 1]];
3602
+ if (value === void 0 && verbose) log_error(`${prefix}path not found: '${path}'`);
3603
+ return value;
3588
3604
  }
3589
3605
  /************************************************************
3590
3606
  *
@@ -3625,7 +3641,7 @@ var gobjJs = (function(exports) {
3625
3641
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3626
3642
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3627
3643
  if (b === void 0) {
3628
- if (create) {
3644
+ if (create && kw) {
3629
3645
  let v = Boolean(default_value);
3630
3646
  kw_set_dict_value(gobj, kw, path, v);
3631
3647
  return v;
@@ -3693,7 +3709,7 @@ var gobjJs = (function(exports) {
3693
3709
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3694
3710
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3695
3711
  if (v === void 0) {
3696
- if (create) {
3712
+ if (create && kw) {
3697
3713
  let v = parseInt(default_value);
3698
3714
  kw_set_dict_value(gobj, kw, path, v);
3699
3715
  return v;
@@ -3740,7 +3756,7 @@ var gobjJs = (function(exports) {
3740
3756
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3741
3757
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3742
3758
  if (v === void 0) {
3743
- if (create) {
3759
+ if (create && kw) {
3744
3760
  let v = Number(default_value);
3745
3761
  kw_set_dict_value(gobj, kw, path, v);
3746
3762
  return v;
@@ -3810,7 +3826,7 @@ var gobjJs = (function(exports) {
3810
3826
  const create = flag && flag & kw_flag_t.KW_CREATE;
3811
3827
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3812
3828
  if (v === void 0) {
3813
- if (create) {
3829
+ if (create && kw) {
3814
3830
  kw_set_dict_value(gobj, kw, path, is_string(default_value) ? default_value : null);
3815
3831
  return default_value;
3816
3832
  } else if (required && !kw_path_holds_key(kw, path)) {
@@ -3963,7 +3979,12 @@ var gobjJs = (function(exports) {
3963
3979
  let key = ss[i];
3964
3980
  if (i === len - 1) kw[key] = value;
3965
3981
  else {
3966
- if (kw[key] === void 0) kw[key] = {};
3982
+ let seg = kw[key];
3983
+ if (seg === void 0) kw[key] = {};
3984
+ else if (!is_object(seg) && !is_array(seg)) {
3985
+ log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}kw_set_dict_value(): segment '${key}' is not a dict or a list: '${path}'`);
3986
+ return -1;
3987
+ }
3967
3988
  kw = kw[key];
3968
3989
  }
3969
3990
  }