From 87ead3be17d3e831cc630f63fc7eeee37c33f2f9 Mon Sep 17 00:00:00 2001 From: liquidev Date: Sun, 21 Jul 2024 10:21:00 +0200 Subject: [PATCH] moving some things around; fixed import maps not being deterministic --- Cargo.lock | 2 ++ crates/treehouse/Cargo.toml | 1 + crates/treehouse/src/cli.rs | 2 -- crates/treehouse/src/cli/fix.rs | 8 ++++---- crates/treehouse/src/cli/wc.rs | 2 +- crates/treehouse/src/config.rs | 12 +++++++++--- crates/treehouse/src/{cli => }/generate.rs | 7 +++++-- crates/treehouse/src/import_map.rs | 9 ++++++--- crates/treehouse/src/main.rs | 4 +++- crates/treehouse/src/{cli => }/parse.rs | 0 template/_tree.hbs | 3 ++- template/components/_tree.hbs | 2 -- treehouse.toml | 2 +- 13 files changed, 34 insertions(+), 20 deletions(-) rename crates/treehouse/src/{cli => }/generate.rs (98%) rename crates/treehouse/src/{cli => }/parse.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 3351f6d..bce8d45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -787,6 +787,7 @@ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown", + "serde", ] [[package]] @@ -1542,6 +1543,7 @@ dependencies = [ "handlebars", "http-body", "image", + "indexmap", "log", "pulldown-cmark", "rand", diff --git a/crates/treehouse/Cargo.toml b/crates/treehouse/Cargo.toml index feba157..3c84738 100644 --- a/crates/treehouse/Cargo.toml +++ b/crates/treehouse/Cargo.toml @@ -17,6 +17,7 @@ env_logger = "0.10.0" handlebars = "4.3.7" http-body = "1.0.0" image = "0.24.8" +indexmap = { version = "2.2.6", features = ["serde"] } log = { workspace = true } pulldown-cmark = { version = "0.9.3", default-features = false } rand = "0.8.5" diff --git a/crates/treehouse/src/cli.rs b/crates/treehouse/src/cli.rs index 9cf0937..5c8bacf 100644 --- a/crates/treehouse/src/cli.rs +++ b/crates/treehouse/src/cli.rs @@ -1,6 +1,4 @@ pub mod fix; -pub mod generate; -mod parse; pub mod serve; pub mod wc; diff --git a/crates/treehouse/src/cli/fix.rs b/crates/treehouse/src/cli/fix.rs index 1e48753..caebbaf 100644 --- a/crates/treehouse/src/cli/fix.rs +++ b/crates/treehouse/src/cli/fix.rs @@ -4,13 +4,13 @@ use anyhow::Context; use treehouse_format::ast::Branch; use walkdir::WalkDir; -use crate::state::{FileId, Source, Treehouse}; - -use super::{ +use crate::{ parse::{self, parse_toml_with_diagnostics, parse_tree_with_diagnostics}, - FixAllArgs, FixArgs, Paths, + state::{FileId, Source, Treehouse}, }; +use super::{FixAllArgs, FixArgs, Paths}; + struct Fix { range: Range, replacement: String, diff --git a/crates/treehouse/src/cli/wc.rs b/crates/treehouse/src/cli/wc.rs index bd9e2cc..3814e4c 100644 --- a/crates/treehouse/src/cli/wc.rs +++ b/crates/treehouse/src/cli/wc.rs @@ -5,7 +5,7 @@ use treehouse_format::ast::{Branch, Roots}; use walkdir::WalkDir; use crate::{ - cli::parse::parse_tree_with_diagnostics, + parse::parse_tree_with_diagnostics, state::{Source, Treehouse}, }; diff --git a/crates/treehouse/src/config.rs b/crates/treehouse/src/config.rs index 2b54211..89206c0 100644 --- a/crates/treehouse/src/config.rs +++ b/crates/treehouse/src/config.rs @@ -2,7 +2,7 @@ use std::{collections::HashMap, ffi::OsStr, fs::File, io::BufReader, path::Path} use anyhow::Context; use image::ImageError; -use log::{debug, error, warn}; +use log::{debug, warn}; use serde::{Deserialize, Serialize}; use walkdir::WalkDir; @@ -48,8 +48,8 @@ pub struct Config { /// ``` pub redirects: Redirects, - /// JavaScript configuration. - pub javascript: JavaScript, + /// How the treehouse should be built. + pub build: Build, /// Overrides for emoji filenames. Useful for setting up aliases. /// @@ -78,6 +78,12 @@ pub struct Redirects { pub page: HashMap, } +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Build { + /// Configuration for how JavaScript is compiled. + pub javascript: JavaScript, +} + #[derive(Debug, Clone, Deserialize, Serialize)] pub struct JavaScript { /// Import roots to generate in the project's import map. diff --git a/crates/treehouse/src/cli/generate.rs b/crates/treehouse/src/generate.rs similarity index 98% rename from crates/treehouse/src/cli/generate.rs rename to crates/treehouse/src/generate.rs index 4ad56cf..ff0bb3d 100644 --- a/crates/treehouse/src/cli/generate.rs +++ b/crates/treehouse/src/generate.rs @@ -17,7 +17,6 @@ use serde::Serialize; use walkdir::WalkDir; use crate::{ - cli::parse::parse_tree_with_diagnostics, config::{Config, ConfigDerivedData}, fun::seasons::Season, html::{ @@ -27,6 +26,7 @@ use crate::{ }, import_map::ImportMap, include_static::IncludeStatic, + parse::parse_tree_with_diagnostics, state::Source, static_urls::StaticUrls, tree::SemaRoots, @@ -41,6 +41,8 @@ struct Generator { tree_files: Vec, } +struct Build {} + struct ParsedTree { tree_path: String, file_id: FileId, @@ -421,7 +423,8 @@ pub fn generate(paths: &Paths<'_>) -> anyhow::Result<(Config, Treehouse)> { )?; info!("generating import map"); - let import_map = ImportMap::generate(config.site.clone(), &config.javascript.import_roots); + let import_map = + ImportMap::generate(config.site.clone(), &config.build.javascript.import_roots); std::fs::write( paths.target_dir.join("static/generated/import-map.json"), serde_json::to_string_pretty(&import_map).context("could not serialize import map")?, diff --git a/crates/treehouse/src/import_map.rs b/crates/treehouse/src/import_map.rs index 6fd38e6..27389fb 100644 --- a/crates/treehouse/src/import_map.rs +++ b/crates/treehouse/src/import_map.rs @@ -1,5 +1,6 @@ -use std::{collections::HashMap, ffi::OsStr, path::PathBuf}; +use std::{ffi::OsStr, path::PathBuf}; +use indexmap::IndexMap; use log::warn; use serde::{Deserialize, Serialize}; use walkdir::WalkDir; @@ -8,7 +9,7 @@ use crate::static_urls::StaticUrls; #[derive(Debug, Clone, Serialize)] pub struct ImportMap { - pub imports: HashMap, + pub imports: IndexMap, } #[derive(Debug, Clone, Deserialize, Serialize)] @@ -20,7 +21,7 @@ pub struct ImportRoot { impl ImportMap { pub fn generate(base_url: String, import_roots: &[ImportRoot]) -> Self { let mut import_map = ImportMap { - imports: HashMap::new(), + imports: IndexMap::new(), }; for root in import_roots { @@ -59,6 +60,8 @@ impl ImportMap { } } + import_map.imports.sort_unstable_keys(); + import_map } } diff --git a/crates/treehouse/src/main.rs b/crates/treehouse/src/main.rs index 7d057b4..aeaff03 100644 --- a/crates/treehouse/src/main.rs +++ b/crates/treehouse/src/main.rs @@ -3,19 +3,21 @@ use std::path::Path; use clap::Parser; use cli::{ fix::{fix_all_cli, fix_file_cli}, - generate::regenerate_or_report_error, serve::serve, wc::wc_cli, Command, Paths, ProgramArgs, }; +use generate::regenerate_or_report_error; use log::{error, info, warn}; mod cli; mod config; mod fun; +mod generate; mod html; mod import_map; mod include_static; +mod parse; mod paths; mod state; mod static_urls; diff --git a/crates/treehouse/src/cli/parse.rs b/crates/treehouse/src/parse.rs similarity index 100% rename from crates/treehouse/src/cli/parse.rs rename to crates/treehouse/src/parse.rs diff --git a/template/_tree.hbs b/template/_tree.hbs index 3d51a62..d848e7e 100644 --- a/template/_tree.hbs +++ b/template/_tree.hbs @@ -19,10 +19,11 @@ {{> components/_noscript.hbs }} {{!-- - NOTE: ~ because components/_tree.hbss must not include any extra indentation, because it may + NOTE: ~ because components/_tree.hbs must not include any extra indentation, because it may contain pre elements which shouldn't be indented. --}} {{~> components/_tree.hbs }} + {{!-- For all pages except the one linked from the footer, include the footer icon. --}} {{#if (ne page.tree_path "treehouse")}} diff --git a/template/components/_tree.hbs b/template/components/_tree.hbs index a4c4725..cf3379d 100644 --- a/template/components/_tree.hbs +++ b/template/components/_tree.hbs @@ -16,5 +16,3 @@ {{{ page.tree }}} - - diff --git a/treehouse.toml b/treehouse.toml index 701ee9c..c4fe16a 100644 --- a/treehouse.toml +++ b/treehouse.toml @@ -47,7 +47,7 @@ description = "a place on the Internet I like to call home" [pics] -[javascript] +[build.javascript] import_roots = [ { name = "treehouse", path = "static/js" }, { name = "tairu", path = "static/js/components/tairu" },