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