@aniyajs/plugin-tooltik
Version:
基于redux-tooltik封装的状态管理插件服务于aniyajs自动化脚手架
65 lines (57 loc) • 1.6 kB
JavaScript
export default (api) => {
api.describe({
key: "toolTik",
config: {
default: true,
},
});
if (api.configition.toolTik) {
api.generate(async (args) => {
const { pluginTempPath, ...paths } = args;
const globalModelPath = api.join(paths.appPath, "src/models");
let modelNames = [];
const specifyFiles = await api.readFilterdir({
rootPath: paths.appSrc,
filterHandle: (file) => {
return (
(file.startsWith(globalModelPath) &&
file.replace(globalModelPath).split(/[\\/]/).length === 2) ||
file.endsWith("model.ts") ||
file.endsWith("model.js")
);
},
});
const exports = specifyFiles.map((modelFile, i) => {
const modelName = `Demo${i}`;
modelNames.push(modelName);
return `import ${modelName} from "${modelFile.replace(
/\\/g,
"\\\\"
)}";`;
});
const content = `
${exports.join("\n")}
export default {
${modelNames.join(",\n")}
}
`;
api.writeFile({
file: api.resolve(pluginTempPath, "exports.ts"),
content,
});
api.copyTpl(
api.join(
paths.appNodeModules,
"@aniyajs/plugin-tooltik/templates/redux.ts.tpl"
),
api.resolve(pluginTempPath, "redux.ts"),
{
reducerMapImports: modelNames.join(",\n"),
reducerMappings: modelNames
.map((item) => `[${item}.name]: createSlice(${item}).reducer`)
.join(",\n"),
}
);
});
}
};