UNPKG

botframework-webchat-component

Version:
96 lines (94 loc) 15.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dereferenceBlankNodes; var _deepFreezeStrict = _interopRequireDefault(require("deep-freeze-strict")); var _getSafeOwnPropertyNames = _interopRequireDefault(require("./getSafeOwnPropertyNames")); var _isBlankNode = _interopRequireDefault(require("./isBlankNode")); var _isUnconnectedBlankNode = _interopRequireDefault(require("./isUnconnectedBlankNode")); var _visitOnce = _interopRequireDefault(require("./visitOnce")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function dereferenceBlankNodesInline(objects) { var blankNodeIdMap = new Map(); var objectsToVisit1 = [objects]; var shouldVisit1 = (0, _visitOnce.default)(); while (objectsToVisit1.length) { var object = objectsToVisit1.shift(); if (!object) { continue; } var indices = (0, _getSafeOwnPropertyNames.default)(object); var _iterator = _createForOfIteratorHelper(indices), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var index = _step.value; // eslint-disable-next-line security/detect-object-injection var value = object[index]; if ((0, _isBlankNode.default)(value) && !(0, _isUnconnectedBlankNode.default)(value)) { blankNodeIdMap.set(value['@id'], value); } shouldVisit1(value) && objectsToVisit1.push(value); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } var objectsToVisit2 = [objects]; var shouldVisit2 = (0, _visitOnce.default)(); while (objectsToVisit2.length) { var _object = objectsToVisit2.shift(); if (!_object) { continue; } var _indices = (0, _getSafeOwnPropertyNames.default)(_object); var _iterator2 = _createForOfIteratorHelper(_indices), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _index = _step2.value; // eslint-disable-next-line security/detect-object-injection var _value = _object[_index]; if ((0, _isBlankNode.default)(_value) && (0, _isUnconnectedBlankNode.default)(_value)) { var blankNode = blankNodeIdMap.get(_value['@id']); if (blankNode) { // eslint-disable-next-line security/detect-object-injection _object[_index] = blankNode; } } else { shouldVisit2(_value) && objectsToVisit2.push(_value); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } /** * Dereferences all unconnected blank nodes to their corresponding blank node. This is done by replacing all unconnected blank nodes in a graph and purposefully introduce cyclic dependencies to help querying the graph. * * This function will always return a new instance of all objects in the graph. * * This function assumes the graph conforms to JSON-LD, notably: * * - For nodes that share the same blank node identifier, one of them should be connected and the other must be unconnected * - If none of them are connected node, these unconnected blank node will not be replaced * * @see https://json-ld.github.io/json-ld.org/spec/latest/json-ld/#data-model-overview * @param graph A list of nodes in the graph. * @returns A structured clone of graph with unconnected blank nodes replaced by their corresponding blank node. */ function dereferenceBlankNodes(graph) { var nextObjects = structuredClone(graph); dereferenceBlankNodesInline(nextObjects); return (0, _deepFreezeStrict.default)(nextObjects); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVlcEZyZWV6ZVN0cmljdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dldFNhZmVPd25Qcm9wZXJ0eU5hbWVzIiwiX2lzQmxhbmtOb2RlIiwiX2lzVW5jb25uZWN0ZWRCbGFua05vZGUiLCJfdmlzaXRPbmNlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJpIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZSIsIl9lIiwiZiIsIlR5cGVFcnJvciIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJjYWxsIiwic3RlcCIsIm5leHQiLCJfZTIiLCJyZXR1cm4iLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImFyciIsImxlbiIsImFycjIiLCJkZXJlZmVyZW5jZUJsYW5rTm9kZXNJbmxpbmUiLCJvYmplY3RzIiwiYmxhbmtOb2RlSWRNYXAiLCJNYXAiLCJvYmplY3RzVG9WaXNpdDEiLCJzaG91bGRWaXNpdDEiLCJ2aXNpdE9uY2UiLCJvYmplY3QiLCJzaGlmdCIsImluZGljZXMiLCJnZXRTYWZlT3duUHJvcGVydHlOYW1lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiaW5kZXgiLCJpc0JsYW5rTm9kZSIsImlzVW5jb25uZWN0ZWRCbGFua05vZGUiLCJzZXQiLCJwdXNoIiwib2JqZWN0c1RvVmlzaXQyIiwic2hvdWxkVmlzaXQyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImJsYW5rTm9kZSIsImdldCIsImRlcmVmZXJlbmNlQmxhbmtOb2RlcyIsImdyYXBoIiwibmV4dE9iamVjdHMiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJkZWVwRnJlZXplIl0sInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvVXRpbHMvSlNPTkxpbmtlZERhdGEvZGVyZWZlcmVuY2VCbGFua05vZGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwRnJlZXplIGZyb20gJ2RlZXAtZnJlZXplLXN0cmljdCc7XG5cbmltcG9ydCB7IHR5cGUgQmxhbmtOb2RlIH0gZnJvbSAnLi9CbGFua05vZGUnO1xuaW1wb3J0IGdldFNhZmVPd25Qcm9wZXJ0eU5hbWVzIGZyb20gJy4vZ2V0U2FmZU93blByb3BlcnR5TmFtZXMnO1xuaW1wb3J0IGlzQmxhbmtOb2RlIGZyb20gJy4vaXNCbGFua05vZGUnO1xuaW1wb3J0IGlzVW5jb25uZWN0ZWRCbGFua05vZGUgZnJvbSAnLi9pc1VuY29ubmVjdGVkQmxhbmtOb2RlJztcbmltcG9ydCB2aXNpdE9uY2UgZnJvbSAnLi92aXNpdE9uY2UnO1xuXG5mdW5jdGlvbiBkZXJlZmVyZW5jZUJsYW5rTm9kZXNJbmxpbmUob2JqZWN0czogb2JqZWN0W10pOiB2b2lkIHtcbiAgY29uc3QgYmxhbmtOb2RlSWRNYXAgPSBuZXcgTWFwPHN0cmluZywgQmxhbmtOb2RlPigpO1xuXG4gIGNvbnN0IG9iamVjdHNUb1Zpc2l0MTogYW55W10gPSBbb2JqZWN0c107XG4gIGNvbnN0IHNob3VsZFZpc2l0MSA9IHZpc2l0T25jZTxvYmplY3Q+KCk7XG5cbiAgd2hpbGUgKG9iamVjdHNUb1Zpc2l0MS5sZW5ndGgpIHtcbiAgICBjb25zdCBvYmplY3QgPSBvYmplY3RzVG9WaXNpdDEuc2hpZnQoKTtcblxuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZ2V0U2FmZU93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcblxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kaWNlcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICAgIGlmIChpc0JsYW5rTm9kZSh2YWx1ZSkgJiYgIWlzVW5jb25uZWN0ZWRCbGFua05vZGUodmFsdWUpKSB7XG4gICAgICAgIGJsYW5rTm9kZUlkTWFwLnNldCh2YWx1ZVsnQGlkJ10sIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgc2hvdWxkVmlzaXQxKHZhbHVlKSAmJiBvYmplY3RzVG9WaXNpdDEucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb2JqZWN0c1RvVmlzaXQyOiB1bmtub3duW10gPSBbb2JqZWN0c107XG4gIGNvbnN0IHNob3VsZFZpc2l0MiA9IHZpc2l0T25jZTxvYmplY3Q+KCk7XG5cbiAgd2hpbGUgKG9iamVjdHNUb1Zpc2l0Mi5sZW5ndGgpIHtcbiAgICBjb25zdCBvYmplY3QgPSBvYmplY3RzVG9WaXNpdDIuc2hpZnQoKTtcblxuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZ2V0U2FmZU93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcblxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kaWNlcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICAgIGlmIChpc0JsYW5rTm9kZSh2YWx1ZSkgJiYgaXNVbmNvbm5lY3RlZEJsYW5rTm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgYmxhbmtOb2RlID0gYmxhbmtOb2RlSWRNYXAuZ2V0KHZhbHVlWydAaWQnXSk7XG5cbiAgICAgICAgaWYgKGJsYW5rTm9kZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgIG9iamVjdFtpbmRleF0gPSBibGFua05vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3VsZFZpc2l0Mih2YWx1ZSkgJiYgb2JqZWN0c1RvVmlzaXQyLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlcmVmZXJlbmNlcyBhbGwgdW5jb25uZWN0ZWQgYmxhbmsgbm9kZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBibGFuayBub2RlLiBUaGlzIGlzIGRvbmUgYnkgcmVwbGFjaW5nIGFsbCB1bmNvbm5lY3RlZCBibGFuayBub2RlcyBpbiBhIGdyYXBoIGFuZCBwdXJwb3NlZnVsbHkgaW50cm9kdWNlIGN5Y2xpYyBkZXBlbmRlbmNpZXMgdG8gaGVscCBxdWVyeWluZyB0aGUgZ3JhcGguXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYWxsIG9iamVjdHMgaW4gdGhlIGdyYXBoLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgZ3JhcGggY29uZm9ybXMgdG8gSlNPTi1MRCwgbm90YWJseTpcbiAqXG4gKiAtIEZvciBub2RlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIGJsYW5rIG5vZGUgaWRlbnRpZmllciwgb25lIG9mIHRoZW0gc2hvdWxkIGJlIGNvbm5lY3RlZCBhbmQgdGhlIG90aGVyIG11c3QgYmUgdW5jb25uZWN0ZWRcbiAqIC0gSWYgbm9uZSBvZiB0aGVtIGFyZSBjb25uZWN0ZWQgbm9kZSwgdGhlc2UgdW5jb25uZWN0ZWQgYmxhbmsgbm9kZSB3aWxsIG5vdCBiZSByZXBsYWNlZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9qc29uLWxkLmdpdGh1Yi5pby9qc29uLWxkLm9yZy9zcGVjL2xhdGVzdC9qc29uLWxkLyNkYXRhLW1vZGVsLW92ZXJ2aWV3XG4gKiBAcGFyYW0gZ3JhcGggQSBsaXN0IG9mIG5vZGVzIGluIHRoZSBncmFwaC5cbiAqIEByZXR1cm5zIEEgc3RydWN0dXJlZCBjbG9uZSBvZiBncmFwaCB3aXRoIHVuY29ubmVjdGVkIGJsYW5rIG5vZGVzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgYmxhbmsgbm9kZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVyZWZlcmVuY2VCbGFua05vZGVzPFQgZXh0ZW5kcyBvYmplY3Q+KGdyYXBoOiBUW10pOiByZWFkb25seSBUW10ge1xuICBjb25zdCBuZXh0T2JqZWN0cyA9IHN0cnVjdHVyZWRDbG9uZShncmFwaCk7XG5cbiAgZGVyZWZlcmVuY2VCbGFua05vZGVzSW5saW5lKG5leHRPYmplY3RzKTtcblxuICByZXR1cm4gZGVlcEZyZWV6ZShuZXh0T2JqZWN0cyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyx3QkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsdUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUFvQyxTQUFBRCx1QkFBQU0sR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUFBLFNBQUFHLDJCQUFBQyxDQUFBLEVBQUFDLGNBQUEsUUFBQUMsRUFBQSxVQUFBQyxNQUFBLG9CQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxFQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLEVBQUEsR0FBQUssMkJBQUEsQ0FB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