UNPKG

roam-export

Version:

A set of tools to Filter/transform/render RoamResearch JSON export. Used in Roam Garden

91 lines 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const filtering_1 = require("../filtering"); const testPage = { title: "test page no children or marker", uid: "p0", }; const publicMarkerPage = { title: "public-marker", uid: "public-marker-uid", }; const blockWithPublicMarker = { uid: "b1", string: "test block [[public-marker]]", refs: [{ uid: publicMarkerPage.uid }], }; const pageWithPublicMarker = { title: "test page", uid: "p1", children: [blockWithPublicMarker], }; const emptyFilter = { makePagesWithTheseTagsPublic: [], makeBlocksWithTheseTagsPrivate: [], }; const filterWithPublicMarker = Object.assign(Object.assign({}, emptyFilter), { makePagesWithTheseTagsPublic: [publicMarkerPage.title] }); const filterAskingForTestPage = Object.assign(Object.assign({}, emptyFilter), { pagesToMakePublic: [testPage.title] }); const allPublicFilter = Object.assign(Object.assign({}, emptyFilter), { makeAllPagesPublic: true }); const parentOrphanUid = "parent-orphan-uid"; const childOrphanUid = "child-orphan-uid"; const pageToBeOrphaned = { title: "pageToBeOrphaned", uid: "pageToBeOrphaned-uid", children: [{ uid: parentOrphanUid, string: "parent-orphan", children: [{ uid: childOrphanUid, string: "child-orphan", }], }], }; const pageReferencingOrphan = { title: "pageReferencingOrphan", uid: "pageReferencingOrphan-uid", children: [{ uid: "referencer", string: `((${parentOrphanUid})), ((${childOrphanUid}))`, refs: [parentOrphanUid, childOrphanUid].map(it => ({ uid: it, })), }], }; const allPages = [publicMarkerPage, pageWithPublicMarker, testPage, pageToBeOrphaned, pageReferencingOrphan]; describe("RoamJsonQuery", () => { it("should return empty results when filter is empty", () => { const query = new filtering_1.RoamJsonQuery([testPage], emptyFilter); expect(query.getPagesToRender().pages).toBeEmpty(); }); it("should return only pages required to be public", () => { const toRender = new filtering_1.RoamJsonQuery(allPages, filterWithPublicMarker).getPagesToRender(); expect(toRender.pages).toIncludeSameMembers([publicMarkerPage, pageWithPublicMarker]); expect(toRender.blockUids).toEqual(new Set([blockWithPublicMarker.uid])); }); it("should return all pages when filter says so", () => { const toRender = new filtering_1.RoamJsonQuery(allPages, allPublicFilter).getPagesToRender(); expect(toRender.pages).toIncludeAllMembers(allPages); }); it("should return test page when filter explicitly asks for it", () => { const toRender = new filtering_1.RoamJsonQuery(allPages, filterAskingForTestPage).getPagesToRender(); expect(toRender.pages).toEqual([testPage]); }); it("should return all request public pages from combination of filters", () => { const toRender = new filtering_1.RoamJsonQuery(allPages, Object.assign(Object.assign({}, filterAskingForTestPage), filterWithPublicMarker)).getPagesToRender(); expect(toRender.pages).toIncludeAllMembers([publicMarkerPage, pageWithPublicMarker, testPage]); }); it("handle orphan reference hierarchy without creating duplicate blocks", () => { /** * Embeddings on a multiple levels create an obscure problem with blocks * duplicating. So when you have a reference to higher level block and then to it's child * they both become independently referenced. and will show up multiple times on the page * * This also had downstream effects of making filtering non-idempotent (starting to duplicate blocks) */ const toRender = new filtering_1.RoamJsonQuery(allPages, Object.assign(Object.assign({}, emptyFilter), { pagesToMakePublic: [pageReferencingOrphan.title] })).getPagesToRender(); expect(toRender.pages).toContainEqual(pageReferencingOrphan); expect(toRender.pages).toBeArrayOfSize(2); const orphan = toRender.pages.find(it => it.uid == pageToBeOrphaned.uid); // Orphan declaration + original top level block without duplication expect(orphan.children).toBeArrayOfSize(2); }); }); //# sourceMappingURL=filtering.spec.js.map