연합의 공통어를 타입으로 말할 수 있어요. Note나 Follow를 평범한 객체로 조립하면 올바른 JSON-LD가 되어 바다를 건너요. 철자를 틀리면 빌드가 알려주고, 에디터의 자동완성이 규격서를 대신해요.
게다가 이 경전은 손으로 쓴 게 아니에요. 한 낱말에 한 장씩 있는 YAML에서 코드 생성으로 옮겨 써요 — 사경이 비유가 아니라 실제 빌드 공정으로 있는 거죠. 사전에는 toot:이나 misskey: 같은 현실 사투리까지 전부 실려 있어요. 연합의 말은 살아 있는 말이에요.
볼거리
- 경전 원본은 packages/vocab/src/*.yaml이에요. name/uri/extends/defaultContext/properties를 선언하고, vocab-tools의 schema.yaml이 검사해요
- 사경 책상은 codegen.ts예요 — mkdir 잠금과 mtime 신선도 확인이 붙어 있어서, 바뀌지 않았으면 다시 굽지 않아요
- 생성기의 부품은 class.ts/codec.ts/constructor.ts/property.ts예요. 클래스도, encoder/decoder도, clone도, inspector도, 모두 만들어진 결과물이죠
- 실행 시점의 받침대는 다른 꾸러미 @fedify/vocab-runtime이에요(jsonld를 함께 넣어요)
경문 한 구절
export default async function generateVocab(
schemaDir: string,
generatedPath: string,
): Promise<void> {
const types = await loadSchemaFiles(schemaDir);
const encoder = new TextEncoder();
const file = await open(generatedPath, "w");
const writer = file.createWriteStream();
for await (const code of generateClasses(types)) {
writer.write(encoder.encode(code));
} 만져 보기
내 한마디가 바다를 건널 때의 실제 모습이에요(Create + Note). 노랗게 빛나는 곳이 방금 바뀐 자리예요.