react-middleware
Version:
Connect middleware for serving React components from a standard folder structure.
106 lines (89 loc) • 3.04 kB
JavaScript
;
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