@sd-jwt/core 0.20.1 → 0.21.0-alpha-20260916100413
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/LICENSE +2 -2
- package/README.md +82 -80
- package/dist/index.cjs +1526 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +696 -0
- package/dist/index.d.mts +537 -527
- package/dist/index.mjs +1422 -1998
- package/dist/index.mjs.map +1 -0
- package/package.json +29 -49
- package/CHANGELOG.md +0 -39
- package/dist/index.d.ts +0 -686
- package/dist/index.js +0 -2100
- package/src/decode/decode.ts +0 -407
- package/src/decode/index.ts +0 -1
- package/src/decoy.ts +0 -15
- package/src/flattenJSON.ts +0 -99
- package/src/generalJSON.ts +0 -157
- package/src/index.ts +0 -1000
- package/src/jwt.ts +0 -286
- package/src/kbjwt.ts +0 -101
- package/src/present/index.ts +0 -1
- package/src/present/present.ts +0 -216
- package/src/sdjwt.ts +0 -384
- package/src/test/decode/decode.spec.ts +0 -197
- package/src/test/decoy.spec.ts +0 -30
- package/src/test/flattenJSON.spec.ts +0 -122
- package/src/test/generalJSON.spec.ts +0 -198
- package/src/test/index.spec.ts +0 -986
- package/src/test/jwt.spec.ts +0 -301
- package/src/test/kbjwt.spec.ts +0 -555
- package/src/test/pass.spec.ts +0 -7
- package/src/test/present/present.spec.ts +0 -305
- package/src/test/sdjwt.spec.ts +0 -384
- package/src/test/types/type.spec.ts +0 -88
- package/src/test/utils/base64url.spec.ts +0 -33
- package/src/test/utils/disclosure.spec.ts +0 -170
- package/src/test/utils/error.spec.ts +0 -15
- package/src/types/index.ts +0 -2
- package/src/types/type.ts +0 -270
- package/src/types/verification-error.ts +0 -55
- package/src/utils/base64url.ts +0 -6
- package/src/utils/disclosure.ts +0 -121
- package/src/utils/error.ts +0 -25
- package/src/utils/index.ts +0 -3
- package/src/utils/strict-json.ts +0 -17
- package/test/app-e2e.spec.ts +0 -292
- package/test/array_data_types.json +0 -31
- package/test/array_full_sd.json +0 -21
- package/test/array_in_sd.json +0 -13
- package/test/array_nested_in_plain.json +0 -29
- package/test/array_none_disclosed.json +0 -17
- package/test/array_of_nulls.json +0 -15
- package/test/array_of_objects.json +0 -65
- package/test/array_of_scalars.json +0 -19
- package/test/array_recursive_sd.json +0 -35
- package/test/array_recursive_sd_some_disclosed.json +0 -63
- package/test/complex.json +0 -43
- package/test/header_mod.json +0 -48
- package/test/json_serialization.json +0 -48
- package/test/key_binding.json +0 -48
- package/test/no_sd.json +0 -36
- package/test/object_data_types.json +0 -62
- package/test/recursions.json +0 -117
- package/test/rfc9901-audit-fixes.spec.ts +0 -252
- package/test/rfc9901-validation.spec.ts +0 -150
- package/test/tsconfig.json +0 -4
- package/tsconfig.json +0 -7
- package/vitest.config.mts +0 -4
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"array_with_recursive_sd": [
|
|
4
|
-
"boring",
|
|
5
|
-
{
|
|
6
|
-
"foo": "bar",
|
|
7
|
-
"baz": {
|
|
8
|
-
"qux": "quxx"
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
["foo", "bar"]
|
|
12
|
-
],
|
|
13
|
-
"test2": ["foo", "bar"]
|
|
14
|
-
},
|
|
15
|
-
"disclosureFrame": {
|
|
16
|
-
"array_with_recursive_sd": {
|
|
17
|
-
"_sd": [1],
|
|
18
|
-
"1": {
|
|
19
|
-
"_sd": ["baz"]
|
|
20
|
-
},
|
|
21
|
-
"2": {
|
|
22
|
-
"_sd": [0, 1]
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"test2": {
|
|
26
|
-
"_sd": [0, 1]
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"presentationFrames": {},
|
|
30
|
-
"presentedClaims": {
|
|
31
|
-
"array_with_recursive_sd": ["boring", []],
|
|
32
|
-
"test2": []
|
|
33
|
-
},
|
|
34
|
-
"requiredClaimKeys": ["array_with_recursive_sd.0", "test2"]
|
|
35
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"array_with_recursive_sd": [
|
|
4
|
-
"boring",
|
|
5
|
-
{
|
|
6
|
-
"foo": "bar",
|
|
7
|
-
"baz": {
|
|
8
|
-
"qux": "quxx"
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
["foo", "bar"]
|
|
12
|
-
],
|
|
13
|
-
"test2": ["foo", "bar"]
|
|
14
|
-
},
|
|
15
|
-
"disclosureFrame": {
|
|
16
|
-
"array_with_recursive_sd": {
|
|
17
|
-
"1": {
|
|
18
|
-
"_sd": ["baz"]
|
|
19
|
-
},
|
|
20
|
-
"2": {
|
|
21
|
-
"_sd": [0, 1]
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"test2": {
|
|
25
|
-
"_sd": [0, 1]
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"presentationFrames": {
|
|
29
|
-
"array_with_recursive_sd": {
|
|
30
|
-
"1": {
|
|
31
|
-
"baz": true
|
|
32
|
-
},
|
|
33
|
-
"2": {
|
|
34
|
-
"1": true
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"test2": {
|
|
38
|
-
"0": true,
|
|
39
|
-
"1": true
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"presentedClaims": {
|
|
43
|
-
"array_with_recursive_sd": [
|
|
44
|
-
"boring",
|
|
45
|
-
{
|
|
46
|
-
"foo": "bar",
|
|
47
|
-
"baz": {
|
|
48
|
-
"qux": "quxx"
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
["bar"]
|
|
52
|
-
],
|
|
53
|
-
"test2": ["foo", "bar"]
|
|
54
|
-
},
|
|
55
|
-
"requiredClaimKeys": [
|
|
56
|
-
"array_with_recursive_sd.1",
|
|
57
|
-
"array_with_recursive_sd.2",
|
|
58
|
-
"array_with_recursive_sd.1.baz",
|
|
59
|
-
"array_with_recursive_sd.2.1",
|
|
60
|
-
"test2.0",
|
|
61
|
-
"test2.1"
|
|
62
|
-
]
|
|
63
|
-
}
|
package/test/complex.json
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"firstname": "John",
|
|
4
|
-
"lastname": "Doe",
|
|
5
|
-
"ssn": "123-45-6789",
|
|
6
|
-
"id": "1234",
|
|
7
|
-
"data": {
|
|
8
|
-
"firstname": "John",
|
|
9
|
-
"lastname": "Doe",
|
|
10
|
-
"ssn": "123-45-6789",
|
|
11
|
-
"list": [{ "r": "1" }, "b", "c"]
|
|
12
|
-
},
|
|
13
|
-
"data2": {
|
|
14
|
-
"hi": "bye"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"disclosureFrame": {
|
|
18
|
-
"_sd": ["firstname", "id", "data2"],
|
|
19
|
-
"data": {
|
|
20
|
-
"_sd": ["list"],
|
|
21
|
-
"_sd_decoy": 2,
|
|
22
|
-
"list": {
|
|
23
|
-
"_sd": [0, 2],
|
|
24
|
-
"_sd_decoy": 1,
|
|
25
|
-
"0": {
|
|
26
|
-
"_sd": ["r"]
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"data2": {
|
|
31
|
-
"_sd": ["hi"]
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"presentationFrames": { "firstname": true, "id": true },
|
|
35
|
-
"presentedClaims": {
|
|
36
|
-
"lastname": "Doe",
|
|
37
|
-
"ssn": "123-45-6789",
|
|
38
|
-
"data": { "firstname": "John", "lastname": "Doe", "ssn": "123-45-6789" },
|
|
39
|
-
"id": "1234",
|
|
40
|
-
"firstname": "John"
|
|
41
|
-
},
|
|
42
|
-
"requiredClaimKeys": ["firstname", "id", "data.ssn"]
|
|
43
|
-
}
|
package/test/header_mod.json
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"sub": "john_deo_42",
|
|
4
|
-
"given_name": "John",
|
|
5
|
-
"family_name": "Deo",
|
|
6
|
-
"email": "johndeo@example.com",
|
|
7
|
-
"phone": "+1-202-555-0101",
|
|
8
|
-
"address": {
|
|
9
|
-
"street_address": "123 Main St",
|
|
10
|
-
"locality": "Anytown",
|
|
11
|
-
"region": "Anystate",
|
|
12
|
-
"country": "US"
|
|
13
|
-
},
|
|
14
|
-
"birthdate": "1940-01-01"
|
|
15
|
-
},
|
|
16
|
-
"disclosureFrame": {
|
|
17
|
-
"_sd": [
|
|
18
|
-
"sub",
|
|
19
|
-
"given_name",
|
|
20
|
-
"family_name",
|
|
21
|
-
"email",
|
|
22
|
-
"phone",
|
|
23
|
-
"address",
|
|
24
|
-
"birthdate"
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
"presentationFrames": {
|
|
28
|
-
"given_name": true,
|
|
29
|
-
"family_name": true,
|
|
30
|
-
"address": true
|
|
31
|
-
},
|
|
32
|
-
"presentedClaims": {
|
|
33
|
-
"given_name": "John",
|
|
34
|
-
"family_name": "Deo",
|
|
35
|
-
"address": {
|
|
36
|
-
"street_address": "123 Main St",
|
|
37
|
-
"locality": "Anytown",
|
|
38
|
-
"region": "Anystate",
|
|
39
|
-
"country": "US"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"requiredClaimKeys": [
|
|
43
|
-
"given_name",
|
|
44
|
-
"family_name",
|
|
45
|
-
"address.street_address",
|
|
46
|
-
"address.country"
|
|
47
|
-
]
|
|
48
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"sub": "john_deo_42",
|
|
4
|
-
"given_name": "John",
|
|
5
|
-
"family_name": "Deo",
|
|
6
|
-
"email": "johndeo@example.com",
|
|
7
|
-
"phone": "+1-202-555-0101",
|
|
8
|
-
"address": {
|
|
9
|
-
"street_address": "123 Main St",
|
|
10
|
-
"locality": "Anytown",
|
|
11
|
-
"region": "Anystate",
|
|
12
|
-
"country": "US"
|
|
13
|
-
},
|
|
14
|
-
"birthdate": "1940-01-01"
|
|
15
|
-
},
|
|
16
|
-
"disclosureFrame": {
|
|
17
|
-
"_sd": [
|
|
18
|
-
"sub",
|
|
19
|
-
"given_name",
|
|
20
|
-
"family_name",
|
|
21
|
-
"email",
|
|
22
|
-
"phone",
|
|
23
|
-
"address",
|
|
24
|
-
"birthdate"
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
"presentationFrames": {
|
|
28
|
-
"given_name": true,
|
|
29
|
-
"family_name": true,
|
|
30
|
-
"address": true
|
|
31
|
-
},
|
|
32
|
-
"presentedClaims": {
|
|
33
|
-
"given_name": "John",
|
|
34
|
-
"family_name": "Deo",
|
|
35
|
-
"address": {
|
|
36
|
-
"street_address": "123 Main St",
|
|
37
|
-
"locality": "Anytown",
|
|
38
|
-
"region": "Anystate",
|
|
39
|
-
"country": "US"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"requiredClaimKeys": [
|
|
43
|
-
"given_name",
|
|
44
|
-
"family_name",
|
|
45
|
-
"address.street_address",
|
|
46
|
-
"address.country"
|
|
47
|
-
]
|
|
48
|
-
}
|
package/test/key_binding.json
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"sub": "john_deo_42",
|
|
4
|
-
"given_name": "John",
|
|
5
|
-
"family_name": "Deo",
|
|
6
|
-
"email": "johndeo@example.com",
|
|
7
|
-
"phone": "+1-202-555-0101",
|
|
8
|
-
"address": {
|
|
9
|
-
"street_address": "123 Main St",
|
|
10
|
-
"locality": "Anytown",
|
|
11
|
-
"region": "Anystate",
|
|
12
|
-
"country": "US"
|
|
13
|
-
},
|
|
14
|
-
"birthdate": "1940-01-01"
|
|
15
|
-
},
|
|
16
|
-
"disclosureFrame": {
|
|
17
|
-
"_sd": [
|
|
18
|
-
"sub",
|
|
19
|
-
"given_name",
|
|
20
|
-
"family_name",
|
|
21
|
-
"email",
|
|
22
|
-
"phone",
|
|
23
|
-
"address",
|
|
24
|
-
"birthdate"
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
"presentationFrames": {
|
|
28
|
-
"given_name": true,
|
|
29
|
-
"family_name": true,
|
|
30
|
-
"address": true
|
|
31
|
-
},
|
|
32
|
-
"presentedClaims": {
|
|
33
|
-
"given_name": "John",
|
|
34
|
-
"family_name": "Deo",
|
|
35
|
-
"address": {
|
|
36
|
-
"street_address": "123 Main St",
|
|
37
|
-
"locality": "Anytown",
|
|
38
|
-
"region": "Anystate",
|
|
39
|
-
"country": "US"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"requiredClaimKeys": [
|
|
43
|
-
"given_name",
|
|
44
|
-
"family_name",
|
|
45
|
-
"address.street_address",
|
|
46
|
-
"address.country"
|
|
47
|
-
]
|
|
48
|
-
}
|
package/test/no_sd.json
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"recursive": [
|
|
4
|
-
"boring",
|
|
5
|
-
{
|
|
6
|
-
"foo": "bar",
|
|
7
|
-
"baz": {
|
|
8
|
-
"qux": "quxx"
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
["foo", "bar"]
|
|
12
|
-
],
|
|
13
|
-
"test2": ["foo", "bar"]
|
|
14
|
-
},
|
|
15
|
-
"disclosureFrame": {},
|
|
16
|
-
"presentationFrames": {},
|
|
17
|
-
"presentedClaims": {
|
|
18
|
-
"recursive": [
|
|
19
|
-
"boring",
|
|
20
|
-
{
|
|
21
|
-
"foo": "bar",
|
|
22
|
-
"baz": {
|
|
23
|
-
"qux": "quxx"
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
["foo", "bar"]
|
|
27
|
-
],
|
|
28
|
-
"test2": ["foo", "bar"]
|
|
29
|
-
},
|
|
30
|
-
"requiredClaimKeys": [
|
|
31
|
-
"recursive.0",
|
|
32
|
-
"recursive.1.baz.qux",
|
|
33
|
-
"recursive.2.1",
|
|
34
|
-
"test2.1"
|
|
35
|
-
]
|
|
36
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"value_Data_types": {
|
|
4
|
-
"test_null": null,
|
|
5
|
-
"test_int": 42,
|
|
6
|
-
"test_float": 3.14,
|
|
7
|
-
"test_str": "foo",
|
|
8
|
-
"test_bool": true,
|
|
9
|
-
"test_arr": ["Test"],
|
|
10
|
-
"test_object": {
|
|
11
|
-
"foo": "bar"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"disclosureFrame": {
|
|
16
|
-
"value_Data_types": {
|
|
17
|
-
"_sd": [
|
|
18
|
-
"test_null",
|
|
19
|
-
"test_int",
|
|
20
|
-
"test_float",
|
|
21
|
-
"test_str",
|
|
22
|
-
"test_bool",
|
|
23
|
-
"test_arr",
|
|
24
|
-
"test_object"
|
|
25
|
-
]
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"presentationFrames": {
|
|
29
|
-
"value_Data_types": {
|
|
30
|
-
"test_null": true,
|
|
31
|
-
"test_int": true,
|
|
32
|
-
"test_float": true,
|
|
33
|
-
"test_str": true,
|
|
34
|
-
"test_bool": true,
|
|
35
|
-
"test_arr": true,
|
|
36
|
-
"test_object": true
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"presentedClaims": {
|
|
40
|
-
"value_Data_types": {
|
|
41
|
-
"test_null": null,
|
|
42
|
-
"test_int": 42,
|
|
43
|
-
"test_float": 3.14,
|
|
44
|
-
"test_str": "foo",
|
|
45
|
-
"test_bool": true,
|
|
46
|
-
"test_arr": ["Test"],
|
|
47
|
-
"test_object": {
|
|
48
|
-
"foo": "bar"
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"requiredClaimKeys": [
|
|
53
|
-
"value_Data_types.test_null",
|
|
54
|
-
"value_Data_types.test_int",
|
|
55
|
-
"value_Data_types.test_float",
|
|
56
|
-
"value_Data_types.test_str",
|
|
57
|
-
"value_Data_types.test_bool",
|
|
58
|
-
"value_Data_types.test_arr",
|
|
59
|
-
"value_Data_types.test_object",
|
|
60
|
-
"value_Data_types.test_object.foo"
|
|
61
|
-
]
|
|
62
|
-
}
|
package/test/recursions.json
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claims": {
|
|
3
|
-
"foo": ["one", "two"],
|
|
4
|
-
"bar": {
|
|
5
|
-
"red": 1,
|
|
6
|
-
"green": 2
|
|
7
|
-
},
|
|
8
|
-
"qux": [["blue", "yellow"]],
|
|
9
|
-
"baz": [["orange", "purple"], ["black", "white"]],
|
|
10
|
-
"animals": {
|
|
11
|
-
"snake": {
|
|
12
|
-
"name": "python",
|
|
13
|
-
"age": 10
|
|
14
|
-
},
|
|
15
|
-
"bird": {
|
|
16
|
-
"name": "eagle",
|
|
17
|
-
"age": 20
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"disclosureFrame": {
|
|
22
|
-
"foo": {
|
|
23
|
-
"_sd": [0, 1]
|
|
24
|
-
},
|
|
25
|
-
"bar": {
|
|
26
|
-
"_sd": ["red", "green"]
|
|
27
|
-
},
|
|
28
|
-
"qux": {
|
|
29
|
-
"_sd": [0],
|
|
30
|
-
"0": {
|
|
31
|
-
"_sd": [0, 1]
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"baz": {
|
|
35
|
-
"_sd": [0, 1],
|
|
36
|
-
"0": {
|
|
37
|
-
"_sd": [0, 1]
|
|
38
|
-
},
|
|
39
|
-
"1": {
|
|
40
|
-
"_sd": [0, 1]
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"animals": {
|
|
44
|
-
"_sd": ["snake", "bird"],
|
|
45
|
-
"snake": {
|
|
46
|
-
"_sd": ["name", "age"]
|
|
47
|
-
},
|
|
48
|
-
"bird": {
|
|
49
|
-
"_sd": ["name", "age"]
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"presentationFrames": {
|
|
54
|
-
"foo": {
|
|
55
|
-
"1": true
|
|
56
|
-
},
|
|
57
|
-
"bar": {
|
|
58
|
-
"green": true
|
|
59
|
-
},
|
|
60
|
-
"qux": {
|
|
61
|
-
"0": {
|
|
62
|
-
"0": true,
|
|
63
|
-
"1": true
|
|
64
|
-
},
|
|
65
|
-
"1": {
|
|
66
|
-
"0": true,
|
|
67
|
-
"1": true
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
"baz": {
|
|
71
|
-
"0": {
|
|
72
|
-
"0": true,
|
|
73
|
-
"1": true
|
|
74
|
-
},
|
|
75
|
-
"1": {
|
|
76
|
-
"0": true,
|
|
77
|
-
"1": true
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"animals": {
|
|
81
|
-
"snake": {
|
|
82
|
-
"age": true
|
|
83
|
-
},
|
|
84
|
-
"bird": {
|
|
85
|
-
"age": true
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"presentedClaims": {
|
|
90
|
-
"foo": ["two"],
|
|
91
|
-
"bar": {
|
|
92
|
-
"green": 2
|
|
93
|
-
},
|
|
94
|
-
"qux": [["blue", "yellow"]],
|
|
95
|
-
"baz": [["orange", "purple"], ["black", "white"]],
|
|
96
|
-
"animals": {
|
|
97
|
-
"snake": {
|
|
98
|
-
"age": 10
|
|
99
|
-
},
|
|
100
|
-
"bird": {
|
|
101
|
-
"age": 20
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
"requiredClaimKeys": [
|
|
106
|
-
"foo.1",
|
|
107
|
-
"bar.green",
|
|
108
|
-
"qux.0.0",
|
|
109
|
-
"qux.0.1",
|
|
110
|
-
"baz.0.0",
|
|
111
|
-
"baz.0.1",
|
|
112
|
-
"baz.1.0",
|
|
113
|
-
"baz.1.1",
|
|
114
|
-
"animals.snake.age",
|
|
115
|
-
"animals.bird.age"
|
|
116
|
-
]
|
|
117
|
-
}
|