UNPKG

@miyagi/core

Version:

miyagi is a component development tool for JavaScript template engines.

76 lines (65 loc) 1.73 kB
/** * Module for getting a source tree of the project * @module stateSourcetree */ import dirTree from "directory-tree"; import path from "path"; import { t } from "../i18n/index.js"; import log from "../logger.js"; import * as helpers from "../helpers.js"; /** * @returns {object} the source tree object */ export const getSourceTree = function () { const tree = {}; const { files } = global.config; const sources = []; if (global.config.components?.folder) { sources.push({ type: "components", dir: global.config.components.folder, extensions: new RegExp( `.(md|${files.css.extension}|${files.js.extension}|${ files.mocks.extension[0] }|${files.mocks.extension[1]}|${ files.schema.extension }|${helpers.getSingleFileExtension(files.templates.extension)})$`, ), configStr: "components.folder", }); } if (global.config.docs?.folder) { sources.push({ type: "docs", dir: global.config.docs.folder, extensions: /\.md/, configStr: "docs.folder", }); } sources.forEach(({ type, extensions, dir, configStr }) => { if (dir) { const exclude = []; const { ignores = [] } = global.config[type]; for (const ignore of ignores) { const escapedIgnore = ignore.replaceAll(/\\/g, "\\\\"); exclude.push(new RegExp(escapedIgnore.replaceAll(/\./g, "\\."))); } const subTree = dirTree(path.join(process.cwd(), dir), { attributes: ["type"], extensions, exclude, }); if (!subTree) { log( "warn", t("srcFolderNotFound") .replaceAll("{{directory}}", `./${dir}`) .replaceAll("{{type}}", type) .replaceAll("{{config}}", configStr), ); } tree[type] = subTree; } }); return tree || {}; };