@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.
- package/README.md +8 -0
- package/dist/gobj-js.cjs.js +61 -27
- package/dist/gobj-js.cjs.js.map +1 -1
- package/dist/gobj-js.cjs.min.js +228 -234
- package/dist/gobj-js.cjs.min.js.map +1 -1
- package/dist/gobj-js.es.js +61 -27
- package/dist/gobj-js.es.js.map +1 -1
- package/dist/gobj-js.es.min.js +276 -282
- package/dist/gobj-js.es.min.js.map +1 -1
- package/dist/gobj-js.iife.js +61 -27
- package/dist/gobj-js.iife.js.map +1 -1
- package/dist/gobj-js.iife.min.js +251 -257
- package/dist/gobj-js.iife.min.js.map +1 -1
- package/dist/gobj-js.umd.js +61 -27
- package/dist/gobj-js.umd.js.map +1 -1
- package/dist/gobj-js.umd.min.js +348 -354
- package/dist/gobj-js.umd.min.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -527,6 +527,14 @@ kw_get_str (gobj, kw, path, default_value, flag)
|
|
|
527
527
|
kw_get_dict(gobj, kw, path, default_value, flag)
|
|
528
528
|
kw_get_list(gobj, kw, path, default_value, flag)
|
|
529
529
|
kw_get_dict_value(gobj, kw, path, default_value, flag)
|
|
530
|
+
// A typed reader answers the value when it has the reader's type, and
|
|
531
|
+
// the default AS GIVEN otherwise (absent key or other type), as in C:
|
|
532
|
+
// kw_get_list(gobj, {x: [1, 2]}, "x", [], 0) → [1, 2] (the same array)
|
|
533
|
+
// kw_get_dict(gobj, {}, "x", null, 0) → null
|
|
534
|
+
// kw_get_bool(gobj, {x: "false"}, "x", true, 0) → true (not a boolean: logged)
|
|
535
|
+
// kw_get_bool(gobj, {x: "false"}, "x", true, KW_WILD_NUMBER) → false
|
|
536
|
+
// kw_get_bool() logs a value that is not a boolean even without
|
|
537
|
+
// KW_REQUIRED ("path MUST BE a json boolean"), as the C reader does.
|
|
530
538
|
|
|
531
539
|
kw_set_dict_value(gobj, kw, path, value)
|
|
532
540
|
kw_set_subdict_value(gobj, kw, path, key, value)
|
package/dist/gobj-js.cjs.js
CHANGED
|
@@ -3215,8 +3215,8 @@ function trace_msg(format) {
|
|
|
3215
3215
|
}
|
|
3216
3216
|
function trace_json(jn, msg) {
|
|
3217
3217
|
if (console_wants("json", msg)) {
|
|
3218
|
-
if (msg)
|
|
3219
|
-
|
|
3218
|
+
if (msg) _console.warn("=====> " + msg);
|
|
3219
|
+
_console.dir(jn);
|
|
3220
3220
|
}
|
|
3221
3221
|
emit_log_callback("json", jn, current_timestamp());
|
|
3222
3222
|
}
|
|
@@ -3604,7 +3604,14 @@ function kw_delete(gobj, kw, path) {
|
|
|
3604
3604
|
return 0;
|
|
3605
3605
|
}
|
|
3606
3606
|
/************************************************************
|
|
3607
|
-
*
|
|
3607
|
+
* As the C kw_get_bool(): a boolean found is the answer, and
|
|
3608
|
+
* anything else gives the default back, LOGGED ("path MUST BE a
|
|
3609
|
+
* json boolean", required or not) -- unless KW_WILD_NUMBER asks
|
|
3610
|
+
* to read a number (0 is false), a string ("true"/"false" in any
|
|
3611
|
+
* case, else its integer) or null (false); a list or a dict is
|
|
3612
|
+
* then false, logged too. Before gobj-js 7.25.2 the value went
|
|
3613
|
+
* through Boolean(), so "false" was TRUE; before 7.25.3 a value
|
|
3614
|
+
* of the wrong type gave the default back in silence.
|
|
3608
3615
|
************************************************************/
|
|
3609
3616
|
function kw_get_bool(gobj, kw, path, default_value, flag) {
|
|
3610
3617
|
if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
|
|
@@ -3612,6 +3619,7 @@ function kw_get_bool(gobj, kw, path, default_value, flag) {
|
|
|
3612
3619
|
const required = flag && flag & kw_flag_t.KW_REQUIRED;
|
|
3613
3620
|
const create = flag && flag & kw_flag_t.KW_CREATE;
|
|
3614
3621
|
const extract = flag && flag & kw_flag_t.KW_EXTRACT;
|
|
3622
|
+
const wild = flag && flag & kw_flag_t.KW_WILD_NUMBER;
|
|
3615
3623
|
if (b === void 0) {
|
|
3616
3624
|
if (create) {
|
|
3617
3625
|
let v = Boolean(default_value);
|
|
@@ -3623,8 +3631,25 @@ function kw_get_bool(gobj, kw, path, default_value, flag) {
|
|
|
3623
3631
|
}
|
|
3624
3632
|
return Boolean(default_value);
|
|
3625
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 if (wild) {
|
|
3643
|
+
log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a simple json element: '${path}'`);
|
|
3644
|
+
trace_json(kw);
|
|
3645
|
+
return false;
|
|
3646
|
+
} else {
|
|
3647
|
+
log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a json boolean: '${path}'`);
|
|
3648
|
+
trace_json(kw);
|
|
3649
|
+
return Boolean(default_value);
|
|
3650
|
+
}
|
|
3626
3651
|
if (extract) kw_delete(gobj, kw, path);
|
|
3627
|
-
return
|
|
3652
|
+
return value;
|
|
3628
3653
|
}
|
|
3629
3654
|
/************************************************************
|
|
3630
3655
|
*
|
|
@@ -3744,7 +3769,11 @@ function kw_get_pointer(gobj, kw, path, default_value, flag) {
|
|
|
3744
3769
|
return v;
|
|
3745
3770
|
}
|
|
3746
3771
|
/************************************************************
|
|
3747
|
-
*
|
|
3772
|
+
* As the C kw_get_dict(): a dict found is the answer, and
|
|
3773
|
+
* anything else gives the default back AS GIVEN (null stays
|
|
3774
|
+
* null). KW_CREATE stores a dict default, never a null one.
|
|
3775
|
+
* Before gobj-js 7.25.2 the answer went through Object(), so a
|
|
3776
|
+
* null default came back as {} and a 0 as a Number object.
|
|
3748
3777
|
************************************************************/
|
|
3749
3778
|
function kw_get_dict(gobj, kw, path, default_value, flag) {
|
|
3750
3779
|
if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
|
|
@@ -3753,25 +3782,25 @@ function kw_get_dict(gobj, kw, path, default_value, flag) {
|
|
|
3753
3782
|
const create = flag && flag & kw_flag_t.KW_CREATE;
|
|
3754
3783
|
const extract = flag && flag & kw_flag_t.KW_EXTRACT;
|
|
3755
3784
|
if (v === void 0) {
|
|
3756
|
-
if (create) {
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3785
|
+
if (create && is_object(default_value) && kw) {
|
|
3786
|
+
kw_set_dict_value(gobj, kw, path, default_value);
|
|
3787
|
+
return default_value;
|
|
3788
|
+
}
|
|
3789
|
+
if (required) {
|
|
3761
3790
|
log_error(`path not found: '${path}'`);
|
|
3762
3791
|
trace_json(kw);
|
|
3763
3792
|
}
|
|
3764
|
-
return
|
|
3793
|
+
return default_value;
|
|
3765
3794
|
}
|
|
3766
|
-
if (extract) kw_delete(gobj, kw, path);
|
|
3767
3795
|
if (!is_object(v)) {
|
|
3768
3796
|
if (required) {
|
|
3769
|
-
log_error(
|
|
3797
|
+
log_error(`${gobj_short_name(gobj)}: path value MUST BE a dict: ${path}`);
|
|
3770
3798
|
trace_msg(kw);
|
|
3771
3799
|
}
|
|
3772
|
-
return
|
|
3800
|
+
return default_value;
|
|
3773
3801
|
}
|
|
3774
|
-
|
|
3802
|
+
if (extract) kw_delete(gobj, kw, path);
|
|
3803
|
+
return v;
|
|
3775
3804
|
}
|
|
3776
3805
|
/************************************************************
|
|
3777
3806
|
*
|
|
@@ -3797,7 +3826,12 @@ function kw_get_dict_value(gobj, kw, path, default_value, flag) {
|
|
|
3797
3826
|
return v;
|
|
3798
3827
|
}
|
|
3799
3828
|
/************************************************************
|
|
3800
|
-
*
|
|
3829
|
+
* As the C kw_get_list(): a list found is the answer, and
|
|
3830
|
+
* anything else gives the default back AS GIVEN. KW_CREATE
|
|
3831
|
+
* stores a list default, never a null one. Before gobj-js
|
|
3832
|
+
* 7.25.2 the answer went through Array(), which WRAPS its
|
|
3833
|
+
* argument: a list found came back as [list], a default of []
|
|
3834
|
+
* as [[]] and a null one as [null].
|
|
3801
3835
|
************************************************************/
|
|
3802
3836
|
function kw_get_list(gobj, kw, path, default_value, flag) {
|
|
3803
3837
|
if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
|
|
@@ -3806,25 +3840,25 @@ function kw_get_list(gobj, kw, path, default_value, flag) {
|
|
|
3806
3840
|
const create = flag && flag & kw_flag_t.KW_CREATE;
|
|
3807
3841
|
const extract = flag && flag & kw_flag_t.KW_EXTRACT;
|
|
3808
3842
|
if (v === void 0) {
|
|
3809
|
-
if (create) {
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3843
|
+
if (create && is_array(default_value) && kw) {
|
|
3844
|
+
kw_set_dict_value(gobj, kw, path, default_value);
|
|
3845
|
+
return default_value;
|
|
3846
|
+
}
|
|
3847
|
+
if (required) {
|
|
3814
3848
|
log_error(`path not found: '${path}'`);
|
|
3815
3849
|
trace_json(kw);
|
|
3816
3850
|
}
|
|
3817
|
-
return
|
|
3851
|
+
return default_value;
|
|
3818
3852
|
}
|
|
3819
|
-
if (extract) kw_delete(gobj, kw, path);
|
|
3820
3853
|
if (!is_array(v)) {
|
|
3821
3854
|
if (required) {
|
|
3822
|
-
log_error(
|
|
3855
|
+
log_error(`${gobj_short_name(gobj)}: path value MUST BE an array: ${path}`);
|
|
3823
3856
|
trace_msg(kw);
|
|
3824
3857
|
}
|
|
3825
|
-
return
|
|
3858
|
+
return default_value;
|
|
3826
3859
|
}
|
|
3827
|
-
|
|
3860
|
+
if (extract) kw_delete(gobj, kw, path);
|
|
3861
|
+
return v;
|
|
3828
3862
|
}
|
|
3829
3863
|
/************************************************************
|
|
3830
3864
|
*
|
|
@@ -3860,7 +3894,7 @@ function kw_set_subdict_value(gobj, kw, path, key, value) {
|
|
|
3860
3894
|
log_error("kw is not an object");
|
|
3861
3895
|
return -1;
|
|
3862
3896
|
}
|
|
3863
|
-
let subdict = kw_get_dict(gobj, kw, path, {},
|
|
3897
|
+
let subdict = kw_get_dict(gobj, kw, path, {}, kw_flag_t.KW_CREATE);
|
|
3864
3898
|
if (!is_object(subdict)) {
|
|
3865
3899
|
log_error("subdict is not an object");
|
|
3866
3900
|
return -1;
|