UNPKG

@sphereon/pex

Version:

A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification

153 lines (152 loc) 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsonPathUtils = void 0; const jsonpath_1 = require("@astronautlabs/jsonpath"); class JsonPathUtils { /** * @param obj: any object can be found in verifiablePresentation.verifiableCredential[i] * @param paths: paths that can be found in Field object * @return a result object containing value of the correct path in the verifiableCredential and the correct path * @example(success result): if you call this method with 1. verifiableCredential: * { '@context': [''], age: 19, credentialSchema: [ { id: '' } ], id: '2dc74354-e965-4883-be5e-bfec48bf60c7', issuer: '', type: 'VerifiableCredential' } and 2 paths: [ '$.age', '$.details.age ] you will get result: [ { value: 19, path: [ '$', 'age' ] } ] @example(fail result): if you call this method with 1. verifiableCredential: { '@context': [ '' ], credentialSchema: [ { id: '' } ], id: '2dc74354-e965-4883-be5e-bfec48bf60c7', issuer: '', type: 'VerifiableCredential' } and 2. paths: [ '$.age' ], you will get result: result: [] @example (array example): vc: { '@context': [''], "details": { "information":[ { "age": 19 }] }, credentialSchema: [ { id: '' } ], id: '2dc74354-e965-4883-be5e-bfec48bf60c7', issuer: '', type: 'VerifiableCredential' } result: [ { value: 19, path: [ '$', 'details', 'information', 0, 'age' ] } ] */ static extractInputField(obj, paths) { let result = []; if (paths) { for (const path of paths) { result = jsonpath_1.JSONPath.nodes(obj, path); if (result.length) { break; } } } return result; } static changePropertyNameRecursively(pd, currentPropertyName, newPropertyName) { const existingPaths = JsonPathUtils.extractInputField(pd, ['$..' + currentPropertyName]); for (const existingPath of existingPaths) { this.copyResultPathToDestinationDefinition(existingPath.path, pd, newPropertyName); } } static setValue(obj, path, newValue) { const stringPath = typeof path === 'string' ? path : jsonpath_1.JSONPath.stringify(path); jsonpath_1.JSONPath.value(obj, stringPath, newValue); return obj; } static getValue(obj, path) { try { const stringPath = typeof path === 'string' ? path : jsonpath_1.JSONPath.stringify(path); return jsonpath_1.JSONPath.value(obj, stringPath); } catch (error) { return undefined; } } static copyResultPathToDestinationDefinition(pathDetails, pd, newPropertyName) { // eslint-disable-next-line @typescript-eslint/no-explicit-any let objectCursor = pd; for (let i = 1; i < pathDetails.length; i++) { if (i + 1 < pathDetails.length) { objectCursor = objectCursor[pathDetails[i]]; } if (pathDetails.length == i + 1) { objectCursor[newPropertyName] = objectCursor[pathDetails[i]]; delete objectCursor[pathDetails[i]]; break; } } } static changeSpecialPathsRecursively(pd) { const paths = JsonPathUtils.extractInputField(pd, ['$..path']); for (const path of paths) { this.modifyPathsWithSpecialCharacter(path.path, pd); } } static modifyPathsWithSpecialCharacter(pathDetails, pd) { // eslint-disable-next-line @typescript-eslint/no-explicit-any let objectCursor = pd; for (let i = 1; i < pathDetails.length; i++) { if (i + 1 < pathDetails.length) { objectCursor = objectCursor[pathDetails[i]]; } if (pathDetails.length == i + 1) { const paths = objectCursor[pathDetails[i]]; const editedPaths = []; for (let j = 0; j < paths.length; j++) { editedPaths.push(this.modifyPathWithSpecialCharacter(paths[j])); } objectCursor[pathDetails[i]] = editedPaths; break; } } } static modifyPathWithSpecialCharacter(path) { const matches = path.matchAll(JsonPathUtils.REGEX_PATH); path = this.modifyPathRecursive(matches, path); return path; } static modifyPathRecursive(matches, path) { let next = matches.next(); let indexChanged = false; while (next && !next.done && !indexChanged) { const atIdx = next.value.index; if (atIdx && atIdx == 1) { path = path.charAt(0) + "['" + next.value[0] + "']" + path.substring(atIdx + next.value[0].length); indexChanged = true; this.modifyPathRecursive(matches, path); } else if (atIdx && atIdx > 1 && path.substring(atIdx - 2, atIdx) !== "['" && path.substring(atIdx - 2, atIdx) !== '["') { if (path.substring(atIdx - 2, atIdx) === '..') { path = path.substring(0, atIdx - 2) + "..['" + next.value[0] + "']" + path.substring(atIdx + next.value[0].length); indexChanged = true; const matches = path.matchAll(JsonPathUtils.REGEX_PATH); this.modifyPathRecursive(matches, path); } else if (path.charAt(atIdx - 1) === '.') { path = path.substring(0, atIdx - 1) + "['" + next.value[0] + "']" + path.substring(atIdx + next.value[0].length); indexChanged = true; this.modifyPathRecursive(matches, path); } } next = matches.next(); } return path; } } exports.JsonPathUtils = JsonPathUtils; JsonPathUtils.REGEX_PATH = /@\w+/g; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvblBhdGhVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi91dGlscy9qc29uUGF0aFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUF5RDtBQUt6RCxNQUFhLGFBQWE7SUFFeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUNHO0lBQ0ksTUFBTSxDQUFDLGlCQUFpQixDQUFzQixHQUFtQixFQUFFLEtBQWU7UUFDdkYsSUFBSSxNQUFNLEdBQWdELEVBQUUsQ0FBQztRQUM3RCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxHQUFHLG1CQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUF1RCxDQUFDO0lBQ2pFLENBQUM7SUFFTSxNQUFNLENBQUMsNkJBQTZCLENBQ3pDLEVBQXVELEVBQ3ZELG1CQUEyQixFQUMzQixlQUF1QjtRQUV2QixNQUFNLGFBQWEsR0FBb0QsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDMUksS0FBSyxNQUFNLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMscUNBQXFDLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUFPLEdBQU0sRUFBRSxJQUE4QixFQUFFLFFBQVc7UUFDOUUsTUFBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLEtB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