UNPKG

unbag

Version:

一个专门用来开发npm工具的包

132 lines 3.35 kB
import { watch as fsWatch } from "chokidar"; import debounce from "debounce-promise"; import { useLog } from "./../../utils/log.mjs"; import { useMessage } from "./../../utils/message/index.mjs"; import { useFs } from "./../../utils/fs.mjs"; import { useTransformEntry, useTransformTempDir } from "./utils.mjs"; import { useTransformActionHelper } from "./action/index.mjs"; import { Command } from "./../../core/command.mjs"; var TransformTaskOutFileType = /* @__PURE__ */(TransformTaskOutFileType2 => { TransformTaskOutFileType2["Transformed"] = "Transformed"; TransformTaskOutFileType2["Copy"] = "Copy"; TransformTaskOutFileType2["Ignored"] = "Ignored"; return TransformTaskOutFileType2; })(TransformTaskOutFileType || {}); const TransformConfigDefault = { entry: "./src", watch: false, sourcemap: false, ignores: { ".DS_Store": true }, actions: {}, action: async ({ finalUserConfig }) => { const message = useMessage({ locale: finalUserConfig.locale }); throw new Error(message.transform.action.empty()); }, match: async ({ filePath, finalUserConfig }) => { const { transform: { ignores } } = finalUserConfig; const ignoresExtnames = Object.entries(ignores).filter(([, ignore]) => ignore).map(([extname]) => extname); const needIgnore = ignoresExtnames.some(extName => filePath.content.endsWith(extName)); if (needIgnore) { return false; } return true; } }; const innerTransform = async params => { const { finalUserConfig } = params; const log = useLog({ finalUserConfig }); const fs = useFs(); const message = useMessage({ locale: finalUserConfig.locale }); log.info(message.transform.starting()); const { transform: transform2 } = finalUserConfig; const { action } = transform2; const transformTempDir = useTransformTempDir({ finalUserConfig }); const actionHelper = useTransformActionHelper({ finalUserConfig }); await fs.emptyDir(transformTempDir.content); await action({ helper: actionHelper, finalUserConfig }); log.info(message.transform.end()); }; const watch = async params => { const { finalUserConfig } = params; const entryDir = useTransformEntry({ finalUserConfig }); const log = useLog({ finalUserConfig }); const message = useMessage({ locale: finalUserConfig.locale }); const watcher = fsWatch(entryDir.content); const debouncedTransform = debounce(async () => { await innerTransform({ finalUserConfig }); }, 100); await debouncedTransform(); watcher.on("all", async (type, file) => { log.info(message.transform.watch.fileChanged({ type, filePath: file })); await debouncedTransform(); }); log.info(message.transform.watch.enabled()); }; const transform = async params => { const { finalUserConfig } = params; if (finalUserConfig.transform.watch) { await watch({ finalUserConfig }); } else { return await innerTransform({ finalUserConfig }); } }; class TransformCommand extends Command { async task() { const { finalUserConfig } = this; await transform({ finalUserConfig }); } } export { TransformCommand, TransformConfigDefault, TransformTaskOutFileType, transform, watch };