Allow customizing output path
This commit is contained in:
parent
f55e53ba59
commit
f840c2c648
4 changed files with 24 additions and 24 deletions
|
@ -1,14 +1,13 @@
|
||||||
import gleam/result
|
import gleam/result
|
||||||
import gloss/parser
|
import gloss/parser
|
||||||
import gloss/rendering/database as render_database
|
import gloss/rendering/database as render_database
|
||||||
import gloss/writer
|
|
||||||
import gloss/config.{type Configuration}
|
import gloss/config.{type Configuration}
|
||||||
import gloss/models/database.{type Database}
|
import gloss/models/database.{type Database}
|
||||||
import gloss/compiler.{type CompileDatabase}
|
import gloss/compiler.{type CompileDatabase}
|
||||||
|
|
||||||
pub type BuildError {
|
pub type BuildError {
|
||||||
ParseError(err: parser.ParseError)
|
ParseError(err: parser.ParseError)
|
||||||
WriteError(err: writer.WriteError)
|
WriteError(err: config.WriteError)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(config: Configuration) {
|
pub fn parse(config: Configuration) {
|
||||||
|
@ -25,6 +24,6 @@ pub fn render(db: Database, compiled: CompileDatabase, config: Configuration) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write(posts: render_database.RenderDatabase, config: Configuration) {
|
pub fn write(posts: render_database.RenderDatabase, config: Configuration) {
|
||||||
config.writer(posts, config.paths)
|
config.writer(posts, config)
|
||||||
|> result.map_error(WriteError)
|
|> result.map_error(WriteError)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,16 @@ import gloss/rendering/views.{
|
||||||
}
|
}
|
||||||
import gloss/compiler.{type CompileDatabase, type Compiler}
|
import gloss/compiler.{type CompileDatabase, type Compiler}
|
||||||
import gloss/parser.{type Parser}
|
import gloss/parser.{type Parser}
|
||||||
import gloss/writer.{type Writer}
|
|
||||||
import gloss/models/database.{type Database}
|
import gloss/models/database.{type Database}
|
||||||
import gloss/rendering/database.{type RenderDatabase} as _
|
import gloss/rendering/database.{type RenderDatabase} as _
|
||||||
|
|
||||||
|
pub type WriteError {
|
||||||
|
WriteError(err: String)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type Writer =
|
||||||
|
fn(RenderDatabase, Configuration) -> Result(Nil, WriteError)
|
||||||
|
|
||||||
pub type Views {
|
pub type Views {
|
||||||
Views(
|
Views(
|
||||||
base: fn(Database, Configuration) -> BaseView,
|
base: fn(Database, Configuration) -> BaseView,
|
||||||
|
@ -54,5 +60,6 @@ pub type Configuration {
|
||||||
paths: PathConfiguration,
|
paths: PathConfiguration,
|
||||||
parser: Parser,
|
parser: Parser,
|
||||||
writer: Writer,
|
writer: Writer,
|
||||||
|
output_path: String,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,5 +47,6 @@ pub fn default_config(
|
||||||
paths: paths.defaults,
|
paths: paths.defaults,
|
||||||
parser: parser.default_parse,
|
parser: parser.default_parse,
|
||||||
writer: writer.write,
|
writer: writer.write,
|
||||||
|
output_path: "./output",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +1,27 @@
|
||||||
import gleam/list
|
import gleam/list
|
||||||
import gleam/dict
|
import gleam/dict
|
||||||
import gleam/result
|
import gleam/result
|
||||||
|
import gleam/string
|
||||||
import lustre/ssg
|
import lustre/ssg
|
||||||
import lustre/ssg/xml
|
import lustre/ssg/xml
|
||||||
import lustre/element
|
import lustre/element
|
||||||
import gloss/rendering/database.{type RenderDatabase} as _
|
import gloss/rendering/database.{type RenderDatabase} as _
|
||||||
import gloss/models/post.{type Post}
|
import gloss/models/post.{type Post}
|
||||||
import gloss/paths/post.{type PostPath} as _
|
import gloss/paths/post.{type PostPath} as _
|
||||||
import gloss/paths.{type PathConfiguration}
|
import gloss/config.{type Configuration, WriteError}
|
||||||
|
|
||||||
const default_output = "./output"
|
|
||||||
|
|
||||||
pub type PostPathGenerator =
|
pub type PostPathGenerator =
|
||||||
fn(Post) -> PostPath
|
fn(Post) -> PostPath
|
||||||
|
|
||||||
pub type Writer =
|
pub fn write(db: RenderDatabase, config: Configuration) {
|
||||||
fn(RenderDatabase, PathConfiguration) -> Result(Nil, WriteError)
|
|
||||||
|
|
||||||
pub type WriteError {
|
|
||||||
WriteError(err: ssg.BuildError)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
|
||||||
let site =
|
let site =
|
||||||
ssg.new(default_output)
|
ssg.new(config.output_path)
|
||||||
|> ssg.add_static_dir("./build/dev/javascript/gloss/priv/assets")
|
|> ssg.add_static_dir("./build/dev/javascript/gloss/priv/assets")
|
||||||
|
|
||||||
let single_posts =
|
let single_posts =
|
||||||
db.single_posts
|
db.single_posts
|
||||||
|> list.map(fn(post) {
|
|> list.map(fn(post) {
|
||||||
let path = path_conf.single_post(post.orig)
|
let path = config.paths.single_post(post.orig)
|
||||||
#(path, post.content)
|
#(path, post.content)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -39,14 +31,14 @@ pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
||||||
|
|
||||||
let site =
|
let site =
|
||||||
list.fold(rest, site, fn(acc, page) {
|
list.fold(rest, site, fn(acc, page) {
|
||||||
let path = path_conf.list_page(path_conf.index, page.page)
|
let path = config.paths.list_page(config.paths.index, page.page)
|
||||||
ssg.add_static_route(acc, path, page.content)
|
ssg.add_static_route(acc, path, page.content)
|
||||||
})
|
})
|
||||||
|
|
||||||
let site =
|
let site =
|
||||||
dict.fold(db.tag_pages, site, fn(acc, tag, posts) {
|
dict.fold(db.tag_pages, site, fn(acc, tag, posts) {
|
||||||
list.fold(posts, acc, fn(acc2, page) {
|
list.fold(posts, acc, fn(acc2, page) {
|
||||||
let path = path_conf.list_page(path_conf.tag(tag), page.page)
|
let path = config.paths.list_page(config.paths.tag(tag), page.page)
|
||||||
ssg.add_static_route(acc2, path, page.content)
|
ssg.add_static_route(acc2, path, page.content)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -54,7 +46,7 @@ pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
||||||
let site =
|
let site =
|
||||||
dict.fold(db.year_pages, site, fn(acc, year, posts) {
|
dict.fold(db.year_pages, site, fn(acc, year, posts) {
|
||||||
list.fold(posts, acc, fn(acc2, page) {
|
list.fold(posts, acc, fn(acc2, page) {
|
||||||
let path = path_conf.list_page(path_conf.year(year), page.page)
|
let path = config.paths.list_page(config.paths.year(year), page.page)
|
||||||
ssg.add_static_route(acc2, path, page.content)
|
ssg.add_static_route(acc2, path, page.content)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -63,7 +55,8 @@ pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
||||||
dict.fold(db.month_pages, site, fn(acc, year_month, posts) {
|
dict.fold(db.month_pages, site, fn(acc, year_month, posts) {
|
||||||
let #(year, month) = year_month
|
let #(year, month) = year_month
|
||||||
list.fold(posts, acc, fn(acc2, page) {
|
list.fold(posts, acc, fn(acc2, page) {
|
||||||
let path = path_conf.list_page(path_conf.month(year, month), page.page)
|
let path =
|
||||||
|
config.paths.list_page(config.paths.month(year, month), page.page)
|
||||||
ssg.add_static_route(acc2, path, page.content)
|
ssg.add_static_route(acc2, path, page.content)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -71,7 +64,7 @@ pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
||||||
let site =
|
let site =
|
||||||
ssg.add_static_asset(
|
ssg.add_static_asset(
|
||||||
site,
|
site,
|
||||||
path_conf.feed_file,
|
config.paths.feed_file,
|
||||||
element.to_string(xml.declaration()) <> element.to_string(db.feed),
|
element.to_string(xml.declaration()) <> element.to_string(db.feed),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -83,10 +76,10 @@ pub fn write(db: RenderDatabase, path_conf: PathConfiguration) {
|
||||||
|
|
||||||
let site =
|
let site =
|
||||||
list.fold(db.pages, site, fn(acc, page) {
|
list.fold(db.pages, site, fn(acc, page) {
|
||||||
ssg.add_static_route(acc, path_conf.page(page.page), page.content)
|
ssg.add_static_route(acc, config.paths.page(page.page), page.content)
|
||||||
})
|
})
|
||||||
|
|
||||||
site
|
site
|
||||||
|> ssg.build()
|
|> ssg.build()
|
||||||
|> result.map_error(WriteError)
|
|> result.map_error(fn(err) { WriteError(string.inspect(err)) })
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue