@yuneta/gobj-js 7.25.0 → 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
  *
@@ -3686,7 +3706,12 @@ function kw_get_real(gobj, kw, path, default_value, flag) {
3686
3706
  return Number(v);
3687
3707
  }
3688
3708
  /************************************************************
3689
- *
3709
+ * The default comes back AS GIVEN, as in the C kw_get_str()
3710
+ * (`const char *default_value`, where 0 is NULL). Turned into
3711
+ * a string, a default of 0 or null was "0" or "null", which is
3712
+ * TRUE: an `if(value)` on the answer took an absent key for a
3713
+ * present one. KW_CREATE stores a string default, and null for
3714
+ * any other, as C stores json_null() for a NULL default.
3690
3715
  ************************************************************/
3691
3716
  function kw_get_str(gobj, kw, path, default_value, flag) {
3692
3717
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3696,14 +3721,13 @@ function kw_get_str(gobj, kw, path, default_value, flag) {
3696
3721
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3697
3722
  if (v === void 0) {
3698
3723
  if (create) {
3699
- let v = String(default_value);
3700
- kw_set_dict_value(gobj, kw, path, v);
3701
- return v;
3724
+ kw_set_dict_value(gobj, kw, path, is_string(default_value) ? default_value : null);
3725
+ return default_value;
3702
3726
  } else if (required) {
3703
3727
  log_error(`path not found: '${path}'`);
3704
3728
  trace_json(kw);
3705
3729
  }
3706
- return String(default_value);
3730
+ return default_value;
3707
3731
  }
3708
3732
  if (extract) kw_delete(gobj, kw, path);
3709
3733
  if (!is_string(v)) {
@@ -3711,9 +3735,9 @@ function kw_get_str(gobj, kw, path, default_value, flag) {
3711
3735
  log_error(`${gobj_short_name(gobj)}: path value MUST BE a string: ${path}`);
3712
3736
  trace_msg(kw);
3713
3737
  }
3714
- return String(default_value);
3738
+ return default_value;
3715
3739
  }
3716
- return String(v);
3740
+ return v;
3717
3741
  }
3718
3742
  /************************************************************
3719
3743
  *
@@ -3739,7 +3763,11 @@ function kw_get_pointer(gobj, kw, path, default_value, flag) {
3739
3763
  return v;
3740
3764
  }
3741
3765
  /************************************************************
3742
- *
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.
3743
3771
  ************************************************************/
3744
3772
  function kw_get_dict(gobj, kw, path, default_value, flag) {
3745
3773
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3748,25 +3776,25 @@ function kw_get_dict(gobj, kw, path, default_value, flag) {
3748
3776
  const create = flag && flag & kw_flag_t.KW_CREATE;
3749
3777
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3750
3778
  if (v === void 0) {
3751
- if (create) {
3752
- let v = Object(default_value);
3753
- kw_set_dict_value(gobj, kw, path, v);
3754
- return v;
3755
- } 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) {
3756
3784
  log_error(`path not found: '${path}'`);
3757
3785
  trace_json(kw);
3758
3786
  }
3759
- return Object(default_value);
3787
+ return default_value;
3760
3788
  }
3761
- if (extract) kw_delete(gobj, kw, path);
3762
3789
  if (!is_object(v)) {
3763
3790
  if (required) {
3764
- log_error(`path value MUST BE a dict: ${path}`);
3791
+ log_error(`${gobj_short_name(gobj)}: path value MUST BE a dict: ${path}`);
3765
3792
  trace_msg(kw);
3766
3793
  }
3767
- return Object(default_value);
3794
+ return default_value;
3768
3795
  }
3769
- return Object(v);
3796
+ if (extract) kw_delete(gobj, kw, path);
3797
+ return v;
3770
3798
  }
3771
3799
  /************************************************************
3772
3800
  *
@@ -3792,7 +3820,12 @@ function kw_get_dict_value(gobj, kw, path, default_value, flag) {
3792
3820
  return v;
3793
3821
  }
3794
3822
  /************************************************************
3795
- *
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].
3796
3829
  ************************************************************/
3797
3830
  function kw_get_list(gobj, kw, path, default_value, flag) {
3798
3831
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -3801,25 +3834,25 @@ function kw_get_list(gobj, kw, path, default_value, flag) {
3801
3834
  const create = flag && flag & kw_flag_t.KW_CREATE;
3802
3835
  const extract = flag && flag & kw_flag_t.KW_EXTRACT;
3803
3836
  if (v === void 0) {
3804
- if (create) {
3805
- let v = Array(default_value);
3806
- kw_set_dict_value(gobj, kw, path, v);
3807
- return v;
3808
- } 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) {
3809
3842
  log_error(`path not found: '${path}'`);
3810
3843
  trace_json(kw);
3811
3844
  }
3812
- return Array(default_value);
3845
+ return default_value;
3813
3846
  }
3814
- if (extract) kw_delete(gobj, kw, path);
3815
3847
  if (!is_array(v)) {
3816
3848
  if (required) {
3817
- log_error(`path value MUST BE an array: ${path}`);
3849
+ log_error(`${gobj_short_name(gobj)}: path value MUST BE an array: ${path}`);
3818
3850
  trace_msg(kw);
3819
3851
  }
3820
- return Array(default_value);
3852
+ return default_value;
3821
3853
  }
3822
- return Array(v);
3854
+ if (extract) kw_delete(gobj, kw, path);
3855
+ return v;
3823
3856
  }
3824
3857
  /************************************************************
3825
3858
  *
@@ -3855,7 +3888,7 @@ function kw_set_subdict_value(gobj, kw, path, key, value) {
3855
3888
  log_error("kw is not an object");
3856
3889
  return -1;
3857
3890
  }
3858
- let subdict = kw_get_dict(gobj, kw, path, {}, true, true);
3891
+ let subdict = kw_get_dict(gobj, kw, path, {}, kw_flag_t.KW_CREATE);
3859
3892
  if (!is_object(subdict)) {
3860
3893
  log_error("subdict is not an object");
3861
3894
  return -1;