Source: librext-font-builder/src/index.js

/**
 * @file LibRext Font Builder
 */
"use strict"

import { join } from 'path'
import { cpSync, copyFileSync } from 'fs';

import { config } from 'librext-core'
import { projectRootDir, fontDir } from './font-builder-util.js'
import libRextFontsData from './data/librext-fonts.json' with { type: 'json' };

/**
 * Font builder scripts
 * @namespace libRextFontBuilder
 */

const defaultOutputDir = join(projectRootDir, config.assetOutDirectory)

/**
 * Builds font files based on config
 * @param {*} uiSpec 
 * @param {*} outputDir 
 * @param {*} config 
 * @returns true if everything succeeded, false if not
 */
const build = (uiSpec, outputDir = defaultOutputDir, config) => {
    const buildSuccess = false
    const targetDir = join(outputDir, 'fonts')

    // config.fonts.forEach((fontKey, idx) => {
    for (const fontRole in config.fonts) {
        const fontKey = config.fonts[fontRole]
        if (!libRextFontsData.availableFonts.includes(fontKey)) {
            // Current fontKey is not in the system. Skip this.
            console.warn(`[Font Builder] Font key "${fontKey}" not recognized.`)
            return
        }
        const fontSourceDir = join(fontDir, fontKey)
        const fontTargetDir = join(targetDir, fontKey)

        const sourceFile = `${fontSourceDir}/librext-font.css`
        // const targetDir = join(outputDir, 'css')
        const targetFile = `${fontTargetDir}/${config.filenamePrefix}-font.css`
        try {
            cpSync(fontSourceDir, fontTargetDir, {
                recursive: true,
                filter: (src, dest) => {
                    return !src.endsWith('.css')
                }
            })
            copyFileSync(sourceFile, targetFile)
        } catch (err) {
            console.error('[Font Builder] Font copying failed!')
            console.error(err)
            return false;
        }
        // })
    }

    return buildSuccess
}

export default build