UNPKG

p3x-systemd-manager

Version:

⌚ SystemD Manager, watchdog, notifier and service

97 lines (86 loc) 2.37 kB
require('corifeus-utils'); const process = require('process'); const fs = require('fs'); const path = require('path'); const dirname = path.dirname(process.argv[1]); const basename = path.basename(process.argv[1]); const getSettings = (cli = basename, settingsFile = 'settings.json') => { let settings; const defaultFile = `${dirname}/${settingsFile}`; if (fs.existsSync(defaultFile)) { settings = require(defaultFile); } else if (process.argv.length < 3) { console.log(` Please use an argument for the settings. For example: ${cli} ${settingsFile} `); return false; } else { settings = require(`${dirname}/{process.argv[2]}`); } return settings; } const simpleFilter = (list, result) => { if (typeof list === 'string') { list = [list]; } let listRegexp = list.map((exclude) => { return new RegExp(exclude, 'i'); }) return isList = (filter) => { if (listRegexp.length === 0) { return result; } for (let oneRegexp of listRegexp) { if (oneRegexp.test(filter)) { return !result; } } return result; } } const filter = (settings) => { if (settings.filter === undefined) { settings.filter = { type: [], exclude: [], include: [] } } let types = settings.filter.type || []; if (typeof types === 'string') { types = [types]; } const isType = (unitId) => { if (types.length === 0) { return true; } for (let type of types) { if (unitId.endsWith(`.${type}`)) { return true; } } return false; } const isExcluded = simpleFilter(settings.filter.exclude || [], false); const isIncluded = simpleFilter(settings.filter.included || [], true); return { isType: isType, isExcluded: isExcluded, isIncluded: isIncluded, isValid: (unitId) => { return isType(unitId) && isIncluded(unitId) && !isExcluded(unitId); } } } /** * Simple clone program * @param obj */ const clone = (obj) => { return JSON.parse(JSON.stringify(obj)); } module.exports.clone = clone; module.exports.filter = filter; module.exports.getSettings = getSettings;