UNPKG

@ali-i18n-fe/dada-component

Version:
82 lines (64 loc) 2.31 kB
const path = require("path"); const glob = require("glob"); const loaderUtils = require("loader-utils"); const currentPath = process.cwd(); function buildPublicPath(context, previewFile) { const options = loaderUtils.getOptions(context) || {}; const compiler = context._compiler; let publicPath = options.publicPath || (compiler ? compiler.options.output.publicPath : ""); publicPath = publicPath ? publicPath.replace(/(.+)\/$/, "$1/") : publicPath; const relativeFilename = publicPath + previewFile .replace(path.resolve(process.cwd()), "") .replace(/\\/g, "/") .replace(/^\/src\//, "") .replace(/^\/dist\/docs\//, "") .replace(/(.+\/)?docs\.tsx$/, "$1index.js") .replace(/(.+)/, "docs/$1"); return relativeFilename; } function getPreviewPathByFilePath(context, filePath) { const srcPic = path.resolve(filePath, "..", "preview.png"); return buildPublicPath(context, srcPic).replace(/stories\//, ""); } function getStoryPathByFilePath(context, filePath) { const storyPath = path.resolve(filePath, "..", "index.html"); return buildPublicPath(context, storyPath).replace(/stories\//, ""); } function getPreviewFiles() { const rootPath = process.cwd(); return glob.sync("**/preview.png", { cwd: path.resolve(rootPath, "src"), }); } function getRouteByPath(docsPath) { return `docs/${docsPath.replace(/docs\.tsx$/, "index")}`.replace(/\/$/, ""); } function getDocsEntries() { const rootPath = process.cwd(); const docsFiles = glob.sync("**/docs.tsx", { cwd: path.resolve(rootPath, "src"), }); const docsEntry = docsFiles.reduce((prev, docsFile) => { const entryKey = getRouteByPath(docsFile); return Object.assign(prev, { [entryKey]: path.resolve(rootPath, "src", docsFile), }); }, {}); // library component need a base file const isSingleComponent = Object.keys(docsEntry).length === 1 && Object.keys(docsEntry).includes("docs/index"); const isLibraryComponent = !isSingleComponent; return { docsFiles, docsEntry, isLibraryComponent }; } module.exports = { getPreviewPathByFilePath, getPreviewFiles, buildPublicPath, getRouteByPath, getDocsEntries, getStoryPathByFilePath, };