UNPKG

@atlaskit/adf-utils

Version:

Set of utilities to traverse, modify and create ADF documents.

84 lines (82 loc) 3.97 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.transformInvalidMediaContent = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _traverse = require("../traverse/traverse"); var _helpers = require("./helpers"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var getChildrenTypeCounts = function getChildrenTypeCounts(nodeContent, allowedTypes) { var childrenTypes = {}; nodeContent.forEach(function (childNode) { if (!(childNode !== null && childNode !== void 0 && childNode.type) || !allowedTypes.includes(childNode.type)) { return; } if (!childrenTypes[childNode.type]) { childrenTypes[childNode.type] = 1; return; } childrenTypes[childNode.type]++; }); return childrenTypes; }; var removeDuplicatedNodes = function removeDuplicatedNodes(type, content, predicate) { var maxIterations = 10; var childrenTypeCounts = getChildrenTypeCounts(content, [type])[type]; var firstPredicateNodeIndex = content.findIndex(predicate); while (childrenTypeCounts > 1 && firstPredicateNodeIndex > -1 && maxIterations-- > 0) { content.splice(firstPredicateNodeIndex, 1); firstPredicateNodeIndex = content.findIndex(predicate); childrenTypeCounts = getChildrenTypeCounts(content, [type])[type]; } }; /** * @param {{[type:string]:number}} allowedTypes - array types allowed to deduplicate */ var deduplicateMediaSingleChildren = function deduplicateMediaSingleChildren(node, allowedTypes) { if (!node.content) { return; } var content = (0, _toConsumableArray2.default)(node.content); Object.keys(allowedTypes).forEach(function (type) { //prioritise removing empty nodes first removeDuplicatedNodes(type, content, function (node) { return (node === null || node === void 0 ? void 0 : node.type) === type && (0, _helpers.isEmpty)(node); }); //remove other remaining dupicates removeDuplicatedNodes(type, content, function (node) { return (node === null || node === void 0 ? void 0 : node.type) === type; }); }); return _objectSpread(_objectSpread({}, node), {}, { content: content }); }; var transformInvalidMediaContent = exports.transformInvalidMediaContent = function transformInvalidMediaContent(adf) { var isTransformed = false; var transformedAdf = (0, _traverse.traverse)(adf, { mediaSingle: function mediaSingle(node) { var _node$content; if (!(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length)) { return; } var disallowedDuplicateTypes = ['media', 'caption']; var childrenTypes = getChildrenTypeCounts(node.content, disallowedDuplicateTypes); if (Object.values(childrenTypes).some(function (occurences) { return occurences > 1; })) { isTransformed = true; return deduplicateMediaSingleChildren(node, childrenTypes); } return; } }); return { transformedAdf: transformedAdf, isTransformed: isTransformed }; };