|
|
@@ -1,5 +1,6 @@
|
|
|
import type { SyntaxNode } from "@lezer/common"
|
|
|
import { GFM, parser } from "@lezer/markdown"
|
|
|
+import { nanoid } from "nanoid"
|
|
|
import { createMarkdownExtensions } from "@/lib/markdown-extensions"
|
|
|
|
|
|
export interface EditorBlockData {
|
|
|
@@ -11,11 +12,11 @@ export interface EditorBlockData {
|
|
|
// ── ID utilities ──────────────────────────────────────────────────
|
|
|
|
|
|
/**
|
|
|
- * Generate a new block identifier. Abstracted from `crypto.randomUUID()`
|
|
|
- * so the caller (or tests) can provide an alternative.
|
|
|
+ * Generate a new block identifier using a 6-character NanoID.
|
|
|
+ * Not every block needs an ID — only blocks referenced via ((id)) do.
|
|
|
*/
|
|
|
export function generateBlockId(): string {
|
|
|
- return crypto.randomUUID()
|
|
|
+ return nanoid(6)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -99,7 +100,7 @@ function ownContentEnd(node: SyntaxNode): number {
|
|
|
*/
|
|
|
export function splitMarkdownIntoBlocks(
|
|
|
md: string,
|
|
|
- idFn: () => string = crypto.randomUUID.bind(crypto),
|
|
|
+ idFn: () => string = () => nanoid(6),
|
|
|
existing?: Pick<EditorBlockData, "id">[],
|
|
|
): EditorBlockData[] {
|
|
|
if (!md.trim()) return []
|