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