feat: Add Docusaurus dev server integration
- Add 'dev' flag to run Docusaurus server - Import docusaurus library - Enable scan and export if 'dev' flag is set - Handle export errors more gracefully - Start Docusaurus dev server after export
This commit is contained in:
@@ -4,6 +4,7 @@ import incubaid.herolib.ui.console
|
|||||||
import incubaid.herolib.data.atlas
|
import incubaid.herolib.data.atlas
|
||||||
import incubaid.herolib.core.playcmds
|
import incubaid.herolib.core.playcmds
|
||||||
import incubaid.herolib.develop.gittools
|
import incubaid.herolib.develop.gittools
|
||||||
|
import incubaid.herolib.web.docusaurus
|
||||||
import os
|
import os
|
||||||
import cli { Command, Flag }
|
import cli { Command, Flag }
|
||||||
|
|
||||||
@@ -59,7 +60,6 @@ pub fn cmd_atlas(mut cmdroot Command) Command {
|
|||||||
flag: .string
|
flag: .string
|
||||||
required: false
|
required: false
|
||||||
name: 'destination'
|
name: 'destination'
|
||||||
abbrev: 'd'
|
|
||||||
description: 'Export destination path.'
|
description: 'Export destination path.'
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -71,6 +71,14 @@ pub fn cmd_atlas(mut cmdroot Command) Command {
|
|||||||
description: 'Scan directories for collections.'
|
description: 'Scan directories for collections.'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
cmd_run.add_flag(Flag{
|
||||||
|
flag: .bool
|
||||||
|
required: false
|
||||||
|
name: 'dev'
|
||||||
|
abbrev: 'd'
|
||||||
|
description: 'Run development server after export.'
|
||||||
|
})
|
||||||
|
|
||||||
cmd_run.add_flag(Flag{
|
cmd_run.add_flag(Flag{
|
||||||
flag: .bool
|
flag: .bool
|
||||||
required: false
|
required: false
|
||||||
@@ -110,6 +118,7 @@ fn cmd_atlas_execute(cmd Command) ! {
|
|||||||
mut update := cmd.flags.get_bool('update') or { false }
|
mut update := cmd.flags.get_bool('update') or { false }
|
||||||
mut scan := cmd.flags.get_bool('scan') or { false }
|
mut scan := cmd.flags.get_bool('scan') or { false }
|
||||||
mut export := cmd.flags.get_bool('export') or { false }
|
mut export := cmd.flags.get_bool('export') or { false }
|
||||||
|
mut dev := cmd.flags.get_bool('dev') or { false }
|
||||||
|
|
||||||
// Include and redis default to true unless explicitly disabled
|
// Include and redis default to true unless explicitly disabled
|
||||||
mut no_include := cmd.flags.get_bool('no-include') or { false }
|
mut no_include := cmd.flags.get_bool('no-include') or { false }
|
||||||
@@ -138,9 +147,12 @@ fn cmd_atlas_execute(cmd Command) ! {
|
|||||||
console.print_header('Running Atlas for: ${atlas_path.path}')
|
console.print_header('Running Atlas for: ${atlas_path.path}')
|
||||||
|
|
||||||
// Run HeroScript if exists
|
// Run HeroScript if exists
|
||||||
|
// Note: emptycheck is false because !!include actions in markdown files
|
||||||
|
// are processed internally by atlas during export, not through the playbook system
|
||||||
playcmds.run(
|
playcmds.run(
|
||||||
heroscript_path: atlas_path.path
|
heroscript_path: atlas_path.path
|
||||||
reset: false
|
reset: false
|
||||||
|
emptycheck: false
|
||||||
)!
|
)!
|
||||||
|
|
||||||
// Create or get atlas instance
|
// Create or get atlas instance
|
||||||
@@ -151,11 +163,18 @@ fn cmd_atlas_execute(cmd Command) ! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default behavior: scan and export if no flags specified
|
// Default behavior: scan and export if no flags specified
|
||||||
|
// Also enable scan and export if dev is requested
|
||||||
if !scan && !export {
|
if !scan && !export {
|
||||||
scan = true
|
scan = true
|
||||||
export = true
|
export = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If dev server is requested, ensure we scan and export first
|
||||||
|
if dev {
|
||||||
|
scan = true
|
||||||
|
export = true
|
||||||
|
}
|
||||||
|
|
||||||
// Execute operations
|
// Execute operations
|
||||||
if scan {
|
if scan {
|
||||||
console.print_header('Scanning collections...')
|
console.print_header('Scanning collections...')
|
||||||
@@ -172,12 +191,13 @@ fn cmd_atlas_execute(cmd Command) ! {
|
|||||||
console.print_item('Include processing: ${include}')
|
console.print_item('Include processing: ${include}')
|
||||||
console.print_item('Redis metadata: ${redis}')
|
console.print_item('Redis metadata: ${redis}')
|
||||||
|
|
||||||
|
// Export even if there are errors - we want to export what we can
|
||||||
a.export(
|
a.export(
|
||||||
destination: destination
|
destination: destination
|
||||||
reset: reset
|
reset: reset
|
||||||
include: include
|
include: include
|
||||||
redis: redis
|
redis: redis
|
||||||
)!
|
) or { console.print_item('Export completed with errors: ${err}') }
|
||||||
|
|
||||||
console.print_green('✓ Export complete to ${destination}')
|
console.print_green('✓ Export complete to ${destination}')
|
||||||
|
|
||||||
@@ -188,4 +208,30 @@ fn cmd_atlas_execute(cmd Command) ! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run development server if requested - always run even if there were export errors
|
||||||
|
if dev {
|
||||||
|
if destination == '' {
|
||||||
|
return error('Cannot run dev server: no destination specified. Use -destination flag.')
|
||||||
|
}
|
||||||
|
|
||||||
|
console.print_header('Starting Docusaurus development server')
|
||||||
|
console.print_item('Atlas content exported to: ${destination}')
|
||||||
|
|
||||||
|
// Get the docusaurus site that was configured via heroscript
|
||||||
|
// The heroscript should have been processed by playcmds.run() above
|
||||||
|
mut dsite := docusaurus.dsite_get('') or {
|
||||||
|
console.print_item('Warning: No Docusaurus site configured')
|
||||||
|
console.print_item('Make sure your atlas source directory contains a heroscript file with Docusaurus configuration')
|
||||||
|
return error('Cannot start dev server: ${err}')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run the docusaurus dev server - this will block until Ctrl+C
|
||||||
|
dsite.dev(
|
||||||
|
host: 'localhost'
|
||||||
|
port: 3000
|
||||||
|
open: true
|
||||||
|
watch_changes: false
|
||||||
|
)!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ pub fn (mut c Collection) export(args CollectionExportArgs) ! {
|
|||||||
path: '${dir_meta.path}/${c.name}.json'
|
path: '${dir_meta.path}/${c.name}.json'
|
||||||
create: true
|
create: true
|
||||||
)!
|
)!
|
||||||
json_file.write(meta)!
|
json_file.write(meta)!
|
||||||
|
|
||||||
for _, mut page in c.pages {
|
for _, mut page in c.pages {
|
||||||
content := page.content(include: args.include)!
|
content := page.content(include: args.include)!
|
||||||
@@ -82,8 +82,6 @@ pub fn (mut c Collection) export(args CollectionExportArgs) ! {
|
|||||||
mut redis := context.redis()!
|
mut redis := context.redis()!
|
||||||
redis.hset('atlas:${c.name}', page.name, page.path)!
|
redis.hset('atlas:${c.name}', page.name, page.path)!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Export files
|
// // Export files
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ pub fn play(mut plbook PlayBook) ! {
|
|||||||
|
|
||||||
mut atlases := map[string]&Atlas{}
|
mut atlases := map[string]&Atlas{}
|
||||||
|
|
||||||
mut name := ""
|
mut name := ''
|
||||||
|
|
||||||
// Process scan actions - scan directories for collections
|
// Process scan actions - scan directories for collections
|
||||||
mut scan_actions := plbook.find(filter: 'atlas.scan')!
|
mut scan_actions := plbook.find(filter: 'atlas.scan')!
|
||||||
@@ -52,13 +52,10 @@ pub fn play(mut plbook PlayBook) ! {
|
|||||||
|
|
||||||
mut atlas_instance_post := atlases[name] or {
|
mut atlas_instance_post := atlases[name] or {
|
||||||
return error("Atlas '${name}' not found. Use !!atlas.scan first.")
|
return error("Atlas '${name}' not found. Use !!atlas.scan first.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
atlas_instance_post.init_post()!
|
atlas_instance_post.init_post()!
|
||||||
|
|
||||||
println(atlas_instance_post)
|
|
||||||
|
|
||||||
// Process export actions - export collections to destination
|
// Process export actions - export collections to destination
|
||||||
mut export_actions := plbook.find(filter: 'atlas.export')!
|
mut export_actions := plbook.find(filter: 'atlas.export')!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user