|
| 1 | +/** |
| 2 | + * Copyright (c) Facebook, Inc. and its affiliates. |
| 3 | + */ |
| 4 | + |
| 5 | +import { exec } from 'child_process'; |
| 6 | +import { mkdir, promises as fsPromises } from 'fs'; |
| 7 | +import { dirname } from 'path'; |
| 8 | +import { promisify } from 'util'; |
| 9 | + |
| 10 | +const execAsync = promisify(exec); |
| 11 | + |
| 12 | +// Taken from Downloads on https://www.facebook.com/brand/meta/typography/. |
| 13 | +// To refresh the list, go to the Conf website's public/fonts/ folder and run this: |
| 14 | +// printf "\n[\n%s\n]\n" "$(find . -type f ! -path "*/.*" -name "*.woff2" | sed 's|^./||' | sort | awk '{printf " \"%s\",\n", $0}' | sed '$s/,$//')" |
| 15 | +const paths = [ |
| 16 | + "Optimistic_Display_W_Bd.woff2", |
| 17 | + "Optimistic_Display_W_BdIt.woff2", |
| 18 | + "Optimistic_Display_W_Lt.woff2", |
| 19 | + "Optimistic_Display_W_Md.woff2", |
| 20 | + "Optimistic_Display_W_MdIt.woff2", |
| 21 | + "Optimistic_Display_W_SBd.woff2", |
| 22 | + "Optimistic_Display_W_SBdIt.woff2", |
| 23 | + "Optimistic_Display_W_XBd.woff2", |
| 24 | + "Optimistic_Display_W_XLt.woff2", |
| 25 | + "Optimistic_Text_W_Bd.woff2", |
| 26 | + "Optimistic_Text_W_BdIt.woff2", |
| 27 | + "Optimistic_Text_W_It.woff2", |
| 28 | + "Optimistic_Text_W_Md.woff2", |
| 29 | + "Optimistic_Text_W_MdIt.woff2", |
| 30 | + "Optimistic_Text_W_Rg.woff2", |
| 31 | + "Optimistic_Text_W_XBd.woff2", |
| 32 | + "Optimistic_Text_W_XBdIt.woff2", |
| 33 | + "arabic/Optimistic_Display_Arbc_W_Bd.woff2", |
| 34 | + "arabic/Optimistic_Display_Arbc_W_Md.woff2", |
| 35 | + "arabic/Optimistic_Display_Arbc_W_SBd.woff2", |
| 36 | + "arabic/Optimistic_Text_Arbc_W_Bd.woff2", |
| 37 | + "arabic/Optimistic_Text_Arbc_W_Md.woff2", |
| 38 | + "arabic/Optimistic_Text_Arbc_W_Rg.woff2", |
| 39 | + "arabic/Optimistic_Text_Arbc_W_XBd.woff2", |
| 40 | + "cyrillic/Optimistic_Display_Cyrl_W_Bd.woff2", |
| 41 | + "cyrillic/Optimistic_Display_Cyrl_W_Md.woff2", |
| 42 | + "cyrillic/Optimistic_Display_Cyrl_W_SBd.woff2", |
| 43 | + "cyrillic/Optimistic_Text_Cyrl_W_Bd.woff2", |
| 44 | + "cyrillic/Optimistic_Text_Cyrl_W_Md.woff2", |
| 45 | + "cyrillic/Optimistic_Text_Cyrl_W_Rg.woff2", |
| 46 | + "cyrillic/Optimistic_Text_Cyrl_W_XBd.woff2", |
| 47 | + "devanagari/Optimistic_Text_Deva_W_Bd.woff2", |
| 48 | + "devanagari/Optimistic_Text_Deva_W_Md.woff2", |
| 49 | + "devanagari/Optimistic_Text_Deva_W_Rg.woff2", |
| 50 | + "devanagari/Optimistic_Text_Deva_W_XBd.woff2", |
| 51 | + "vietnamese/Optimistic_Display_Viet_W_Bd.woff2", |
| 52 | + "vietnamese/Optimistic_Display_Viet_W_Md.woff2", |
| 53 | + "vietnamese/Optimistic_Display_Viet_W_SBd.woff2", |
| 54 | + "vietnamese/Optimistic_Text_Viet_W_Bd.woff2", |
| 55 | + "vietnamese/Optimistic_Text_Viet_W_Md.woff2", |
| 56 | + "vietnamese/Optimistic_Text_Viet_W_Rg.woff2", |
| 57 | + "vietnamese/Optimistic_Text_Viet_W_XBd.woff2" |
| 58 | +]; |
| 59 | + |
| 60 | +const baseURL = "https://conf.reactjs.org/fonts/"; |
| 61 | +const outputDir = "public/fonts/"; |
| 62 | + |
| 63 | +await Promise.all( |
| 64 | + paths.map(async (path) => { |
| 65 | + const localPath = `${outputDir}${path}`; |
| 66 | + const localDir = dirname(localPath); |
| 67 | + await fsPromises.mkdir(localDir, { recursive: true }); |
| 68 | + |
| 69 | + const command = `curl ${baseURL}${path} --output ${localPath}`; |
| 70 | + await execAsync(command); |
| 71 | + console.log(`Downloaded ${path}`); |
| 72 | + }) |
| 73 | +); |
| 74 | + |
| 75 | +console.log("All fonts downloaded."); |
0 commit comments