unbag
Version:
一个专门用来开发npm工具的包
132 lines • 3.35 kB
JavaScript
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 };