UNPKG

@miyagi/core

Version:

miyagi is a component development tool for JavaScript template engines.

134 lines (115 loc) 2.64 kB
/** * Module for registering static files * @module initStatic */ import path from "path"; import express from "express"; import config from "../default-config.js"; /** * @returns {void} */ function registerUserAssetFolder() { const { assets } = global.config; if (assets && assets.folder) { for (const folder of assets.folder) { global.app.use( path.join("/", folder), express.static(path.join(assets.root, folder)), ); } } } /** * @returns {void} */ function registerThemeFavicon() { if (global.config.ui && global.config.ui.theme) { const file = global.config.ui.theme.favicon; if (file) { global.app.use(`/favicon.ico`, express.static(path.resolve(file))); } } } /** * @returns {void} */ function registerThemeLogo() { const files = [ global.config.ui.theme.logo.light, global.config.ui.theme.logo.dark, ]; files.forEach((file) => { if (file) { global.app.use( path.join("/", path.dirname(file)), express.static(path.resolve(path.dirname(file))), ); } }); } /** * @param {("css"|"js")} files - the type of user assets that should be registered */ function registerUserFiles(files) { const { assets } = global.config; if (assets) { for (const file of assets[files]) { const asset = files === "js" ? file.src : file; if (asset.startsWith("https://")) continue; global.app.use( path.join("/", path.dirname(asset)), express.static(path.join(assets.root, path.dirname(asset))), ); } } } /** * @returns {void} */ function registerCustomPropertyFiles() { const { assets } = global.config; if (assets?.customProperties?.files) { for (const file of assets.customProperties.files) { global.app.use( path.join("/", path.dirname(file)), express.static(path.dirname(file)), ); } } } /** * @returns {void} */ function registerAssetFolder() { const assetFolder = config.folders.assets[ process.env.MIYAGI_DEVELOPMENT ? "development" : "production" ]; global.app.use( `/${config.projectName}`, express.static(path.join(import.meta.dirname, `../../${assetFolder}`)), ); } /** * @returns {void} */ function registerUserComponentAssets() { if (!global.config.components.folder) return; global.app.use( path.join("/", global.config.components.folder), express.static(global.config.components.folder), ); } /** * @returns {void} */ export default function initStatic() { registerThemeFavicon(); registerThemeLogo(); registerUserAssetFolder(); registerUserComponentAssets(); registerUserFiles("css"); registerUserFiles("js"); registerCustomPropertyFiles(); registerAssetFolder(); }