-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtool.mjs
More file actions
27 lines (21 loc) · 859 Bytes
/
Copy pathtool.mjs
File metadata and controls
27 lines (21 loc) · 859 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env zx
const fonts = fs.readFileSync("./fonts", { encoding: "utf-8" })
.replace(/\r/g, "")
.split("\n")
.map(line => line.split(": "))
fs.removeSync("./out")
fs.mkdir("./out")
for (const [key, url] of fonts) {
if (!key || !url) continue;
console.log(`Processing ${chalk.blue(key)}: ${chalk.gray(url)}...`)
let css = await (await fetch(url)).text()
const fontFiles = css.matchAll(/url\((.+?)\)/g)
for (const [,fontFile] of fontFiles) {
const fileName = path.basename(fontFile)
const blob = await (await fetch(fontFile)).blob()
const fileContents = await blob.arrayBuffer().then((arrayBuffer) => Buffer.from(arrayBuffer, "binary"))
fs.writeFileSync(`./out/${fileName}`, fileContents)
css = css.replaceAll(fontFile, `./${fileName}`)
}
fs.writeFileSync(`./out/${key}.css`, css, { encoding: "utf-8" });
}