Skip to content

tangle コマンド

ドキュメントからコードチャンクを抽出して実ファイルへ展開する処理です。

import fs from 'node:fs/promises';
import path from 'node:path';
import { parseChunks } from '@sterashima78/ts-md-core';
import { expandGlobs } from '../utils/globs.ts.md';
export async function runTangle(inputGlobs: string[], outDir = 'dist') {
const files = await expandGlobs(inputGlobs);
await fs.mkdir(outDir, { recursive: true });
for (const file of files) {
const md = await fs.readFile(file, 'utf8');
const dict = parseChunks(md, file);
for (const [chunk, code] of Object.entries(dict)) {
// use <!-- file: path --> 記法を尊重する場合は core 側で返す Path を採用
const rel = path.join(path.basename(file, '.ts.md'), `${chunk}.ts`);
const target = path.join(outDir, rel);
await fs.mkdir(path.dirname(target), { recursive: true });
await fs.writeFile(target, code, 'utf8');
console.log(`✨ wrote ${target}`);
}
}
}

公開インタフェース

export { runTangle } from ':runTangle';