@sphereon/ssi-types 0.18.2-next.77 → 0.18.2-next.92
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/dist/mapper/index.d.ts +1 -0
- package/dist/mapper/index.d.ts.map +1 -1
- package/dist/mapper/index.js +1 -0
- package/dist/mapper/index.js.map +1 -1
- package/dist/mapper/jsonld-language-values.d.ts +18 -0
- package/dist/mapper/jsonld-language-values.d.ts.map +1 -0
- package/dist/mapper/jsonld-language-values.js +79 -0
- package/dist/mapper/jsonld-language-values.js.map +1 -0
- package/dist/utils/object.d.ts +2 -2
- package/dist/utils/object.d.ts.map +1 -1
- package/dist/utils/object.js +1 -1
- package/dist/utils/object.js.map +1 -1
- package/package.json +2 -2
- package/src/mapper/index.ts +1 -0
- package/src/mapper/jsonld-language-values.ts +91 -0
- package/src/utils/object.ts +3 -3
package/dist/mapper/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA"}
|
package/dist/mapper/index.js
CHANGED
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./credential-mapper"), exports);
|
|
18
|
+
__exportStar(require("./jsonld-language-values"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/mapper/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mapper/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mapper/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,2DAAwC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type LanguageValueClaim = {
|
|
2
|
+
language: string;
|
|
3
|
+
value: string | string[] | number | number[];
|
|
4
|
+
};
|
|
5
|
+
export declare const isLanguageValueObject: (claim?: unknown) => claim is LanguageValueClaim;
|
|
6
|
+
export declare const isLanguageValueObjects: (claim?: unknown) => claim is LanguageValueClaim[];
|
|
7
|
+
export declare const toLanguageValueObject: (claim?: unknown) => LanguageValueClaim | undefined;
|
|
8
|
+
export declare const toLanguageValueObjects: (claim?: unknown) => LanguageValueClaim[] | undefined;
|
|
9
|
+
export declare const mapLanguageValue: (claim?: unknown, opts?: {
|
|
10
|
+
language?: string;
|
|
11
|
+
fallbackToFirstObject?: boolean;
|
|
12
|
+
}) => any;
|
|
13
|
+
export declare const mapLanguageValues: (claimsOrCredential: object, opts?: {
|
|
14
|
+
language?: string;
|
|
15
|
+
fallbackToFirstObject?: boolean;
|
|
16
|
+
noDeepClone?: boolean;
|
|
17
|
+
}) => any;
|
|
18
|
+
//# sourceMappingURL=jsonld-language-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonld-language-values.d.ts","sourceRoot":"","sources":["../../src/mapper/jsonld-language-values.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,OAAO,gCAapD,CAAA;AAED,eAAO,MAAM,sBAAsB,WAAY,OAAO,kCAKrD,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,OAAO,KAAG,kBAAkB,GAAG,SAE5E,CAAA;AAED,eAAO,MAAM,sBAAsB,WAAY,OAAO,KAAG,kBAAkB,EAAE,GAAG,SAO/E,CAAA;AAED,eAAO,MAAM,gBAAgB,WACnB,OAAO,SACR;IACL,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,KACA,GAwBF,CAAA;AAED,eAAO,MAAM,iBAAiB,uBACR,MAAM,SACnB;IACL,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,KACA,GASF,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapLanguageValues = exports.mapLanguageValue = exports.toLanguageValueObjects = exports.toLanguageValueObject = exports.isLanguageValueObjects = exports.isLanguageValueObject = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const isLanguageValueObject = (claim) => {
|
|
6
|
+
if (!claim || !utils_1.ObjectUtils.isObject(claim) || Array.isArray(claim)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const keys = Object.keys(claim);
|
|
10
|
+
if (keys.length !== 2) {
|
|
11
|
+
return false; // Only 'language' and 'value' for now
|
|
12
|
+
}
|
|
13
|
+
else if (!('language' in claim && !!claim.language)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
else if (!('value' in claim && !!claim.value)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return true;
|
|
20
|
+
};
|
|
21
|
+
exports.isLanguageValueObject = isLanguageValueObject;
|
|
22
|
+
const isLanguageValueObjects = (claim) => {
|
|
23
|
+
if (!claim || !Array.isArray(claim)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return claim.every((val) => (0, exports.isLanguageValueObject)(val));
|
|
27
|
+
};
|
|
28
|
+
exports.isLanguageValueObjects = isLanguageValueObjects;
|
|
29
|
+
const toLanguageValueObject = (claim) => {
|
|
30
|
+
return (0, exports.isLanguageValueObject)(claim) ? claim : undefined;
|
|
31
|
+
};
|
|
32
|
+
exports.toLanguageValueObject = toLanguageValueObject;
|
|
33
|
+
const toLanguageValueObjects = (claim) => {
|
|
34
|
+
if ((0, exports.isLanguageValueObject)(claim)) {
|
|
35
|
+
return utils_1.ObjectUtils.asArray((0, exports.toLanguageValueObject)(claim));
|
|
36
|
+
}
|
|
37
|
+
else if ((0, exports.isLanguageValueObjects)(claim)) {
|
|
38
|
+
return claim;
|
|
39
|
+
}
|
|
40
|
+
return undefined; // no empty array on purpose, as this really would not be a language value object
|
|
41
|
+
};
|
|
42
|
+
exports.toLanguageValueObjects = toLanguageValueObjects;
|
|
43
|
+
const mapLanguageValue = (claim, opts) => {
|
|
44
|
+
const langValues = (0, exports.toLanguageValueObjects)(claim);
|
|
45
|
+
if (Array.isArray(langValues)) {
|
|
46
|
+
if (langValues.length === 0) {
|
|
47
|
+
// should not happen, but let's return original claim to be sure
|
|
48
|
+
return claim;
|
|
49
|
+
}
|
|
50
|
+
const filteredLangValues = langValues.filter((val) => ((opts === null || opts === void 0 ? void 0 : opts.language) ? val.language.toLowerCase().includes(opts.language.toLowerCase()) : true));
|
|
51
|
+
let langValue;
|
|
52
|
+
if (filteredLangValues.length > 0) {
|
|
53
|
+
langValue = filteredLangValues[0];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if ((opts === null || opts === void 0 ? void 0 : opts.fallbackToFirstObject) === false) {
|
|
57
|
+
// No match and we also do not fallback to the first value, so return the original claim
|
|
58
|
+
return claim;
|
|
59
|
+
}
|
|
60
|
+
// Fallback to the first value
|
|
61
|
+
langValue = langValues[0];
|
|
62
|
+
}
|
|
63
|
+
return langValue.value;
|
|
64
|
+
}
|
|
65
|
+
return claim;
|
|
66
|
+
};
|
|
67
|
+
exports.mapLanguageValue = mapLanguageValue;
|
|
68
|
+
const mapLanguageValues = (claimsOrCredential, opts) => {
|
|
69
|
+
const result = (opts === null || opts === void 0 ? void 0 : opts.noDeepClone) ? claimsOrCredential : JSON.parse(JSON.stringify(claimsOrCredential));
|
|
70
|
+
Object.keys(claimsOrCredential).forEach((key) => {
|
|
71
|
+
result[key] = (0, exports.mapLanguageValue)(result[key], opts);
|
|
72
|
+
if (utils_1.ObjectUtils.isObject(result[key]) || Array.isArray(result[key])) {
|
|
73
|
+
result[key] = (0, exports.mapLanguageValues)(result[key], Object.assign(Object.assign({}, opts), { noDeepClone: true }));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return result;
|
|
77
|
+
};
|
|
78
|
+
exports.mapLanguageValues = mapLanguageValues;
|
|
79
|
+
//# sourceMappingURL=jsonld-language-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonld-language-values.js","sourceRoot":"","sources":["../../src/mapper/jsonld-language-values.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/object.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare class ObjectUtils {
|
|
2
|
-
static asArray(value:
|
|
3
|
-
static isObject(value: unknown):
|
|
2
|
+
static asArray<T>(value: T): T[];
|
|
3
|
+
static isObject(value: unknown): value is object;
|
|
4
4
|
static isUrlAbsolute(url: string): void;
|
|
5
5
|
static isString(value: unknown): value is string;
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;WACR,OAAO,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;WACR,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE;WAIzB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM;WAIzC,aAAa,CAAC,GAAG,EAAE,MAAM;WAMzB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM;CAGxD"}
|
package/dist/utils/object.js
CHANGED
|
@@ -6,7 +6,7 @@ class ObjectUtils {
|
|
|
6
6
|
return Array.isArray(value) ? value : [value];
|
|
7
7
|
}
|
|
8
8
|
static isObject(value) {
|
|
9
|
-
return Object.prototype.toString.call(value) === '[object Object]';
|
|
9
|
+
return typeof value === 'object' || Object.prototype.toString.call(value) === '[object Object]';
|
|
10
10
|
}
|
|
11
11
|
static isUrlAbsolute(url) {
|
|
12
12
|
// regex to check for absolute IRI (starting scheme and ':') or blank node IRI
|
package/dist/utils/object.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACf,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACf,MAAM,CAAC,OAAO,CAAI,KAAQ;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,KAAc;QACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IACjG,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,GAAW;QACrC,8EAA8E;QAC9E,MAAM,eAAe,GAAG,sCAAsC,CAAA;QAC9D,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxD,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,KAAc;QACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IACjG,CAAC;CACF;AAlBD,kCAkBC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-types",
|
|
3
3
|
"description": "SSI Common Types",
|
|
4
|
-
"version": "0.18.2-next.
|
|
4
|
+
"version": "0.18.2-next.92+7c038a3b",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"Verifiable Credentials",
|
|
43
43
|
"DIDs"
|
|
44
44
|
],
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "7c038a3b4ffa2d7477e5876cc999282d43205d52"
|
|
46
46
|
}
|
package/src/mapper/index.ts
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ObjectUtils } from '../utils'
|
|
2
|
+
|
|
3
|
+
export type LanguageValueClaim = {
|
|
4
|
+
language: string
|
|
5
|
+
value: string | string[] | number | number[]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const isLanguageValueObject = (claim?: unknown): claim is LanguageValueClaim => {
|
|
9
|
+
if (!claim || !ObjectUtils.isObject(claim) || Array.isArray(claim)) {
|
|
10
|
+
return false
|
|
11
|
+
}
|
|
12
|
+
const keys = Object.keys(claim)
|
|
13
|
+
if (keys.length !== 2) {
|
|
14
|
+
return false // Only 'language' and 'value' for now
|
|
15
|
+
} else if (!('language' in claim && !!claim.language)) {
|
|
16
|
+
return false
|
|
17
|
+
} else if (!('value' in claim && !!claim.value)) {
|
|
18
|
+
return false
|
|
19
|
+
}
|
|
20
|
+
return true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const isLanguageValueObjects = (claim?: unknown): claim is LanguageValueClaim[] => {
|
|
24
|
+
if (!claim || !Array.isArray(claim)) {
|
|
25
|
+
return false
|
|
26
|
+
}
|
|
27
|
+
return claim.every((val) => isLanguageValueObject(val))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const toLanguageValueObject = (claim?: unknown): LanguageValueClaim | undefined => {
|
|
31
|
+
return isLanguageValueObject(claim) ? claim : undefined
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const toLanguageValueObjects = (claim?: unknown): LanguageValueClaim[] | undefined => {
|
|
35
|
+
if (isLanguageValueObject(claim)) {
|
|
36
|
+
return ObjectUtils.asArray(toLanguageValueObject(claim) as LanguageValueClaim)
|
|
37
|
+
} else if (isLanguageValueObjects(claim)) {
|
|
38
|
+
return claim
|
|
39
|
+
}
|
|
40
|
+
return undefined // no empty array on purpose, as this really would not be a language value object
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const mapLanguageValue = (
|
|
44
|
+
claim?: unknown,
|
|
45
|
+
opts?: {
|
|
46
|
+
language?: string
|
|
47
|
+
fallbackToFirstObject?: boolean
|
|
48
|
+
}
|
|
49
|
+
): any => {
|
|
50
|
+
const langValues = toLanguageValueObjects(claim)
|
|
51
|
+
if (Array.isArray(langValues)) {
|
|
52
|
+
if (langValues.length === 0) {
|
|
53
|
+
// should not happen, but let's return original claim to be sure
|
|
54
|
+
return claim
|
|
55
|
+
}
|
|
56
|
+
const filteredLangValues = langValues.filter((val) => (opts?.language ? val.language.toLowerCase().includes(opts.language.toLowerCase()) : true))
|
|
57
|
+
|
|
58
|
+
let langValue: LanguageValueClaim
|
|
59
|
+
if (filteredLangValues.length > 0) {
|
|
60
|
+
langValue = filteredLangValues[0]
|
|
61
|
+
} else {
|
|
62
|
+
if (opts?.fallbackToFirstObject === false) {
|
|
63
|
+
// No match and we also do not fallback to the first value, so return the original claim
|
|
64
|
+
return claim
|
|
65
|
+
}
|
|
66
|
+
// Fallback to the first value
|
|
67
|
+
langValue = langValues[0]
|
|
68
|
+
}
|
|
69
|
+
return langValue.value
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return claim
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const mapLanguageValues = (
|
|
76
|
+
claimsOrCredential: object,
|
|
77
|
+
opts?: {
|
|
78
|
+
language?: string
|
|
79
|
+
fallbackToFirstObject?: boolean
|
|
80
|
+
noDeepClone?: boolean
|
|
81
|
+
}
|
|
82
|
+
): any => {
|
|
83
|
+
const result = opts?.noDeepClone ? claimsOrCredential : JSON.parse(JSON.stringify(claimsOrCredential))
|
|
84
|
+
Object.keys(claimsOrCredential).forEach((key) => {
|
|
85
|
+
result[key] = mapLanguageValue(result[key], opts)
|
|
86
|
+
if (ObjectUtils.isObject(result[key]) || Array.isArray(result[key])) {
|
|
87
|
+
result[key] = mapLanguageValues(result[key], { ...opts, noDeepClone: true })
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
return result
|
|
91
|
+
}
|
package/src/utils/object.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export class ObjectUtils {
|
|
2
|
-
public static asArray(value:
|
|
2
|
+
public static asArray<T>(value: T): T[] {
|
|
3
3
|
return Array.isArray(value) ? value : [value]
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
public static isObject(value: unknown) {
|
|
7
|
-
return Object.prototype.toString.call(value) === '[object Object]'
|
|
6
|
+
public static isObject(value: unknown): value is object {
|
|
7
|
+
return typeof value === 'object' || Object.prototype.toString.call(value) === '[object Object]'
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
public static isUrlAbsolute(url: string) {
|