datocms-client
Version:
For new DatoCMS users, we recommend @datocms/cma-client-node
122 lines (95 loc) • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = detectSsg;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _jsYaml = _interopRequireDefault(require("js-yaml"));
var _toml = _interopRequireDefault(require("@iarna/toml"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function fileExists(filePath) {
try {
_fs["default"].accessSync(filePath);
return true;
} catch (e) {
return false;
}
}
function detectRubyGenerator(dir) {
var rubyGenerators = ['middleman', 'jekyll', 'nanoc'];
var gemfilePath = _path["default"].join(dir, 'Gemfile');
if (!fileExists(gemfilePath)) {
return undefined;
}
var gemfile = _fs["default"].readFileSync(gemfilePath, 'utf8');
return rubyGenerators.find(function (gen) {
return gemfile.match("('".concat(gen, "'|\"").concat(gen, "\")"));
});
}
function detectNodeGenerator(dir) {
var nodeGenerators = ['brunch', 'assemble', 'ember-cli', 'hexo', 'metalsmith', 'react-scripts', 'roots', 'docpad', 'wintersmith', 'gatsby', 'harp', 'grunt', 'gulp'];
var pkgPath = _path["default"].join(dir, 'package.json');
if (!fileExists(pkgPath)) {
return undefined;
}
try {
var pkg = JSON.parse(_fs["default"].readFileSync(pkgPath, 'utf8'));
var deps = pkg.dependencies || {};
var devDeps = pkg.devDependencies || {};
var allDeps = Object.assign(deps, devDeps);
return nodeGenerators.find(function (gen) {
return gen in allDeps;
});
} catch (err) {
if (err instanceof SyntaxError) {
return undefined;
}
throw err;
}
}
function detectPythonGenerator(dir) {
var pythonGenerators = ['mkdocs', 'pelican', 'cactus'];
var requirementsPath = _path["default"].join(dir, 'requirements.txt');
if (!fileExists(requirementsPath)) {
return undefined;
}
var requirements = _fs["default"].readFileSync(requirementsPath, 'utf8');
return pythonGenerators.find(function (gen) {
return requirements.match("^".concat(gen, "(==)?"));
});
}
function detectHugo(dir) {
var configs = [{
file: 'config.toml',
loader: function loader(content) {
return _toml["default"].parse(content);
}
}, {
file: 'config.yaml',
loader: function loader(content) {
return _jsYaml["default"].safeLoad(content);
}
}, {
file: 'config.json',
loader: function loader(content) {
return JSON.parse(content);
}
}];
var isHugo = configs.find(function (option) {
var configPath = _path["default"].join(dir, option.file);
if (!fileExists(configPath)) {
return false;
}
try {
var config = option.loader(_fs["default"].readFileSync(configPath, 'utf8'));
return 'baseurl' in config;
} catch (e) {
return false;
}
});
return isHugo && 'hugo';
}
function detectSsg(dir) {
return detectRubyGenerator(dir) || detectNodeGenerator(dir) || detectPythonGenerator(dir) || detectHugo(dir) || 'unknown';
}