@@ -10,9 +10,8 @@ import {
1010 isDirective ,
1111 registerDirective ,
1212} from "./remarkHelper" ;
13- import { toText } from "./mdastUtilToText" ;
1413import hash from "./objectHash" ;
15- import * as yaml from "js-yaml " ;
14+ import { readFile } from "./helper " ;
1615
1716export default ( ctx : HyperbookContext ) => ( ) => {
1817 const name = "learningmap" ;
@@ -32,52 +31,27 @@ export default (ctx: HyperbookContext) => () => {
3231 [ ] ,
3332 ) ;
3433
35- const { height = "calc(100vh - 80px)" , id = hash ( node ) } =
36- node . attributes || { } ;
34+ const {
35+ height = "calc(100vh - 80px)" ,
36+ id = hash ( node ) ,
37+ src = "" ,
38+ } = node . attributes || { } ;
3739
38- const roadmapData = toText (
39- node . children . find (
40- ( c ) =>
41- c . type === "code" && ( c . lang === "yaml" || c . lang === "json" ) ,
42- ) ,
43- ) ;
44-
45- let parsedRoadmapData : {
46- background ?: {
47- image ?: { src : string } ;
48- } ;
49- nodes ?: {
50- video ?: string ;
51- resources : { url : string } [ ] ;
52- } [ ] ;
53- } ;
54-
55- try {
56- parsedRoadmapData = JSON . parse ( roadmapData ) as any ;
57- } catch {
58- try {
59- parsedRoadmapData = yaml . load ( roadmapData ) as any ;
60- } catch ( err ) {
61- console . error ( "Failed to parse roadmap data:" , err ) ;
62- return SKIP ;
63- }
64- }
40+ if ( ! src ) return SKIP ;
6541
66- if ( parsedRoadmapData . background ?. image ?. src ) {
67- const url = ctx . makeUrl (
68- parsedRoadmapData . background . image . src ,
69- "public" ,
70- ctx . navigation . current || undefined ,
71- ) ;
72- parsedRoadmapData . background . image . src = url ;
42+ let srcFile = readFile ( src , ctx ) ;
43+ if ( ! srcFile ) {
44+ file . message ( `File not found: ${ src } ` , node ) ;
45+ return SKIP ;
7346 }
7447
75- parsedRoadmapData . nodes ?. forEach ( ( node ) => {
48+ let parsedRoadmapData = JSON . parse ( srcFile ) as any ;
49+ parsedRoadmapData . nodes ?. forEach ( ( node : any ) => {
7650 if ( node . video ) {
7751 node . video = ctx . makeUrl ( node . video , "public" ) ;
7852 }
7953 if ( node . resources ) {
80- node . resources = node . resources . map ( ( res ) => ( {
54+ node . resources = node . resources . map ( ( res : any ) => ( {
8155 ...res ,
8256 url : ctx . makeUrl ( res . url , "public" ) ,
8357 } ) ) ;
0 commit comments