Documentation
¶
Overview ¶
Package wiki는 문서를 위키의 올바른 자리에 만드는 쓰기 계층이다. 커맨드가 아니라 capture, source, promote, new 같은 상위 계층이 부르는 순수 함수 모음이다. 이 패키지는 시계를 읽지 않는다. 날짜는 전부 호출자가 인자로 준다. 결정론이 ADR 0005의 골든 비교 전제다.
Index ¶
- func Create(wikiRoot string, cfg config.Config, stage Stage, date, slug string, ...) (string, error)
- func DirFor(cfg config.Config, stage Stage) (string, error)
- func FilePath(cfg config.Config, stage Stage, date, slug string) (string, error)
- func Frontmatter(stage Stage, cfg config.Config) map[string]any
- func Linkable(wikiRoot string, cfg config.Config) ([]string, error)
- func Slug(title string) (string, error)
- func ValidateSlug(slug string) error
- type Stage
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Create ¶
func Create(wikiRoot string, cfg config.Config, stage Stage, date, slug string, fm map[string]any, body string) (string, error)
Create는 위키 루트 아래 단계에 맞는 자리에 문서를 만들고 만든 파일 경로를 반환한다. 도착지 디렉토리는 config의 page_dirs를 따른다. 기존 파일은 덮어쓰지 않는다. 디렉토리가 없으면 만든다.
func DirFor ¶
DirFor는 단계에 대응하는 디렉토리를 page_dirs에서 찾는다. 대응은 stageDirs 표가 정한다. page_dirs에 없으면 기본값으로 조용히 떨어지지 않고 설정에 무엇을 추가해야 하는지를 알린다.
func FilePath ¶
FilePath는 단계에 맞는 문서의 위키 루트 상대 경로를 만든다. context 문서는 날짜 접두사 없이 <슬러그>.md 이고 inbox와 sources 문서는 <날짜>-<슬러그>.md 다. 날짜는 YYYY-MM-DD 또는 연월까지만 아는 경우 YYYY-MM 이다. upstream 실제 파일명에서 확인한 규칙이다. 도착지 디렉토리는 config의 page_dirs가 진실원이다.
func Frontmatter ¶
Frontmatter는 단계별 프론트매터 초기값을 만든다. config가 켠 속성만 채우고 꺼진 속성의 키는 아예 넣지 않는다. 단계별 기본값은 upstream 계약 meta/frontmatter-schema.md를 따른다. 날짜 필드는 호출자가 넣는다.
func Linkable ¶
Linkable은 위키에서 링크 대상이 될 수 있는 문서의 슬러그를 정렬해 반환한다. 대상은 page_dirs 아래 .md 파일과 root_files이다. promote와 new가 게이트 판정에 쓴다.
func Slug ¶
Slug는 제목에서 파일명으로 쓸 슬러그를 만든다. 공백과 구분자를 하이픈 하나로 바꾸고 연속 하이픈을 줄이며 앞뒤 하이픈을 없앤다. 파일시스템에서 문제가 되는 문자는 지운다. Windows가 tier 1 플랫폼이므로(ADR 0007) 예약 문자와 예약 파일명을 포함한다. 한글은 그대로 보존한다. 이 바이너리에는 LLM이 없으므로(ADR 0014) 기계적 음차나 번역을 하지 않는다. upstream 실제 파일명에 한글이 섞여 있으므로 허용이 계약이다.
만든 결과는 ValidateSlug를 통과한다. 명시 경로가 거절하는 이름을 파생 경로가 만들어내면 같은 규칙이 두 얼굴을 갖게 되므로 마지막에 같은 검사를 받는다.
func ValidateSlug ¶
ValidateSlug는 슬러그를 파일명으로 쓸 수 있는지 검사한다. 사용자가 직접 지정한 슬러그가 주 대상이다(ADR 0045).
파생 경로는 위험한 문자를 지우지만 명시한 값은 조용히 고치지 않고 거절한다. 사용자가 이름을 명시한 것은 그 이름을 원한다는 뜻이므로 도구가 말없이 다른 이름으로 바꾸면 사용자가 기대한 위키링크가 어긋난다.
소문자와 하이픈 정규화는 강제하지 않는다. 대문자, 공백, 한글은 파일을 못 만들게 하지 않으므로 통과시킨다. ADR 0020의 "사용자는 언제든 슬러그를 명시해 파생을 덮어쓸 수 있다"가 사는 자리이며, 덮어쓸 수 있는 것은 취향인 규칙 하나부터 셋까지이고 제약인 규칙 넷은 아니다.
Types ¶
type Stage ¶
type Stage string
Stage는 문서가 놓이는 단계다. 단계에 대응하는 디렉토리는 stageDirs 표가 정한다.
func StageForDir ¶
StageForDir는 최상위 디렉토리 이름에 대응하는 단계를 반환한다. lint의 위치 검사가 이 조회를 써서 단계와 디렉토리의 대응이 두 벌이 되지 않게 한다(ADR 0031). 대응하지 않는 디렉토리면 false를 반환한다.