@yuneta/gobj-js 7.25.1 → 7.25.3

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