import type { FileData, FileEncoding, } from "@silverbulletmd/common/spaces/space_primitives"; import { renderToText, replaceNodesMatching, } from "@silverbulletmd/common/tree"; import type { FileMeta, PageMeta } from "@silverbulletmd/common/types"; import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; const pagePrefix = "💭 "; export async function readFileCloud( name: string, encoding: FileEncoding ): Promise<{ data: FileData; meta: FileMeta } | undefined> { let originalUrl = name.substring( pagePrefix.length, name.length - ".md".length ); let url = originalUrl; if (!url.includes("/")) { url += "/index"; } if (!url.startsWith("127.0.0.1")) { url = `https://${url}`; } else { url = `http://${url}`; } let text = ""; try { let r = await fetch(`${url}.md`); text = await r.text(); if (r.status !== 200) { text = `ERROR: ${text}`; } } catch (e: any) { console.error("ERROR", e.message); text = e.message; } return { data: await translateLinksWithPrefix( text, `${pagePrefix}${originalUrl.split("/")[0]}/` ), meta: { name, contentType: "text/markdown", lastModified: 0, size: text.length, perm: "ro", }, }; } async function translateLinksWithPrefix( text: string, prefix: string ): Promise { let tree = await parseMarkdown(text); replaceNodesMatching(tree, (tree) => { if (tree.type === "WikiLinkPage") { // Add the prefix in the link text tree.children![0].text = prefix + tree.children![0].text; } return undefined; }); text = renderToText(tree); return text; } export async function getFileMetaCloud(name: string): Promise { return { name, size: 0, contentType: "text/markdown", lastModified: 0, perm: "ro", }; }