@atlaskit/adf-utils
Version:
Set of utilities to traverse, modify and create ADF documents.
70 lines (68 loc) • 2.43 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.nativeEmbedsFallbackTransform = void 0;
var _traverse = require("../traverse/traverse");
var _validator = require("../validator/validator");
var NATIVE_EMBED_EXTENSION_KEY = 'native-embed';
/**
* Replaces any `extension` nodes whose `extensionKey` is
* `native-embed` with a paragraph containing an `inlineCard`
* node pointing at the same URL.
* If a native-embed node has no URL it is dropped from the document.
*
* The transformed ADF is validated against the ADF spec.
* If validation fails the original (untransformed) ADF is returned
* to avoid rendering broken content.
*/
var nativeEmbedsFallbackTransform = exports.nativeEmbedsFallbackTransform = function nativeEmbedsFallbackTransform(adf) {
var didTransform = false;
var transformedAdf = (0, _traverse.traverse)(adf, {
extension: function extension(node) {
var _node$attrs, _node$attrs2;
if (((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs['extensionKey'].split(':')[0]) !== NATIVE_EMBED_EXTENSION_KEY) {
return node;
}
var url = (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 || (_node$attrs2 = _node$attrs2['parameters']) === null || _node$attrs2 === void 0 || (_node$attrs2 = _node$attrs2.macroParams) === null || _node$attrs2 === void 0 || (_node$attrs2 = _node$attrs2.url) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.value;
if (!url) {
didTransform = true;
return false;
}
didTransform = true;
return {
type: 'paragraph',
content: [{
type: 'inlineCard',
attrs: {
url: url
}
}]
};
}
});
if (didTransform && transformedAdf) {
try {
var validate = (0, _validator.validator)();
var _validate = validate(transformedAdf),
valid = _validate.valid;
if (!valid) {
// Transformed ADF is invalid – fall back to the original document
return {
transformedAdf: adf,
hasValidTransform: false
};
}
} catch (_unused) {
// Validation threw – fall back to the original document
return {
transformedAdf: adf,
hasValidTransform: false
};
}
}
return {
transformedAdf: transformedAdf,
hasValidTransform: didTransform
};
};