mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-02-14 17:49:53 +00:00
97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
var frontmarker = require('./frontmarker.js');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
var pkgs = module.exports;
|
|
pkgs.create = function (Pkgs, basepath) {
|
|
if (!Pkgs) {
|
|
Pkgs = {};
|
|
}
|
|
if (!basepath) {
|
|
basepath = path.join(__dirname, '../');
|
|
}
|
|
|
|
Pkgs.all = function () {
|
|
return fs.promises.readdir(basepath).then(function (nodes) {
|
|
var items = [];
|
|
return nodes
|
|
.reduce(function (p, node) {
|
|
return p.then(function () {
|
|
return pkgs.get(node).then(function (meta) {
|
|
if (meta && '_' !== node[0]) {
|
|
meta.name = node;
|
|
items.push(meta);
|
|
}
|
|
});
|
|
});
|
|
}, Promise.resolve())
|
|
.then(function () {
|
|
return items;
|
|
});
|
|
});
|
|
};
|
|
|
|
Pkgs.get = function (node) {
|
|
return fs.promises.access(path.join(basepath, node)).then(function () {
|
|
return Pkgs._get(node);
|
|
});
|
|
};
|
|
Pkgs._get = function (node) {
|
|
var curlbash = path.join(basepath, node, 'install.sh');
|
|
var readme = path.join(basepath, node, 'README.md');
|
|
var winstall = path.join(basepath, node, 'install.ps1');
|
|
return Promise.all([
|
|
fs.promises
|
|
.readFile(readme, 'utf-8')
|
|
.then(function (txt) {
|
|
// TODO
|
|
return frontmarker.parse(txt);
|
|
})
|
|
.catch(function (e) {
|
|
if ('ENOENT' !== e.code && 'ENOTDIR' !== e.code) {
|
|
console.error("failed to read '" + node + "/README.md'");
|
|
console.error(e);
|
|
}
|
|
}),
|
|
fs.promises.access(curlbash).catch(function (e) {
|
|
// no *nix installer
|
|
curlbash = '';
|
|
if ('ENOENT' !== e.code && 'ENOTDIR' !== e.code) {
|
|
console.error("failed to parse '" + node + "/install.sh'");
|
|
console.error(e);
|
|
}
|
|
}),
|
|
fs.promises.access(winstall).catch(function (e) {
|
|
// no winstaller
|
|
winstall = '';
|
|
if ('ENOENT' !== e.code && 'ENOTDIR' !== e.code) {
|
|
console.error("failed to read '" + node + "/install.ps1'");
|
|
console.error(e);
|
|
}
|
|
}),
|
|
]).then(function (items) {
|
|
var meta = items[0] || items[1];
|
|
if (!meta) {
|
|
// doesn't exist
|
|
return;
|
|
}
|
|
meta.windows = !!winstall;
|
|
meta.bash = !!curlbash;
|
|
|
|
return meta;
|
|
});
|
|
};
|
|
|
|
return Pkgs;
|
|
};
|
|
pkgs.create(pkgs);
|
|
|
|
if (module === require.main) {
|
|
pkgs.all().then(function (data) {
|
|
console.info('package info:');
|
|
console.info(data);
|
|
});
|
|
}
|