@yuneta/gobj-js 7.25.1 → 7.25.2

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.
@@ -3214,8 +3214,8 @@ function trace_msg(format) {
3214
3214
  }
3215
3215
  function trace_json(jn, msg) {
3216
3216
  if (console_wants("json", msg)) {
3217
- if (msg) window.console.warn("=====> " + msg);
3218
- window.console.dir(jn);
3217
+ if (msg) _console.warn("=====> " + msg);
3218
+ _console.dir(jn);
3219
3219
  }
3220
3220
  emit_log_callback("json", jn, current_timestamp());
3221
3221
  }
@@ -3603,7 +3603,11 @@ function kw_delete(gobj, kw, path) {
3603
3603
  return 0;
3604
3604
  }
3605
3605
  /************************************************************
3606
- *
3606
+ * As the C kw_get_bool(): a boolean found is the answer, and
3607
+ * anything else gives the default back -- unless KW_WILD_NUMBER
3608
+ * asks to read a number (0 is false), a string ("true"/"false"
3609
+ * in any case, else its integer) or null (false). Before gobj-js
3610
+ * 7.25.2 the value went through Boolean(), so "false" was TRUE.
3607
3611
  ************************************************************/
3608
3612
  function kw_get_bool(gobj, kw, path, default_value, flag) {
3609
3613
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3611,6 +3615,7 @@ function kw_get_bool(gobj, kw, path, default_value, flag) {
3611
3615
  const required = flag && flag & kw_flag_t.KW_REQUIRED;
3612
3616
  const create = flag && flag & kw_flag_t.KW_CREATE;
3613
3617
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3618
+ const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
3614
3619
  if (b === void 0) {
3615
3620
  if (create) {
3616
3621
  let v = Boolean(default_value);
@@ -3622,8 +3627,23 @@ function kw_get_bool(gobj, kw, path, default_value, flag) {
3622
3627
  }
3623
3628
  return Boolean(default_value);
3624
3629
  }
3630
+ let value;
3631
+ if (is_boolean(b)) value = b;
3632
+ else if (wild && is_number(b)) value = b !== 0;
3633
+ else if (wild && is_string(b)) {
3634
+ if (b.toLowerCase() === "true") value = true;
3635
+ else if (b.toLowerCase() === "false") value = false;
3636
+ else value = (parseInt(b) || 0) !== 0;
3637
+ } else if (wild && b === null) value = false;
3638
+ else {
3639
+ if (required) {
3640
+ log_error(`${gobj_short_name(gobj)}: path value MUST BE a boolean: ${path}`);
3641
+ trace_msg(kw);
3642
+ }
3643
+ return Boolean(default_value);
3644
+ }
3625
3645
  if (extract) kw_delete(gobj, kw, path);
3626
- return Boolean(b);
3646
+ return value;
3627
3647
  }
3628
3648
  /************************************************************
3629
3649
  *
@@ -3743,7 +3763,11 @@ function kw_get_pointer(gobj, kw, path, default_value, flag) {
3743
3763
  return v;
3744
3764
  }
3745
3765
  /************************************************************
3746
- *
3766
+ * As the C kw_get_dict(): a dict found is the answer, and
3767
+ * anything else gives the default back AS GIVEN (null stays
3768
+ * null). KW_CREATE stores a dict default, never a null one.
3769
+ * Before gobj-js 7.25.2 the answer went through Object(), so a
3770
+ * null default came back as {} and a 0 as a Number object.
3747
3771
  ************************************************************/
3748
3772
  function kw_get_dict(gobj, kw, path, default_value, flag) {
3749
3773
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3752,25 +3776,25 @@ function kw_get_dict(gobj, kw, path, default_value, flag) {
3752
3776
  const create = flag && flag & kw_flag_t.KW_CREATE;
3753
3777
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3754
3778
  if (v === void 0) {
3755
- if (create) {
3756
- let v = Object(default_value);
3757
- kw_set_dict_value(gobj, kw, path, v);
3758
- return v;
3759
- } else if (required) {
3779
+ if (create && is_object(default_value) && kw) {
3780
+ kw_set_dict_value(gobj, kw, path, default_value);
3781
+ return default_value;
3782
+ }
3783
+ if (required) {
3760
3784
  log_error(`path not found: '${path}'`);
3761
3785
  trace_json(kw);
3762
3786
  }
3763
- return Object(default_value);
3787
+ return default_value;
3764
3788
  }
3765
- if (extract) kw_delete(gobj, kw, path);
3766
3789
  if (!is_object(v)) {
3767
3790
  if (required) {
3768
- log_error(`path value MUST BE a dict: ${path}`);
3791
+ log_error(`${gobj_short_name(gobj)}: path value MUST BE a dict: ${path}`);
3769
3792
  trace_msg(kw);
3770
3793
  }
3771
- return Object(default_value);
3794
+ return default_value;
3772
3795
  }
3773
- return Object(v);
3796
+ if (extract) kw_delete(gobj, kw, path);
3797
+ return v;
3774
3798
  }
3775
3799
  /************************************************************
3776
3800
  *
@@ -3796,7 +3820,12 @@ function kw_get_dict_value(gobj, kw, path, default_value, flag) {
3796
3820
  return v;
3797
3821
  }
3798
3822
  /************************************************************
3799
- *
3823
+ * As the C kw_get_list(): a list found is the answer, and
3824
+ * anything else gives the default back AS GIVEN. KW_CREATE
3825
+ * stores a list default, never a null one. Before gobj-js
3826
+ * 7.25.2 the answer went through Array(), which WRAPS its
3827
+ * argument: a list found came back as [list], a default of []
3828
+ * as [[]] and a null one as [null].
3800
3829
  ************************************************************/
3801
3830
  function kw_get_list(gobj, kw, path, default_value, flag) {
3802
3831
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3805,25 +3834,25 @@ function kw_get_list(gobj, kw, path, default_value, flag) {
3805
3834
  const create = flag && flag & kw_flag_t.KW_CREATE;
3806
3835
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3807
3836
  if (v === void 0) {
3808
- if (create) {
3809
- let v = Array(default_value);
3810
- kw_set_dict_value(gobj, kw, path, v);
3811
- return v;
3812
- } else if (required) {
3837
+ if (create && is_array(default_value) && kw) {
3838
+ kw_set_dict_value(gobj, kw, path, default_value);
3839
+ return default_value;
3840
+ }
3841
+ if (required) {
3813
3842
  log_error(`path not found: '${path}'`);
3814
3843
  trace_json(kw);
3815
3844
  }
3816
- return Array(default_value);
3845
+ return default_value;
3817
3846
  }
3818
- if (extract) kw_delete(gobj, kw, path);
3819
3847
  if (!is_array(v)) {
3820
3848
  if (required) {
3821
- log_error(`path value MUST BE an array: ${path}`);
3849
+ log_error(`${gobj_short_name(gobj)}: path value MUST BE an array: ${path}`);
3822
3850
  trace_msg(kw);
3823
3851
  }
3824
- return Array(default_value);
3852
+ return default_value;
3825
3853
  }
3826
- return Array(v);
3854
+ if (extract) kw_delete(gobj, kw, path);
3855
+ return v;
3827
3856
  }
3828
3857
  /************************************************************
3829
3858
  *
@@ -3859,7 +3888,7 @@ function kw_set_subdict_value(gobj, kw, path, key, value) {
3859
3888
  log_error("kw is not an object");
3860
3889
  return -1;
3861
3890
  }
3862
- let subdict = kw_get_dict(gobj, kw, path, {}, true, true);
3891
+ let subdict = kw_get_dict(gobj, kw, path, {}, kw_flag_t.KW_CREATE);
3863
3892
  if (!is_object(subdict)) {
3864
3893
  log_error("subdict is not an object");
3865
3894
  return -1;