UNPKG

@uiw-admin/plugins

Version:
180 lines (179 loc) 7.24 kB
"use strict"; 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;