@yuneta/gobj-js 7.25.5 → 7.25.6

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.
@@ -3559,30 +3559,46 @@ function kw_has_key(kw, key) {
3559
3559
  return false;
3560
3560
  }
3561
3561
  /************************************************************
3562
- *
3562
+ * The value at `path` (keys joined by a backtick), as the C
3563
+ * kw_find_path() finds it: undefined when it is not there.
3564
+ * A kw that is not a dict or a list is LOGGED ("kw must be list
3565
+ * or dict") and answers undefined, as C answers NULL; so does a
3566
+ * segment in the middle of the path whose value is a scalar. A
3567
+ * middle segment that is absent or null answers undefined, logged
3568
+ * only when `verbose`. Before gobj-js 7.25.6 a bad kw answered 0,
3569
+ * which the typed readers took for a value found (kw_get_int() and
3570
+ * kw_get_real() answered 0 instead of the default, kw_get_str() and
3571
+ * kw_get_bool() logged a second line), the log named no path and
3572
+ * called gobj_short_name() on a null gobj ("gobj bad type"), and a
3573
+ * null middle segment threw a TypeError.
3563
3574
  ************************************************************/
3564
3575
  function kw_find_path(gobj, kw, path, verbose) {
3565
3576
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
3577
+ const prefix = gobj ? `${gobj_short_name(gobj)}: ` : "";
3566
3578
  if (!(is_object(kw) || is_array(kw))) {
3567
- log_error(`${gobj_short_name(gobj)}: kw must be list or dict`);
3568
- return 0;
3579
+ log_error(`${prefix}kw must be list or dict: '${String(path)}'`);
3580
+ return;
3569
3581
  }
3570
3582
  if (!is_string(path)) {
3571
- log_error(`${gobj_short_name(gobj)}: path must be a string: ${String(path)}`);
3572
- return 0;
3583
+ log_error(`${prefix}path must be a string: ${String(path)}`);
3584
+ return;
3573
3585
  }
3574
3586
  let ss = path.split("`");
3575
- if (ss.length <= 1) return kw[path];
3576
3587
  let len = ss.length;
3577
- for (let i = 0; i < len; i++) {
3578
- let key = ss[i];
3579
- kw = kw[key];
3580
- if (kw === void 0) {
3581
- if (verbose) log_error(`${gobj_short_name(gobj)}: path not found: ${String(path)}`);
3588
+ for (let i = 0; i < len - 1; i++) {
3589
+ kw = kw[ss[i]];
3590
+ if (kw === void 0 || kw === null) {
3591
+ if (verbose) log_error(`${prefix}path not found: '${path}'`);
3592
+ return;
3593
+ }
3594
+ if (!(is_object(kw) || is_array(kw))) {
3595
+ log_error(`${prefix}kw must be list or dict: '${path}'`);
3582
3596
  return;
3583
3597
  }
3584
3598
  }
3585
- return kw;
3599
+ let value = kw[ss[len - 1]];
3600
+ if (value === void 0 && verbose) log_error(`${prefix}path not found: '${path}'`);
3601
+ return value;
3586
3602
  }
3587
3603
  /************************************************************
3588
3604
  *
@@ -3623,7 +3639,7 @@ function kw_get_bool(gobj, kw, path, default_value, flag) {
3623
3639
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3624
3640
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3625
3641
  if (b === void 0) {
3626
- if (create) {
3642
+ if (create && kw) {
3627
3643
  let v = Boolean(default_value);
3628
3644
  kw_set_dict_value(gobj, kw, path, v);
3629
3645
  return v;
@@ -3691,7 +3707,7 @@ function kw_get_int(gobj, kw, path, default_value, flag) {
3691
3707
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3692
3708
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3693
3709
  if (v === void 0) {
3694
- if (create) {
3710
+ if (create && kw) {
3695
3711
  let v = parseInt(default_value);
3696
3712
  kw_set_dict_value(gobj, kw, path, v);
3697
3713
  return v;
@@ -3738,7 +3754,7 @@ function kw_get_real(gobj, kw, path, default_value, flag) {
3738
3754
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3739
3755
  const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3740
3756
  if (v === void 0) {
3741
- if (create) {
3757
+ if (create && kw) {
3742
3758
  let v = Number(default_value);
3743
3759
  kw_set_dict_value(gobj, kw, path, v);
3744
3760
  return v;
@@ -3808,7 +3824,7 @@ function kw_get_str(gobj, kw, path, default_value, flag) {
3808
3824
  const create = flag && flag & kw_flag_t.KW_CREATE;
3809
3825
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3810
3826
  if (v === void 0) {
3811
- if (create) {
3827
+ if (create && kw) {
3812
3828
  kw_set_dict_value(gobj, kw, path, is_string(default_value) ? default_value : null);
3813
3829
  return default_value;
3814
3830
  } else if (required && !kw_path_holds_key(kw, path)) {