diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..49bac18 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,37 @@ +module.exports = { + "ecmaFeatures": { + "modules": true, + "spread" : true, + "restParams" : true + }, + // "plugins": [ + // "unicorn" + // ], + "env": { + "es6": true, + "node": true, + "mocha": true + }, + "parserOptions": { + "ecmaVersion": 2017, + "sourceType": "module" + }, + "extends": "eslint:recommended", + "rules": { + "indent": [ + "error", + 2 + ], + // "unicorn/no-array-instanceof": "error", + "no-console": 0, + "semi": ["error", "never"], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e61051f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules/ +/coverage/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..02078d5 --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +tests/ +test/ +*.test.js +testing/ +example/ diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..177bfef --- /dev/null +++ b/example/index.js @@ -0,0 +1,28 @@ +import systemd from '../' + +const SERVICE = 'uci.service' +const PATH = 'uci.path' +const DEST = '/opt/light' +const NAME = 'name-device-DE4Y' + ; +(async () => { + + let settings= await systemd.read('./example/'+SERVICE) + .catch(err => {throw err}) + + settings.Service.WorkingDirectory=`${DEST}/${NAME}` + console.log(systemd.stringify(settings)) + + systemd.write(`./example/${NAME}.service`,settings) + + settings= await systemd.read('./example/'+PATH) + .catch(err => {throw err}) + + settings.Path.PathModified=`${DEST}/${NAME}` + console.log(systemd.stringify(settings)) + + systemd.write(`./example/${NAME}.path`,settings) + + + +})().catch((err) => {console.log('fatal error', err)}) diff --git a/example/name-device-DE4Y.path b/example/name-device-DE4Y.path new file mode 100644 index 0000000..7c261f2 --- /dev/null +++ b/example/name-device-DE4Y.path @@ -0,0 +1,8 @@ +[Unit] +Description=Watcher for Restart of Code Changes + +[Path] +PathModified=/opt/light/name-device-DE4Y + +[Install] +WantedBy=default.target diff --git a/example/name-device-DE4Y.service b/example/name-device-DE4Y.service new file mode 100644 index 0000000..41526fd --- /dev/null +++ b/example/name-device-DE4Y.service @@ -0,0 +1,11 @@ +[Unit] +Description=I2C Bus +After=network-online.target + +[Service] +WorkingDirectory=/opt/light/name-device-DE4Y +ExecStart=/usr/bin/node -r esm index.js +Restart=on-failure + +[Install] +WantedBy=default.target diff --git a/example/uci.path b/example/uci.path new file mode 100644 index 0000000..1913da5 --- /dev/null +++ b/example/uci.path @@ -0,0 +1,6 @@ +[Unit] +Description=Watcher for Restart of Code Changes +[Path] +PathModified=/opt/light/busRelays-i2cbus-X1D3 +[Install] +WantedBy=default.target diff --git a/example/uci.service b/example/uci.service new file mode 100644 index 0000000..34c7861 --- /dev/null +++ b/example/uci.service @@ -0,0 +1,11 @@ +[Unit] +Description=I2C Bus +After=network-online.target + +[Service] +WorkingDirectory=/opt/light/busRelays-i2cbus-X1D3 +ExecStart=/usr/bin/node -r esm index.js +Restart=on-failure + +[Install] +WantedBy=default.target diff --git a/index.js b/index.js new file mode 100644 index 0000000..2150ad2 --- /dev/null +++ b/index.js @@ -0,0 +1,24 @@ +import { promisify } from 'util' +import { readFile as readF, writeFile as writeF } from 'fs' +const readFile = promisify(readF) +const writeFile = promisify(writeF) +import { stringify as toToml } from '@iarna/toml' +import parse from 'xdg-parse' + +async function read (file) { + return readFile(file).then( buf => { + try { return parse(buf.toString()) } + catch(error) { return error } + })} + +function stringify(obj) { + try { return toToml(obj).replace(/["]/gi,'').replace(/\ = /gi,'=') } + catch(error) { return error } +} + +async function write(file,obj) { + return writeFile(file,stringify(obj)) +} + +export default { read, write, stringify, parse } +export {read, write, stringify, parse } diff --git a/package.json b/package.json new file mode 100644 index 0000000..7731523 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "@uci-utils/systemd", + "version": "0.1.1", + "description": "", + "main": "index.js", + "scripts": { + "example": "node -r esm ./example || true", + "dev": "./node_modules/.bin/nodemon -r esm ./example || true" + }, + "settings": "https://www.freedesktop.org/software/systemd/man/systemd.service.html", + "docs": "https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files", + "author": "", + "license": "ISC", + "dependencies": { + "@iarna/toml": "^2.2.3", + "xdg-parse": "0.0.2" + }, + "devDependencies": { + "esm": "^3.2.6", + "nodemon": "^1.18.10" + } +}