UNPKG

@gooddata/gooddata-js

Version:
123 lines (122 loc) 5.02 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var isEmpty_1 = __importDefault(require("lodash/isEmpty")); var omit_1 = __importDefault(require("lodash/omit")); var isArray_1 = __importDefault(require("lodash/isArray")); var isObject_1 = __importDefault(require("lodash/isObject")); var isString_1 = __importDefault(require("lodash/isString")); var json_stable_stringify_1 = __importDefault(require("json-stable-stringify")); var uuid_1 = require("uuid"); var uri_1 = require("./DataLayer/helpers/uri"); /* * Helpers */ var getReferenceValue = function (id, references) { return references[id]; }; var getReferenceId = function (value, references) { return Object.keys(references).find(function (id) { return references[id] === value; }); }; var defaultIdGenerator = function () { return uuid_1.v4().replace(/-/g, ""); }; /** * Recursively traverses the object and tries to apply a conversion to every string value */ var traverse = function (obj, convert) { if (isArray_1.default(obj)) { return obj.map(function (a) { return traverse(a, convert); }); } else if (isObject_1.default(obj)) { var object_1 = obj; return Object.keys(object_1).reduce(function (result, key) { result[key] = traverse(object_1[key], convert); return result; }, {}); } else if (isString_1.default(obj)) { return convert(obj); } else { return obj; } }; var createConverter = function (conversionFunction) { return function (mdObject, idGenerator) { if (idGenerator === void 0) { idGenerator = defaultIdGenerator; } var content = mdObject.content; if (!content) { return mdObject; } var properties = content.properties; if (!properties) { return mdObject; } // prepare result objects var originalProperties = JSON.parse(properties); var originalReferences = content.references || {}; var _a = conversionFunction(originalProperties, originalReferences, idGenerator), convertedProperties = _a.convertedProperties, convertedReferences = _a.convertedReferences; // set the new properties and references var referencesProp = isEmpty_1.default(convertedReferences) ? undefined : { references: convertedReferences }; var result = __assign({}, mdObject, { content: __assign({}, omit_1.default(mdObject.content, "references"), { properties: json_stable_stringify_1.default(convertedProperties) }, referencesProp) }); return result; }; }; /* * Conversion from References to URIs */ var convertReferenceToUri = function (references) { return function (value) { return getReferenceValue(value, references) || value; }; }; /** * Converts reference based values to actual URIs * * @param mdObject The object to convert properties of * @param [idGenerator=uuid] Function that returns unique ids */ exports.convertReferencesToUris = createConverter(function (originalProperties, originalReferences) { var convertedProperties = traverse(originalProperties, convertReferenceToUri(originalReferences)); return { convertedProperties: convertedProperties, convertedReferences: originalReferences, }; }); /* * Conversion from URIs to References */ var createUriToReferenceConverter = function (originalReferences, idGenerator) { var convertedReferences = {}; return { convertedReferences: convertedReferences, conversion: function (value) { if (!uri_1.isUri(value)) { return value; } var id = getReferenceId(value, originalReferences) || // try to reuse original references getReferenceId(value, convertedReferences) || // or use already converted new references idGenerator(); // or get a completely new id convertedReferences[id] = value; return id; }, }; }; /** * Converts URIs to reference based values * * @param mdObject The object to convert properties of * @param [idGenerator=uuid] Function that returns unique ids */ exports.convertUrisToReferences = createConverter(function (originalProperties, originalReferences, idGenerator) { var converter = createUriToReferenceConverter(originalReferences, idGenerator); var convertedProperties = traverse(originalProperties, converter.conversion); return { convertedProperties: convertedProperties, convertedReferences: converter.convertedReferences, }; });