{"record":{"id":"555bee0ac3fd31a2","repo":"siyuan-note/siyuan","slug":"unsupported-block-data-type-s","errorCode":null,"errorMessage":"unsupported block data type [%s]","messagePattern":"unsupported block data type \\[(.+?)\\]","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"kernel/model/block_update.go","lineNumber":214,"sourceCode":"\t}\n\tif \"\" != invalidID {\n\t\treturn \"\", errors.New(\"found invalid ID [\" + invalidID + \"]\")\n\t}\n\treturn\n}\n\nfunc parseBlockUpdateData(data, dataType string, luteEngine *lute.Lute) (ret string, tree *parse.Tree, err error) {\n\tret = data\n\tswitch dataType {\n\tcase \"markdown\":\n\t\tret, err = DataBlockDOM(data, luteEngine)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"data block DOM failed: %w\", err)\n\t\t\treturn\n\t\t}\n\tcase \"dom\":\n\tdefault:\n\t\terr = fmt.Errorf(\"unsupported block data type [%s]\", dataType)\n\t\treturn\n\t}\n\n\ttree = luteEngine.BlockDOM2Tree(ret)\n\tif nil == tree || nil == tree.Root || nil == firstContentBlock(tree.Root) {\n\t\terr = errors.New(\"parse tree failed\")\n\t}\n\treturn\n}\n\nfunc normalizeBlockUpdateTree(oldNode *ast.Node, tree *parse.Tree, luteEngine *lute.Lute) (ret *parse.Tree, updatedNode *ast.Node, err error) {\n\tupdatedNode, err = resolveBlockUpdateNode(oldNode, tree.Root)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tupdatedNode.Unlink()\n\troot := &ast.Node{Type: ast.NodeDocument}","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/model/block_update.go#L196-L232","documentation":"Returned by parseBlockUpdateData's default switch case. dataType must be exactly \"markdown\" or \"dom\"; anything else (\"html\", \"text\", \"json\", \"\", etc.) falls through to default and is rejected.","triggerScenarios":"Client passes \"html\" or \"text\" as dataType; typo like \"Markdown\" or \" DOM\"; empty string from a missing field.","commonSituations":"Integration built against an older/newer API spec; client default value not set; case sensitivity slip.","solutions":["Use dataType = \"markdown\" when input is markdown text, or \"dom\" when input is already SiYuan DOM HTML.","Whitelist dataType at the caller before invoking the API.","Lowercase and trim the value defensively before the call."],"exampleFix":"// before\nBlockUpdateInput{DataType: \"html\", Data: html}\n\n// after\nBlockUpdateInput{DataType: \"dom\", Data: domHTML}","handlingStrategy":"validation","validationCode":"switch dataType {\ncase \"markdown\", \"dom\":\ndefault:\n    return fmt.Errorf(\"unsupported dataType %q\", dataType)\n}","typeGuard":"func isValidDataType(t string) bool {\n    return t == \"markdown\" || t == \"dom\"\n}","tryCatchPattern":null,"preventionTips":["Whitelist dataType at the caller before invoking the API.","Lowercase and trim the value to avoid case/whitespace slip.","Default to \"dom\" when the source is rendered HTML."],"tags":["block-update","validation","data-type"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}