sqzass.git

sqzass

~ A static site generator written in Rust
git clone https://github.com/debuman/sqzass.git

Cargo.toml (4674B)

      1 [package]
      2 name = "sqzass"
      3 version = "0.1.0"
      4 edition = "2024"
      5 rust-version = "1.97"
      6 license = "MIT"
      7 description = "A static site generator written in Rust"
      8 repository = "https://github.com/sqzer-x/sqzass"
      9 homepage = "https://sqzass.sqzer.com"
     10 readme = "README.md"
     11 keywords = ["static-site-generator", "ssg", "markdown", "blog", "cli"]
     12 categories = ["command-line-utilities", "web-programming"]
     13 
     14 [lib]
     15 name = "sqzass"
     16 path = "src/lib.rs"
     17 
     18 [[bin]]
     19 name = "sqzass"
     20 path = "src/main.rs"
     21 
     22 [dependencies]
     23 # --- M0 ---
     24 anyhow    = "1"
     25 axum = { version = "0.8", features = ["ws"] }
     26 blake3 = "1"
     27 clap      = { version = "4.6", features = ["derive"] }
     28 # ⚠️ comrak의 default = ["cli", "syntect-onig", "bon"] 이다. 그대로 쓰면
     29 #    (1) comrak 자체 CLI 의존성(clap/shell-words/xdg/fmt2io)이 딸려오고
     30 #    (2) syntect가 comrak 경유로 무조건 Oniguruma에 고정된다 — 엔진 선택은
     31 #        아래 [features]의 몫이라(musl 아티팩트는 pure-rust여야 한다) 차단한다.
     32 #    SyntaxHighlighterAdapter / HeadingAdapter 트레이트는 cfg 게이트가 없어 피처 없이도
     33 #    쓸 수 있고, 피처 뒤에 있는 건 comrak 내장 SyntectAdapter뿐인데 그건 우리가 직접
     34 #    구현하므로(업스트림 #330이 재작업 대상으로 지적) 필요 없다.
     35 comrak    = { version = "0.54", default-features = false }
     36 minijinja = "2.21"
     37 notify = "8.2"
     38 notify-debouncer-full = "0.7"
     39 serde     = { version = "1", features = ["derive"] }
     40 serde_json = "1"
     41 # 구문 강조 엔진은 [features]에서 고른다. 여기서는 둘 다 피처를 비워 둔다 —
     42 # syntect의 엔진 피처를 직접 켜면 엔진=fancy + two-face 덤프=onig 같은 어긋남이
     43 # 가능하고, 그 조합은 컴파일은 되지만 일부 정규식에서 조용히 평문으로 강등된다.
     44 syntect = { version = "5.3", default-features = false }
     45 tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal"] }
     46 toml      = "1.1"
     47 tower-http = { version = "0.7", features = ["fs"] }
     48 two-face = { version = "0.5", default-features = false }
     49 walkdir   = "2"
     50 
     51 # --- M1 (아래는 해당 기능 착수할 때 주석 해제) ---
     52 # blake3   = "1"                                    # 에셋 콘텐츠 해시
     53 # axum     = "0.8"                                  # 개발 서버
     54 # tower-http = { version = "0.7", features = ["fs"] }
     55 # tokio    = { version = "1", features = ["rt-multi-thread", "macros"] }
     56 # notify   = "8.2"                                  # 9.0은 6개월째 RC. 8.2 + debouncer 0.7은
     57 # notify-debouncer-full = "0.7"                     #   버전 락 쌍이라 섞지 말 것
     58 
     59 # --- M3 ---
     60 # pagefind 기본 피처 serve가 actix-web + actix-files를 끌고 온다. 반드시 끌 것.
     61 # 그러면 이번엔 pagefind가 선언을 빠뜨린 tokio 피처를 우리가 채워야 한다:
     62 #   위 tokio에 "fs", "io-util" 추가. 없으면 AsyncWriteExt를 못 찾아 컴파일이 깨진다.
     63 # ⚠️ extended 피처는 켜지 않는다. 켜는 건 zh/ja/th 분절뿐인데(jieba + lindera-unidic)
     64 #    바이너리가 +48.6 MB 늘고, 한국어 검색 결과는 켠 빌드와 끈 빌드가 완전히 동일하다.
     65 #    한국어를 형태소로 쪼개는 charabia "korean"은 더 나쁘다 — ko-dic이 외래어를 모르는
     66 #    범용 국어사전이라 `템플릿은`을 `템플/릿/은`으로 뭉개서 recall이 무너진다.
     67 #    2000페이지 한국어 코퍼스 실측: 정답 1018건 → 27건.
     68 # pagefind = { version = "1.5", default-features = false, optional = true }
     69 
     70 [dev-dependencies]
     71 insta = "1"
     72 
     73 [features]
     74 # 구문 강조의 정규식 엔진. 기본은 Oniguruma(C) — fancy 대비 코드 무거운 코퍼스
     75 # 실측 3.0배(1000p 전 블록 고유: 3.9s → 1.3s). musl 정적 아티팩트만 pure-rust로
     76 # 빌드한다(release.yml의 --no-default-features --features pure-rust — C 바인딩이
     77 # 정적 링크를 깨는 지점이 거기라서다). 둘 다 켜지면 syntect·two-face 모두 onig로
     78 # 수렴하므로(syntect regex.rs에 명시된 우선순위) --all-features(AUR)도 안전하다.
     79 # 두 덤프는 같지 않다: fancy 덤프는 문법 7개(PowerShell·JS(Babel)·Salt State·
     80 # ARM Assembly 등)를 통째로 빼서 해당 펜스가 평문 폴백이 되고, js 토큰조차
     81 # 두 빌드가 다른 문법(Babel vs plain JS)으로 해석한다 — installation.md에
     82 # 문서화된 계약이고, 같은 바이너리 안에서는 여전히 결정적이다.
     83 default = ["onig"]
     84 onig = ["syntect/default-onig", "two-face/syntect-onig"]
     85 pure-rust = ["syntect/default-fancy", "two-face/syntect-fancy"]
     86 # search = ["dep:pagefind"]
     87 
     88 [profile.release]
     89 lto = "thin"
     90 codegen-units = 1
     91 strip = true