roam-export
Version:
A set of tools to Filter/transform/render RoamResearch JSON export. Used in Roam Garden
36 lines • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeHierarchicalDuplicates = exports.visitChildren = exports.removeChildMatching = exports.getReferencedBlocks = exports.getFlatBlockList = exports.isPublic = void 0;
const isPublic = (page, publicMarkers) => (publicMarkers.includes(page.title) || extractChildren(page).some(it => matchesMarker(it, publicMarkers)));
exports.isPublic = isPublic;
function matchesMarker(block, markers) {
const toRegex = (marker) => new RegExp(`#?\\[\\[${marker}]]|#${marker}`);
const markerRegexes = markers.map(toRegex);
return markerRegexes.some(marker => { var _a; return (_a = block === null || block === void 0 ? void 0 : block.string) === null || _a === void 0 ? void 0 : _a.match(marker); });
}
const getFlatBlockList = (pages) => pages.flatMap(extractChildren);
exports.getFlatBlockList = getFlatBlockList;
const extractChildren = (block) => { var _a; return ((_a = block.children) === null || _a === void 0 ? void 0 : _a.flatMap(it => [it, ...extractChildren(it)])) || []; };
function getReferencedBlocks(originPages, allPages) {
const publicBlocks = exports.getFlatBlockList(originPages);
const referencedBlockIds = new Set(publicBlocks.flatMap(it => { var _a; return ((_a = it.refs) === null || _a === void 0 ? void 0 : _a.map(ref => ref.uid)) || []; }));
return exports.getFlatBlockList(allPages).filter(it => referencedBlockIds.has(it.uid || ""));
}
exports.getReferencedBlocks = getReferencedBlocks;
const removeChildMatching = (page, privateMarkers) => {
var _a, _b;
return (Object.assign(Object.assign({}, page), { children: (_b = (_a = page === null || page === void 0 ? void 0 : page.children) === null || _a === void 0 ? void 0 : _a.filter(it => !matchesMarker(it, privateMarkers))) === null || _b === void 0 ? void 0 : _b.map(it => exports.removeChildMatching(it, privateMarkers)) }));
};
exports.removeChildMatching = removeChildMatching;
function visitChildren(block, visit) {
var _a;
visit(block);
(_a = block === null || block === void 0 ? void 0 : block.children) === null || _a === void 0 ? void 0 : _a.forEach(it => visitChildren(it, visit));
}
exports.visitChildren = visitChildren;
function removeHierarchicalDuplicates(blocks) {
const nestedUids = new Set(exports.getFlatBlockList(blocks).map(it => it.uid));
return blocks.filter(it => !nestedUids.has(it.uid));
}
exports.removeHierarchicalDuplicates = removeHierarchicalDuplicates;
//# sourceMappingURL=roam-utils.js.map