beesbuild
Version:
构建工具链
89 lines (88 loc) • 3.06 kB
JavaScript
import path from "path";
import glob from "fast-glob";
import { consola, pathExtra } from "@beesbuild/utils";
import { isString, sortBy } from "lodash-unified";
import { defu } from "defu";
import { BUILD_CACHE_DIR, EXCLUDE_FILES } from "../variables.mjs";
const FILE_EXT = ["js", "ts", "mjs", "cjs", "jsx", "vue"];
const handleBuildFiles = (ctx, options) => {
var _a;
let prefix = typeof (options == null ? void 0 : options.filePrefix) === "string" ? options == null ? void 0 : options.filePrefix : "src/";
if (!prefix.endsWith("/")) {
prefix = path.join(prefix, "/");
}
let fileExt = [...FILE_EXT];
if (isString(options == null ? void 0 : options.ext)) {
fileExt.push(...options.ext.split(","));
fileExt = fileExt.filter((value) => isString(value) && Boolean(value.trim()));
}
const rootDir = ctx.options.rootDir;
const ext = fileExt.length > 0 ? `.{${fileExt.join(",")}}` : "";
const source = [`${pathExtra.join(prefix)}/**/*${ext}`].concat(EXCLUDE_FILES);
if (fileExt.length > 0) source.push(`index${ext}`);
((_a = ctx.argv) == null ? void 0 : _a.debug) && consola.info(source, "source");
const files = sortBy(
glob.sync(source, {
cwd: ctx.options.rootDir,
absolute: true,
onlyFiles: true
}).filter(Boolean),
(dir) => dir.split("/").length
);
const entryFiles = fileExt.map((ext2) => `index.${ext2}`).concat(fileExt.map((ext2) => path.join("src", `index.${ext2}`))).map((str) => path.resolve(rootDir, ".", str));
const fIndex = files.findIndex((dir) => entryFiles.includes(dir));
if (fIndex > -1) {
const entryFile = files[fIndex];
files.splice(fIndex, 1, {
input: entryFile,
isEntry: true
});
}
return files;
};
function handleTypeOption(ctx) {
const rootDir = ctx.options.rootDir;
const output = {
path: path.resolve(rootDir, "types"),
name: "types"
};
const tsconfigPath = path.resolve(rootDir, "tsconfig.json");
const typesCacheDir = path.resolve(rootDir, ".", BUILD_CACHE_DIR, output.name);
const entries = ctx.options.entries;
const entryFile = entries.find(({ isEntry }) => isEntry);
const entryFilepath = (entryFile == null ? void 0 : entryFile.input) && path.resolve(rootDir, ".", entryFile.input);
let outRootDir = path.resolve(rootDir, "src");
const noSrcFiles = entries.find(({ input }) => !input.startsWith(outRootDir));
if (noSrcFiles) outRootDir = path.join(rootDir);
const isVue = false;
const compilerOptions = defu({
emitDeclarationOnly: true,
preserveSymlinks: true,
skipLibCheck: true,
noImplicitAny: false,
verbatimModuleSyntax: true,
forceConsistentCasingInFileNames: true,
disableSizeLimit: true,
maxNodeModuleJsDepth: 100,
rootDir,
// rootDir: outRootDir,
declarationDir: typesCacheDir
});
return {
isVue,
outRootDir,
typesCacheDir,
entryFilepath,
compilerOptions,
tsconfigPath,
tsConfigFilePath: tsconfigPath,
rootDir,
entries,
output
};
}
export {
FILE_EXT,
handleBuildFiles,
handleTypeOption
};