@ali-i18n-fe/dada-component
Version:
82 lines (64 loc) • 2.31 kB
JavaScript
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,
};