module docusaurus import incubaid.herolib.core.pathlib import incubaid.herolib.web.doctree.meta import incubaid.herolib.osal.core as osal import incubaid.herolib.ui.console @[heap] pub struct DocSite { pub mut: name string url string // path_src pathlib.Path path_publish pathlib.Path path_build pathlib.Path errors []SiteError config Configuration website meta.Site generated bool } pub fn (mut s DocSite) build() ! { s.generate()! osal.exec( cmd: ' cd ${s.path_build.path} bun run build ' retry: 0 )! } pub fn (mut s DocSite) build_dev_publish() ! { s.generate()! osal.exec( cmd: ' cd ${s.path_build.path} bun run buildp ' retry: 0 )! } pub fn (mut s DocSite) build_publish() ! { s.generate()! osal.exec( cmd: ' cd ${s.path_build.path} bun run build ' retry: 0 )! for item in s.build_dest { if item.path.trim_space().trim('/ ') == '' { $if debug { print_backtrace() } return error('build destination path is empty for docusaurus.') } osal.exec( cmd: ' cd ${s.path_build.path} rsync -avz --delete -e "ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" build/ ${item.path} ' )! } } @[params] pub struct DevArgs { pub mut: host string = 'localhost' port int = 3000 open bool = true // whether to open the browser automatically watch_changes bool // whether to watch for changes in docs and rebuild automatically skip_generate bool // whether to skip generation (useful when docs are pre-generated, e.g., from doctree) } pub fn (mut s DocSite) open(args DevArgs) ! { // Print instructions for user console.print_item('open browser: https://${args.host}:${args.port}') osal.exec(cmd: 'open https://${args.host}:${args.port}')! } pub fn (mut s DocSite) dev(args DevArgs) ! { if !args.skip_generate { s.generate()! } osal.exec( cmd: ' cd ${s.path_build.path} bun run start -p ${args.port} -h ${args.host} ' retry: 0 )! s.open()! } @[params] pub struct ErrorArgs { pub mut: path string msg string cat ErrorCat } pub fn (mut s DocSite) error(args ErrorArgs) { // path2 := pathlib.get(args.path) e := SiteError{ path: args.path msg: args.msg cat: args.cat } s.errors << e console.print_stderr(args.msg) }