UNPKG

react-middleware

Version:

Connect middleware for serving React components from a standard folder structure.

106 lines (89 loc) 3.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.closestModulePath = undefined; var _ramda = require('ramda'); var _ramda2 = _interopRequireDefault(_ramda); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _path = require('path'); var _path2 = _interopRequireDefault(_path); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Walks up the folder hierarchy looking for the closest module. * @param {String} moduleDir: The path to the module directory * (ie. the parent of node_modules). * @param {String} moduleName: The name of the module you are looking for. * * @return {String}. */ var closestModulePath = exports.closestModulePath = function closestModulePath(moduleDir, moduleName) { var dir = _path2.default.join(moduleDir, 'node_modules', moduleName); if (_fsExtra2.default.existsSync(dir)) { return dir; } // Not found, walk up the folder-hierarhcy. var parent = _path2.default.resolve(moduleDir, '..'); if (parent !== '/') { return closestModulePath(parent, moduleName); // <== RECURSION. } return undefined; }; var pathsStatus = function pathsStatus(paths) { var result = {}; Object.keys(paths).forEach(function (key) { var path = paths[key]; if (_ramda2.default.is(String, path)) { result[key] = _fsExtra2.default.existsSync(path); } }); return result; }; var pathsExist = function pathsExist(paths) { var values = _ramda2.default.values(pathsStatus(paths)); var existsTotal = _ramda2.default.pipe(_ramda2.default.map(function (exists) { return exists ? 1 : 0; }), _ramda2.default.sum)(values); if (existsTotal === values.length) { return true; } if (existsTotal === 0) { return false; } return 'partial'; }; var createFoldersSync = function createFoldersSync(paths) { Object.keys(paths).forEach(function (key) { var path = paths[key]; if (_ramda2.default.is(String, path)) { _fsExtra2.default.ensureDirSync(path); } }); paths.exist = pathsExist(paths); }; exports.default = function () { var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; // Prepare folder paths. var baseDir = options.base || './'; baseDir = baseDir.startsWith('.') ? _path2.default.resolve(baseDir) : baseDir; var folder = function folder(param, defaultPath) { return options[param] || _path2.default.join(baseDir, defaultPath); }; var paths = { base: baseDir, css: folder('css', '/css'), public: folder('public', '/public'), layouts: folder('layouts', '/views/layouts'), components: folder('components', '/views/components'), pages: folder('pages', '/views/pages'), scripts: folder('scripts', '/scripts'), createSync: function createSync() { createFoldersSync(paths); } }; paths.exist = pathsExist(paths); // Finish up. return paths; }; //# sourceMappingURL=paths.js.map