@uiw-admin/plugins
Version:
180 lines (179 loc) • 7.24 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _utils = require("./../utils");
var _temp = _interopRequireWildcard(require("./temp"));
var _chokidar = _interopRequireDefault(require("chokidar"));
var _utils2 = require("./utils");
/*
* @Description: 简单版本的 自动加载 model
*/
var RematchWebpackPlugin = /*#__PURE__*/function () {
function RematchWebpackPlugin(props) {
var _this = this;
(0, _classCallCheck2["default"])(this, RematchWebpackPlugin);
(0, _defineProperty2["default"])(this, "oldModel", []);
(0, _defineProperty2["default"])(this, "deleteModel", []);
(0, _defineProperty2["default"])(this, "field", '');
(0, _defineProperty2["default"])(this, "src", '');
(0, _defineProperty2["default"])(this, "uiw", '');
(0, _defineProperty2["default"])(this, "lazyLoad", false);
(0, _defineProperty2["default"])(this, "newPath", '');
(0, _defineProperty2["default"])(this, "isTS", true);
// 递归文件
(0, _defineProperty2["default"])(this, "getPathDeep", function (filePath) {
var rematchFiles = new _utils.RematchFiles(filePath);
_this.oldModel = rematchFiles.modelList;
});
// 重新生成
(0, _defineProperty2["default"])(this, "restCreate", function () {
var modelStr = (0, _temp.createModelsTempStr)(_this.oldModel, _this.lazyLoad, _this.isTS);
if (!_fs["default"].existsSync(_this.uiw)) {
_fs["default"].mkdirSync(_this.uiw);
}
// path.resolve(process.cwd(), this.isTS ? 'src/.uiw/routes.tsx' : 'src/.uiw/routes.js'),
// 在项目的 src/.uiw/ 创建 rematch.ts 用于models加载
_fs["default"].writeFileSync(_path["default"].resolve(process.cwd(), _this.isTS ? 'src/.uiw/rematch.ts' : 'src/.uiw/rematch.js'), (0, _temp["default"])(modelStr, _this.isTS), {
flag: 'w+',
encoding: 'utf-8'
});
if (_this.lazyLoad) {
_fs["default"].writeFileSync(_path["default"].resolve(process.cwd(), 'src/.uiw/modelsMap.json'), JSON.stringify(_this.oldModel, function (_, value) {
return value;
}, 2), {
flag: 'w+',
encoding: 'utf-8'
});
}
_this.field = '';
_this.deleteModel = [];
});
// 删除文件的时候
(0, _defineProperty2["default"])(this, "deleteField", function (newPath) {
var newModel = [];
_this.oldModel.forEach(function (item) {
var path = item.path;
var rgx = new RegExp("^".concat(newPath));
if (rgx.test(path) || newPath === path) {
_this.deleteModel.push(path);
} else {
newModel.push(item);
}
});
// 如果是空的不用管了
// 如果存在则直接重新生成
if (_this.deleteModel.length !== 0) {
_this.oldModel = newModel;
_this.restCreate();
}
});
// 文件变更时
(0, _defineProperty2["default"])(this, "existenceField", function (newPath) {
var stats = _fs["default"].statSync(newPath);
if (!stats) {
return;
}
// 文件夹不用动
if (stats.isDirectory()) {
return;
}
// 获取文件信息
var _getModelInfo = (0, _utils2.getModelInfo)(newPath),
isMode = _getModelInfo.isMode,
modelName = _getModelInfo.modelName,
isCreateModel = _getModelInfo.isCreateModel;
var newFile = _this.oldModel.find(function (item) {
return item.path === newPath;
});
if (newFile) {
// 进行判断是否还是 model
if (!isMode) {
_this.deleteModel.push(newPath);
// 过滤出不是 一个 model 文件的项
_this.oldModel = _this.oldModel.filter(function (item) {
return item.path !== newPath;
});
} else {
// 更新内容 重新生成
_this.oldModel = _this.oldModel.map(function (item) {
if (item.path === newPath) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, item), {}, {
name: modelName || item.name,
modelName: modelName
});
}
return (0, _objectSpread2["default"])({}, item);
});
}
} else if (isMode) {
// 判断是不是 model 是则更新
var _getFilenameInfo = (0, _utils.getFilenameInfo)(newPath, _this.src),
srcPath = _getFilenameInfo.srcPath,
location = _getFilenameInfo.location,
pathUrls = _getFilenameInfo.pathUrls,
fileName = _getFilenameInfo.fileName;
_this.oldModel.push({
path: pathUrls,
filename: fileName,
modelName: modelName,
isCreateModel: isCreateModel,
location: location,
name: modelName || fileName,
srcPath: srcPath
});
}
if (isMode || newFile) {
_this.restCreate();
}
});
// 校验文件
(0, _defineProperty2["default"])(this, "checkField", function (newPath) {
// 校验文件是否存在
var iss = _fs["default"].existsSync(newPath);
if (iss) {
//存在
_this.existenceField(newPath);
} else {
// 不存在
_this.deleteField(newPath);
}
});
this.src = _path["default"].resolve(process.cwd(), 'src');
this.uiw = _path["default"].resolve(process.cwd(), 'src/.uiw');
this.isTS = _fs["default"].existsSync(_path["default"].join(process.cwd(), 'tsconfig.json'));
this.lazyLoad = !!(props !== null && props !== void 0 && props.lazyLoad);
this.getPathDeep(this.src);
this.restCreate();
}
(0, _createClass2["default"])(RematchWebpackPlugin, [{
key: "apply",
value: function apply(compiler) {
var _this2 = this;
compiler.hooks.afterPlugins.tap('RematchWebpackPlugin', function () {
if (process.env.NODE_ENV === 'development') {
_chokidar["default"].watch(_path["default"].resolve(process.cwd(), 'src'), {
cwd: _path["default"].resolve(process.cwd(), 'src')
}).on('all', function (event, pathName) {
if (['change', 'add', 'unlink'].includes(event) && /(models\/|models\.(ts|js))/.test(pathName)) {
_this2.checkField(_path["default"].resolve(process.cwd(), 'src', pathName));
}
});
}
});
}
}]);
return RematchWebpackPlugin;
}();
var _default = RematchWebpackPlugin;
exports["default"] = _default;
module.exports = exports.default;