UNPKG

swagger-decorator

Version:
101 lines (76 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.flowToDecorator = undefined; var _regenerator = require("babel-runtime/regenerator"); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator"); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); /** * Description 执行 Babel 转换过程 * @param fileName * @param destFileName * @returns {Promise.<void>} */ var flowToDecorator = exports.flowToDecorator = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(fileName) { var destFileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; var codeStr, out; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return readFileAsync(fileName); case 2: codeStr = _context.sent.toString(); // use our plugin to transform the source out = babel.transform(codeStr, { plugins: ["syntax-flow", "syntax-class-properties", "syntax-decorators", flowToDecoratorPlugin] }); if (destFileName) { fs.writeFileSync(destFileName, out.code); } return _context.abrupt("return", out.code); case 6: case "end": return _context.stop(); } } }, _callee, this); })); return function flowToDecorator(_x) { return _ref.apply(this, arguments); }; }(); exports.flowToDecoratorPlugin = flowToDecoratorPlugin; var _ast = require("../../../internal/babel/ast"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var fs = require("fs"); var _require = require("util"), promisify = _require.promisify; var readFileAsync = promisify(fs.readFile); // (A) var babel = require("babel-core"); function flowToDecoratorPlugin(babel) { var t = babel.types; return { name: "flow-to-decorator-ast-transform", // not required visitor: { Program: function Program(path) { // 添加头部导入库 path.node.body.splice(0, 0, (0, _ast.generateImportDeclaration)("{ entityProperty }", "swagger-decorator")); }, ClassProperty: function ClassProperty(path, state) { // 判断当前是否已经存在注解,如果不存在则动态创建 if (!path.node.decorators) { var typeAndValue = (0, _ast.extractFlowTypeFromClassProperty)(path.node); path.node.decorators = [(0, _ast.generateDecoratorWithObjectParams)("entityProperty", { type: typeAndValue.type, required: typeAndValue.value === "undefined" }, typeAndValue.comment)]; } } } }; }