UNPKG

paranormal

Version:
166 lines (120 loc) 5.51 kB
'use strict'; exports.__esModule = true; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _constants = require('./utils/constants'); var constants = _interopRequireWildcard(_constants); var _fs = require('./utils/fs'); var fs = _interopRequireWildcard(_fs); var _stripIndent = require('strip-indent'); var _stripIndent2 = _interopRequireDefault(_stripIndent); var _resolveFrom = require('resolve-from'); var _resolveFrom2 = _interopRequireDefault(_resolveFrom); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function basename(filePath) { return _path2.default.basename(filePath, _path2.default.extname(filePath)); } var Example = function () { function Example(opts) { (0, _classCallCheck3.default)(this, Example); this.filePath = opts.filePath; this.relativePath = _path2.default.relative(opts.cwd, this.filePath); this.relativePathOut = this.relativePath.split(_path2.default.sep).map(function (part) { return part.replace(constants.EXAMPLE_PATH_PART_NUMBER, '$2'); }).join(_path2.default.sep); this.dirName = _path2.default.dirname(this.relativePath); this.dirNameOut = _path2.default.dirname(this.relativePathOut); this.baseName = basename(this.relativePath); this.baseNameOut = basename(this.relativePathOut); this.tempDir = _path2.default.join(opts.tempDir, this.dirNameOut); this.htmlPath = _path2.default.join(this.tempDir, this.baseNameOut + '.html'); this.txtPath = _path2.default.join(this.tempDir, this.baseNameOut + '.txt'); this.jsPath = _path2.default.join(this.tempDir, this.baseNameOut + '.js'); var currentDirName = _path2.default.basename(opts.cwd); var exampleDirName = this.dirNameOut.replace(_path2.default.sep, '/'); this.title = `${currentDirName}/${exampleDirName}/${this.baseNameOut}`; var reactImport = (0, _resolveFrom2.default)(this.filePath, 'react'); var reactDomImport = (0, _resolveFrom2.default)(this.filePath, 'react-dom'); var relativeJsImport = _path2.default.relative(this.jsPath, this.filePath); var relativeReactImport = _path2.default.relative(this.jsPath, reactImport); var relativeReactDomImport = _path2.default.relative(this.jsPath, reactDomImport); this.htmlContent = (0, _stripIndent2.default)(` <!doctype html> <html> <head> <meta charset="utf-8"> <title>${this.title}</title> </head> <body> <div id="root"></div> <script type="text/javascript" src="./${this.baseNameOut}.js"></script> </body> </html> `).trim(); this.jsContent = (0, _stripIndent2.default)(` import React from "${relativeReactImport}"; import { render } from "${relativeReactDomImport}"; import Example from "${relativeJsImport}"; render(React.createElement(Example), document.getElementById("root")); `).trim(); } Example.prototype.build = function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { var fileContents; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return fs.readFile(this.filePath); case 2: fileContents = _context.sent; _context.next = 5; return fs.mkdirp(this.tempDir); case 5: _context.next = 7; return _promise2.default.all([fs.writeFile(this.htmlPath, this.htmlContent), fs.writeFile(this.txtPath, fileContents), fs.writeFile(this.jsPath, this.jsContent)]); case 7: case 'end': return _context.stop(); } } }, _callee, this); })); function build() { return _ref.apply(this, arguments); } return build; }(); Example.prototype.delete = function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return _promise2.default.all([fs.unlink(example.htmlPath), fs.unlink(example.jsPath)]); case 2: case 'end': return _context2.stop(); } } }, _callee2, this); })); function _delete() { return _ref2.apply(this, arguments); } return _delete; }(); return Example; }(); exports.default = Example;