@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
32 lines (31 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getNodesCountWithExtensionKeys = getNodesCountWithExtensionKeys;
/**
* Counts node types and extension keys in a single traversal.
* We exclude the end-of-doc token by iterating to nodeSize - 2,
* which matches the typical ProseMirror pattern for traversing all child nodes.
*/
function getNodesCountWithExtensionKeys(node) {
var nodes = {};
var extensionKeys = {};
var extensionNodeNames = ['extension', 'bodiedExtension', 'inlineExtension', 'multiBodiedExtension'];
node.nodesBetween(0, node.nodeSize - 2, function (currentNode) {
var _currentNode$attrs;
nodes[currentNode.type.name] = (nodes[currentNode.type.name] || 0) + 1;
if (!extensionNodeNames.includes(currentNode.type.name)) {
return;
}
var extensionKey = (_currentNode$attrs = currentNode.attrs) === null || _currentNode$attrs === void 0 ? void 0 : _currentNode$attrs.extensionKey;
if (!extensionKey) {
return;
}
extensionKeys[extensionKey] = (extensionKeys[extensionKey] || 0) + 1;
});
return {
nodes: nodes,
extensionKeys: extensionKeys
};
}