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