shadowfacts.net/lib/util.ts

54 lines
1.3 KiB
TypeScript
Raw Normal View History

2019-01-04 18:14:53 +00:00
import { promises as fs } from "fs";
import path from "path";
import hljs from "highlight.js";
2019-01-05 02:59:52 +00:00
import ejs from "ejs";
import formatDate from "date-fns/format";
2019-01-04 18:14:53 +00:00
export async function write(filePath: string, data: any) {
const dest = path.join("out", filePath);
await fs.mkdir(path.dirname(dest), {
recursive: true
});
await fs.writeFile(dest, data);
}
export function highlight(source: string, language?: string): string {
const res = language ? hljs.highlight(language, source) : hljs.highlightAuto(source);
const highlighted = res.value;
return `<pre class="hljs"><code>${highlighted}</code></pre>`;
}
interface Chunk<T> {
chunk: T[];
index: number;
}
export function chunk<T>(array: T[], size: number): Chunk<T>[] {
const chunks: Chunk<T>[] = [];
for (let i = 0; i < array.length; i += size) {
chunks.push({
chunk: array.slice(i, i + size),
index: i / size
});
}
return chunks;
}
export function fancyLink(text: string, href: string, meta?: string): string {
return `
<a href="${href}" class="fancy-link" ${meta || ""}>
<span aria-hidden="true">{</span>
${text}
<span aria-hidden="true">}</span>
</a>`;
2019-01-05 02:59:52 +00:00
}
export function render(template: string, data: any, filename?: string): string {
data.fancyLink = fancyLink;
data.formatDate = formatDate;
return ejs.render(template, data, {
filename
});
2019-01-04 18:14:53 +00:00
}