markdown-bridge.ts1.0 KBView on GitHub /**
* Markdown notation for file-link chips: `[[doc:<documentId>]]`.
*
* The chip's display label is fetched live from `documents.getDoc`, so the
* markdown carries only the UUID. Older content using `[[doc:UUID|label]]`
* still parses — the label is read and discarded.
*/
const FILE_LINK_TOKEN_REGEX = /\[\[doc:([0-9a-fA-F-]{36})(?:\|[^\]]+)?\]\]/g;
const FILE_LINK_TOKEN_ANCHORED = /^\[\[doc:([0-9a-fA-F-]{36})(?:\|[^\]]+)?\]\]/;
export interface FileLinkAttrs {
documentId: string;
}
export function serializeFileLinkToken(attrs: FileLinkAttrs): string {
return `[[doc:${attrs.documentId}]]`;
}
export function parseFileLinkToken(raw: string): FileLinkAttrs | null {
const match = raw.match(/^\[\[doc:([0-9a-fA-F-]{36})(?:\|[^\]]+)?\]\]$/);
if (!match) return null;
return { documentId: match[1] };
}
export function findFileLinkTokenStart(src: string): number {
const match = FILE_LINK_TOKEN_REGEX.exec(src);
FILE_LINK_TOKEN_REGEX.lastIndex = 0;
return match?.index ?? -1;
}
export { FILE_LINK_TOKEN_ANCHORED };