All them tests
This commit is contained in:
parent
1f207fd7c8
commit
1c3eb39403
0
package-lock.json
generated
Executable file → Normal file
0
package-lock.json
generated
Executable file → Normal file
0
package.json
Executable file → Normal file
0
package.json
Executable file → Normal file
0
scripts/run-tests
Executable file → Normal file
0
scripts/run-tests
Executable file → Normal file
0
src/Lexer.mjs
Executable file → Normal file
0
src/Lexer.mjs
Executable file → Normal file
0
src/Parser.mjs
Executable file → Normal file
0
src/Parser.mjs
Executable file → Normal file
0
src/ast-to-data.mjs
Executable file → Normal file
0
src/ast-to-data.mjs
Executable file → Normal file
17
src/ast-to-string.mjs
Executable file → Normal file
17
src/ast-to-string.mjs
Executable file → Normal file
|
@ -1,16 +1,19 @@
|
||||||
function nodeToString(node) {
|
function nodeToString(node) {
|
||||||
switch (node.type) {
|
switch (node.type) {
|
||||||
case "unitFile":
|
case "unitFile":
|
||||||
return `${(node.comments || []).map(nodeToString).join('\n')}
|
return [
|
||||||
${(node.sections || []).map(nodeToString).join('\n')}`;
|
(node.comments || []).map(nodeToString).join('\n'),
|
||||||
|
(node.sections || []).map(nodeToString).join('\n\n'),
|
||||||
|
]
|
||||||
|
.filter(n => n !== '')
|
||||||
|
.join('\n');
|
||||||
case "comment":
|
case "comment":
|
||||||
return `# ${comment.value}`;
|
return `# ${node.value}`;
|
||||||
case "section":
|
case "section":
|
||||||
const titleComment = ` ${node.titleComment ? nodeToString(node.titleComment) : ''}`;
|
const titleComment = node.titleComment ? ' ' + nodeToString(node.titleComment) : '';
|
||||||
return `[${node.title}]${titleComment}
|
return `[${node.title}]${titleComment}\n${(node.body || []).map(nodeToString).join('\n')}`;
|
||||||
${(node.body || []).map(nodeToString).join('\n')}`;
|
|
||||||
case "setting":
|
case "setting":
|
||||||
const comment = ` ${node.comment ? nodeToString(node.comment) : ''}`;
|
const comment = node.comment ? ' ' + nodeToString(node.comment) : '';
|
||||||
return `${node.name}=${node.value}${comment}`;
|
return `${node.name}=${node.value}${comment}`;
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unrecognized node type: ${node.type}`);
|
throw new Error(`Unrecognized node type: ${node.type}`);
|
||||||
|
|
0
src/data-to-ast.mjs
Executable file → Normal file
0
src/data-to-ast.mjs
Executable file → Normal file
0
src/data-to-string.mjs
Executable file → Normal file
0
src/data-to-string.mjs
Executable file → Normal file
0
src/mod.mjs
Executable file → Normal file
0
src/mod.mjs
Executable file → Normal file
32
src/spec/ast-to-data.mjs
Executable file → Normal file
32
src/spec/ast-to-data.mjs
Executable file → Normal file
|
@ -7,7 +7,7 @@ function runTest(input, expectedOutput) {
|
||||||
const resultString = JSON.stringify(result);
|
const resultString = JSON.stringify(result);
|
||||||
if (expectedOutputString !== resultString) {
|
if (expectedOutputString !== resultString) {
|
||||||
console.dir(input, { depth: Infinity });
|
console.dir(input, { depth: Infinity });
|
||||||
throw new Error(`Mismatching result on testcase:
|
throw new Error(`Mismatching result on ast-to-data testcase:
|
||||||
=======Result======
|
=======Result======
|
||||||
|
|
||||||
${resultString}
|
${resultString}
|
||||||
|
@ -21,22 +21,22 @@ ${expectedOutputString}\n\n`);
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const cases = await Promise.all([
|
const cases = await Promise.all([
|
||||||
"./parser/basic.mjs",
|
"./from-primitive/basic.mjs",
|
||||||
"./parser/comments.mjs",
|
"./from-primitive/comments.mjs",
|
||||||
"./parser/comment-only.mjs",
|
"./from-primitive/comment-only.mjs",
|
||||||
"./parser/multiline-value.mjs",
|
"./from-primitive/multiline-value.mjs",
|
||||||
"./parser/weird-characters.mjs",
|
"./from-primitive/weird-characters.mjs",
|
||||||
"./parser/repeated-settings.mjs",
|
"./from-primitive/repeated-settings.mjs",
|
||||||
"./parser/real.nix-daemon.mjs",
|
"./from-primitive/real.nix-daemon.mjs",
|
||||||
"./parser/real.maia-console@.mjs",
|
"./from-primitive/real.maia-console@.mjs",
|
||||||
/*
|
/*
|
||||||
"./parser/real.dbus-org.bluez.mjs",
|
"./from-primitive/real.dbus-org.bluez.mjs",
|
||||||
"./parser/real.display-manager.mjs",
|
"./from-primitive/real.display-manager.mjs",
|
||||||
"./parser/real.systemd-fsck-silent@.mjs",
|
"./from-primitive/real.systemd-fsck-silent@.mjs",
|
||||||
"./parser/real.systemd-fsck-silent-root.mjs",
|
"./from-primitive/real.systemd-fsck-silent-root.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.Avahi.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.Avahi.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.ModemManager1.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.ModemManager1.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
||||||
*/
|
*/
|
||||||
].map(file => import(file)));
|
].map(file => import(file)));
|
||||||
const results = cases.forEach(({ ast, data }) => runTest(ast, data));
|
const results = cases.forEach(({ ast, data }) => runTest(ast, data));
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
export const input = ;
|
|
||||||
export const result = ;
|
|
40
src/spec/ast-to-string.mjs
Executable file → Normal file
40
src/spec/ast-to-string.mjs
Executable file → Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import astToString from "../ast-to-string.mjs";
|
||||||
|
|
||||||
|
function runTest(input, expectedString) {
|
||||||
|
const resultString = astToString(input);
|
||||||
|
|
||||||
|
if (resultString !== expectedString) {
|
||||||
|
throw new Error(`mismatching result on ast-to-string testcase:
|
||||||
|
|
||||||
|
=======result======
|
||||||
|
|
||||||
|
${JSON.stringify(resultString)}
|
||||||
|
|
||||||
|
=======expected======
|
||||||
|
|
||||||
|
${JSON.stringify(expectedString)}
|
||||||
|
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const cases = await Promise.all([
|
||||||
|
"./to-primitive/basic.mjs",
|
||||||
|
"./to-primitive/comments.mjs",
|
||||||
|
"./to-primitive/comment-only.mjs",
|
||||||
|
"./to-primitive/multiline-value.mjs",
|
||||||
|
"./to-primitive/weird-characters.mjs",
|
||||||
|
"./to-primitive/repeated-settings.mjs",
|
||||||
|
"./to-primitive/real.nix-daemon.mjs",
|
||||||
|
"./to-primitive/real.maia-console@.mjs",
|
||||||
|
"./to-primitive/real.dbus-org.bluez.mjs",
|
||||||
|
"./to-primitive/real.display-manager.mjs",
|
||||||
|
"./to-primitive/real.systemd-fsck-silent@.mjs",
|
||||||
|
"./to-primitive/real.systemd-fsck-silent-root.mjs",
|
||||||
|
"./to-primitive/real.dbus-org.freedesktop.Avahi.mjs",
|
||||||
|
"./to-primitive/real.dbus-org.freedesktop.ModemManager1.mjs",
|
||||||
|
"./to-primitive/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
||||||
|
].map(file => import(file)));
|
||||||
|
const results = cases.forEach(({ ast, string }) => runTest(ast, string));
|
||||||
|
})();
|
39
src/spec/data-to-ast.mjs
Executable file → Normal file
39
src/spec/data-to-ast.mjs
Executable file → Normal file
|
@ -1,13 +1,14 @@
|
||||||
import astToData from "../data-to-ast.mjs";
|
import dataToAst from "../data-to-ast.mjs";
|
||||||
|
|
||||||
function runTest(input, expectedOutput) {
|
function runTest(input, expectedOutput) {
|
||||||
const result = astToData(input);
|
const result = dataToAst(input);
|
||||||
|
|
||||||
const expectedOutputString = JSON.stringify(expectedOutput);
|
const expectedOutputString = JSON.stringify(expectedOutput);
|
||||||
const resultString = JSON.stringify(result);
|
const resultString = JSON.stringify(result);
|
||||||
if (expectedOutputString !== resultString) {
|
if (expectedOutputString !== resultString) {
|
||||||
console.dir(input, { depth: Infinity });
|
console.dir(input, { depth: Infinity });
|
||||||
throw new Error(`Mismatching result on testcase:
|
throw new Error(`Mismatching result on data-to-ast testcase:
|
||||||
|
|
||||||
=======Result======
|
=======Result======
|
||||||
|
|
||||||
${resultString}
|
${resultString}
|
||||||
|
@ -21,24 +22,24 @@ ${expectedOutputString}\n\n`);
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const cases = await Promise.all([
|
const cases = await Promise.all([
|
||||||
"./parser/basic.mjs",
|
"./to-primitive/basic.mjs",
|
||||||
"./parser/comments.mjs",
|
// "./to-primitive/comments.mjs",
|
||||||
"./parser/comment-only.mjs",
|
// "./to-primitive/comment-only.mjs",
|
||||||
"./parser/multiline-value.mjs",
|
"./to-primitive/multiline-value.mjs",
|
||||||
"./parser/weird-characters.mjs",
|
"./to-primitive/weird-characters.mjs",
|
||||||
"./parser/repeated-settings.mjs",
|
"./to-primitive/repeated-settings.mjs",
|
||||||
"./parser/real.nix-daemon.mjs",
|
"./to-primitive/real.nix-daemon.mjs",
|
||||||
"./parser/real.maia-console@.mjs",
|
"./to-primitive/real.maia-console@.mjs",
|
||||||
/*
|
/*
|
||||||
"./parser/real.dbus-org.bluez.mjs",
|
"./to-primitive/real.dbus-org.bluez.mjs",
|
||||||
"./parser/real.display-manager.mjs",
|
"./to-primitive/real.display-manager.mjs",
|
||||||
"./parser/real.systemd-fsck-silent@.mjs",
|
"./to-primitive/real.systemd-fsck-silent@.mjs",
|
||||||
"./parser/real.systemd-fsck-silent-root.mjs",
|
"./to-primitive/real.systemd-fsck-silent-root.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.Avahi.mjs",
|
"./to-primitive/real.dbus-org.freedesktop.Avahi.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.ModemManager1.mjs",
|
"./to-primitive/real.dbus-org.freedesktop.ModemManager1.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
"./to-primitive/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
||||||
*/
|
*/
|
||||||
].map(file => import(file)));
|
].map(file => import(file)));
|
||||||
const results = cases.forEach(({ ast, data }) => runTest(ast, data));
|
const results = cases.forEach(({ data, ast }) => runTest(data, ast));
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
0
src/spec/parser/basic.mjs → src/spec/from-primitive/basic.mjs
Executable file → Normal file
0
src/spec/parser/basic.mjs → src/spec/from-primitive/basic.mjs
Executable file → Normal file
0
src/spec/parser/comment-only.mjs → src/spec/from-primitive/comment-only.mjs
Executable file → Normal file
0
src/spec/parser/comment-only.mjs → src/spec/from-primitive/comment-only.mjs
Executable file → Normal file
0
src/spec/parser/comments.mjs → src/spec/from-primitive/comments.mjs
Executable file → Normal file
0
src/spec/parser/comments.mjs → src/spec/from-primitive/comments.mjs
Executable file → Normal file
0
src/spec/parser/multiline-value.mjs → src/spec/from-primitive/multiline-value.mjs
Executable file → Normal file
0
src/spec/parser/multiline-value.mjs → src/spec/from-primitive/multiline-value.mjs
Executable file → Normal file
0
src/spec/parser/real.dbus-org.bluez.mjs → src/spec/from-primitive/real.dbus-org.bluez.mjs
Executable file → Normal file
0
src/spec/parser/real.dbus-org.bluez.mjs → src/spec/from-primitive/real.dbus-org.bluez.mjs
Executable file → Normal file
0
src/spec/parser/real.dbus-org.freedesktop.Avahi.mjs → src/spec/from-primitive/real.dbus-org.freedesktop.Avahi.mjs
Executable file → Normal file
0
src/spec/parser/real.dbus-org.freedesktop.Avahi.mjs → src/spec/from-primitive/real.dbus-org.freedesktop.Avahi.mjs
Executable file → Normal file
0
src/spec/parser/real.display-manager.mjs → src/spec/from-primitive/real.display-manager.mjs
Executable file → Normal file
0
src/spec/parser/real.display-manager.mjs → src/spec/from-primitive/real.display-manager.mjs
Executable file → Normal file
0
src/spec/parser/real.maia-console@.mjs → src/spec/from-primitive/real.maia-console@.mjs
Executable file → Normal file
0
src/spec/parser/real.maia-console@.mjs → src/spec/from-primitive/real.maia-console@.mjs
Executable file → Normal file
0
src/spec/parser/real.nix-daemon.mjs → src/spec/from-primitive/real.nix-daemon.mjs
Executable file → Normal file
0
src/spec/parser/real.nix-daemon.mjs → src/spec/from-primitive/real.nix-daemon.mjs
Executable file → Normal file
0
src/spec/parser/real.systemd-fsck-silent-root.mjs → src/spec/from-primitive/real.systemd-fsck-silent-root.mjs
Executable file → Normal file
0
src/spec/parser/real.systemd-fsck-silent-root.mjs → src/spec/from-primitive/real.systemd-fsck-silent-root.mjs
Executable file → Normal file
0
src/spec/parser/real.systemd-fsck-silent@.mjs → src/spec/from-primitive/real.systemd-fsck-silent@.mjs
Executable file → Normal file
0
src/spec/parser/real.systemd-fsck-silent@.mjs → src/spec/from-primitive/real.systemd-fsck-silent@.mjs
Executable file → Normal file
0
src/spec/parser/repeated-settings.mjs → src/spec/from-primitive/repeated-settings.mjs
Executable file → Normal file
0
src/spec/parser/repeated-settings.mjs → src/spec/from-primitive/repeated-settings.mjs
Executable file → Normal file
0
src/spec/parser/weird-characters.mjs → src/spec/from-primitive/weird-characters.mjs
Executable file → Normal file
0
src/spec/parser/weird-characters.mjs → src/spec/from-primitive/weird-characters.mjs
Executable file → Normal file
32
src/spec/string-to-ast.mjs
Executable file → Normal file
32
src/spec/string-to-ast.mjs
Executable file → Normal file
|
@ -6,7 +6,7 @@ function runTest(input, result) {
|
||||||
const resultString = JSON.stringify(ast, null, 2);
|
const resultString = JSON.stringify(ast, null, 2);
|
||||||
const expectedString = JSON.stringify(result, null, 2);
|
const expectedString = JSON.stringify(result, null, 2);
|
||||||
if (resultString !== expectedString) {
|
if (resultString !== expectedString) {
|
||||||
throw new Error(`mismatching result on testcase:
|
throw new Error(`mismatching result on string-to-ast testcase:
|
||||||
${input}
|
${input}
|
||||||
|
|
||||||
=======result======
|
=======result======
|
||||||
|
@ -23,21 +23,21 @@ ${expectedString}
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const cases = await Promise.all([
|
const cases = await Promise.all([
|
||||||
"./parser/basic.mjs",
|
"./from-primitive/basic.mjs",
|
||||||
"./parser/comments.mjs",
|
"./from-primitive/comments.mjs",
|
||||||
"./parser/comment-only.mjs",
|
"./from-primitive/comment-only.mjs",
|
||||||
"./parser/multiline-value.mjs",
|
"./from-primitive/multiline-value.mjs",
|
||||||
"./parser/weird-characters.mjs",
|
"./from-primitive/weird-characters.mjs",
|
||||||
"./parser/repeated-settings.mjs",
|
"./from-primitive/repeated-settings.mjs",
|
||||||
"./parser/real.nix-daemon.mjs",
|
"./from-primitive/real.nix-daemon.mjs",
|
||||||
"./parser/real.maia-console@.mjs",
|
"./from-primitive/real.maia-console@.mjs",
|
||||||
"./parser/real.dbus-org.bluez.mjs",
|
"./from-primitive/real.dbus-org.bluez.mjs",
|
||||||
"./parser/real.display-manager.mjs",
|
"./from-primitive/real.display-manager.mjs",
|
||||||
"./parser/real.systemd-fsck-silent@.mjs",
|
"./from-primitive/real.systemd-fsck-silent@.mjs",
|
||||||
"./parser/real.systemd-fsck-silent-root.mjs",
|
"./from-primitive/real.systemd-fsck-silent-root.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.Avahi.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.Avahi.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.ModemManager1.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.ModemManager1.mjs",
|
||||||
"./parser/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
"./from-primitive/real.dbus-org.freedesktop.nm-dispatcher.mjs",
|
||||||
].map(file => import(file)));
|
].map(file => import(file)));
|
||||||
const results = cases.forEach(({ string, ast }) => runTest(string, ast));
|
const results = cases.forEach(({ string, ast }) => runTest(string, ast));
|
||||||
})();
|
})();
|
||||||
|
|
8
src/spec/ast-to-data/basic.mjs → src/spec/to-primitive/basic.mjs
Executable file → Normal file
8
src/spec/ast-to-data/basic.mjs → src/spec/to-primitive/basic.mjs
Executable file → Normal file
|
@ -1,11 +1,13 @@
|
||||||
export const input = {
|
export const string = `[Unit]
|
||||||
|
Description=Idle manager for Wayland`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
type: 'unitFile',
|
type: 'unitFile',
|
||||||
comments: [],
|
comments: [],
|
||||||
sections: [
|
sections: [
|
||||||
{
|
{
|
||||||
type: 'section',
|
type: 'section',
|
||||||
title: 'Unit',
|
title: 'Unit',
|
||||||
titleComment: undefined,
|
|
||||||
body: [
|
body: [
|
||||||
{
|
{
|
||||||
type: 'setting',
|
type: 'setting',
|
||||||
|
@ -17,7 +19,7 @@ export const input = {
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
export const output = [
|
export const data = [
|
||||||
{
|
{
|
||||||
title: 'Unit',
|
title: 'Unit',
|
||||||
settings: {
|
settings: {
|
9
src/spec/to-primitive/comment-only.mjs
Normal file
9
src/spec/to-primitive/comment-only.mjs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
export const string = `# Start of file comment`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
type: 'unitFile',
|
||||||
|
comments: [ { type: 'comment', value: 'Start of file comment' } ],
|
||||||
|
sections: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [];
|
65
src/spec/to-primitive/comments.mjs
Normal file
65
src/spec/to-primitive/comments.mjs
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
export const string = `[Unit] # Heading comment
|
||||||
|
Description=Idle manager for Wayland # End of value comment
|
||||||
|
# Inline comment
|
||||||
|
ExecStart=echo\
|
||||||
|
"some string" # End of value comment
|
||||||
|
Alias=asdf # Comment Without spaces
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# Comment only in this body`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
type: 'unitFile',
|
||||||
|
comments: [],
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
title: 'Unit',
|
||||||
|
titleComment: { type: 'comment', value: 'Heading comment' },
|
||||||
|
body: [
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'Description',
|
||||||
|
value: 'Idle manager for Wayland',
|
||||||
|
comment: { type: 'comment', value: 'End of value comment' }
|
||||||
|
},
|
||||||
|
{ type: 'comment', value: 'Inline comment' },
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'ExecStart',
|
||||||
|
value: 'echo "some string"',
|
||||||
|
comment: { type: 'comment', value: 'End of value comment' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'Alias',
|
||||||
|
value: 'asdf',
|
||||||
|
comment: { type: 'comment', value: 'Comment Without spaces' }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
title: 'Install',
|
||||||
|
titleComment: undefined,
|
||||||
|
body: [
|
||||||
|
{ type: 'comment', value: 'Comment only in this body' },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Unit',
|
||||||
|
settings: {
|
||||||
|
Description: 'Idle manager for Wayland',
|
||||||
|
ExecStart: 'echo "some string"',
|
||||||
|
Alias: 'asdf',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Install',
|
||||||
|
settings: {},
|
||||||
|
}
|
||||||
|
];
|
57
src/spec/to-primitive/multiline-value.mjs
Normal file
57
src/spec/to-primitive/multiline-value.mjs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
export const string = `[Service]
|
||||||
|
ExecStart=/usr/bin/swayidle -w \\
|
||||||
|
timeout 600 'swaylock-bg' \\
|
||||||
|
timeout 900 'swaymsg "output * dpms off"' \\
|
||||||
|
resume 'swaymsg "output * dpms on"' \\
|
||||||
|
after-resume 'swaylock-bg'
|
||||||
|
ExecStop=/usr/bin/swayidle -w \\
|
||||||
|
after-resume 'swaylock-bg'
|
||||||
|
ExecPause=/usr/bin/swayidle -w \\
|
||||||
|
after-resume 'swaylock-bg'`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
type: 'unitFile',
|
||||||
|
comments: [],
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
title: 'Service',
|
||||||
|
body: [
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'ExecStart',
|
||||||
|
value: '/usr/bin/swayidle -w \\\n' +
|
||||||
|
" timeout 600 'swaylock-bg' \\\n" +
|
||||||
|
` timeout 900 'swaymsg "output * dpms off"' \\\n` +
|
||||||
|
` resume 'swaymsg "output * dpms on"' \\\n` +
|
||||||
|
" after-resume 'swaylock-bg'",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'ExecStop',
|
||||||
|
value: "/usr/bin/swayidle -w \\\n after-resume 'swaylock-bg'",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'ExecPause',
|
||||||
|
value: "/usr/bin/swayidle -w \\\n after-resume 'swaylock-bg'",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Service',
|
||||||
|
settings: {
|
||||||
|
ExecStart: '/usr/bin/swayidle -w \\\n' +
|
||||||
|
" timeout 600 'swaylock-bg' \\\n" +
|
||||||
|
` timeout 900 'swaymsg "output * dpms off"' \\\n` +
|
||||||
|
` resume 'swaymsg "output * dpms on"' \\\n` +
|
||||||
|
" after-resume 'swaylock-bg'",
|
||||||
|
ExecStop: "/usr/bin/swayidle -w \\\n after-resume 'swaylock-bg'",
|
||||||
|
ExecPause: "/usr/bin/swayidle -w \\\n after-resume 'swaylock-bg'",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
108
src/spec/to-primitive/real.dbus-org.bluez.mjs
Normal file
108
src/spec/to-primitive/real.dbus-org.bluez.mjs
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=Bluetooth service
|
||||||
|
Documentation=man:bluetoothd(8)
|
||||||
|
ConditionPathIsDirectory=/sys/class/bluetooth
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=dbus
|
||||||
|
BusName=org.bluez
|
||||||
|
ExecStart=/usr/lib/bluetooth/bluetoothd
|
||||||
|
NotifyAccess=main
|
||||||
|
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
|
||||||
|
LimitNPROC=1
|
||||||
|
ProtectHome=true
|
||||||
|
ProtectSystem=full
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=bluetooth.target
|
||||||
|
Alias=dbus-org.bluez.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "Bluetooth service"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Documentation",
|
||||||
|
"value": "man:bluetoothd(8)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ConditionPathIsDirectory",
|
||||||
|
"value": "/sys/class/bluetooth"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "dbus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "BusName",
|
||||||
|
"value": "org.bluez"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/lib/bluetooth/bluetoothd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "NotifyAccess",
|
||||||
|
"value": "main"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "CapabilityBoundingSet",
|
||||||
|
"value": "CAP_NET_ADMIN CAP_NET_BIND_SERVICE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "LimitNPROC",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ProtectHome",
|
||||||
|
"value": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ProtectSystem",
|
||||||
|
"value": "full"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "WantedBy",
|
||||||
|
"value": "bluetooth.target"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Alias",
|
||||||
|
"value": "dbus-org.bluez.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
90
src/spec/to-primitive/real.dbus-org.freedesktop.Avahi.mjs
Normal file
90
src/spec/to-primitive/real.dbus-org.freedesktop.Avahi.mjs
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=Avahi mDNS/DNS-SD Stack
|
||||||
|
Requires=avahi-daemon.socket
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=dbus
|
||||||
|
BusName=org.freedesktop.Avahi
|
||||||
|
ExecStart=/usr/bin/avahi-daemon -s
|
||||||
|
ExecReload=/usr/bin/avahi-daemon -r
|
||||||
|
NotifyAccess=main
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
Also=avahi-daemon.socket
|
||||||
|
Alias=dbus-org.freedesktop.Avahi.service`
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "Avahi mDNS/DNS-SD Stack"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Requires",
|
||||||
|
"value": "avahi-daemon.socket"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "dbus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "BusName",
|
||||||
|
"value": "org.freedesktop.Avahi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/bin/avahi-daemon -s"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecReload",
|
||||||
|
"value": "/usr/bin/avahi-daemon -r"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "NotifyAccess",
|
||||||
|
"value": "main"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "WantedBy",
|
||||||
|
"value": "multi-user.target"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Also",
|
||||||
|
"value": "avahi-daemon.socket"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Alias",
|
||||||
|
"value": "dbus-org.freedesktop.Avahi.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
|
@ -0,0 +1,132 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=Modem Manager
|
||||||
|
After=polkit.service
|
||||||
|
Requires=polkit.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=dbus
|
||||||
|
BusName=org.freedesktop.ModemManager1
|
||||||
|
ExecStart=/usr/bin/ModemManager
|
||||||
|
StandardError=null
|
||||||
|
Restart=on-abort
|
||||||
|
CapabilityBoundingSet=CAP_SYS_ADMIN
|
||||||
|
ProtectSystem=true
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
RestrictAddressFamilies=AF_NETLINK AF_UNIX
|
||||||
|
NoNewPrivileges=true
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
Alias=dbus-org.freedesktop.ModemManager1.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "Modem Manager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "After",
|
||||||
|
"value": "polkit.service"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Requires",
|
||||||
|
"value": "polkit.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "dbus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "BusName",
|
||||||
|
"value": "org.freedesktop.ModemManager1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/bin/ModemManager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardError",
|
||||||
|
"value": "null"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Restart",
|
||||||
|
"value": "on-abort"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "CapabilityBoundingSet",
|
||||||
|
"value": "CAP_SYS_ADMIN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ProtectSystem",
|
||||||
|
"value": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ProtectHome",
|
||||||
|
"value": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "PrivateTmp",
|
||||||
|
"value": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "RestrictAddressFamilies",
|
||||||
|
"value": "AF_NETLINK AF_UNIX"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "NoNewPrivileges",
|
||||||
|
"value": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "User",
|
||||||
|
"value": "root"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "WantedBy",
|
||||||
|
"value": "multi-user.target"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Alias",
|
||||||
|
"value": "dbus-org.freedesktop.ModemManager1.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
|
@ -0,0 +1,66 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=Network Manager Script Dispatcher Service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=dbus
|
||||||
|
BusName=org.freedesktop.nm_dispatcher
|
||||||
|
ExecStart=/usr/lib/nm-dispatcher
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
Alias=dbus-org.freedesktop.nm-dispatcher.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "Network Manager Script Dispatcher Service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "dbus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "BusName",
|
||||||
|
"value": "org.freedesktop.nm_dispatcher"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/lib/nm-dispatcher"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "KillMode",
|
||||||
|
"value": "process"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Alias",
|
||||||
|
"value": "dbus-org.freedesktop.nm-dispatcher.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
90
src/spec/to-primitive/real.display-manager.mjs
Normal file
90
src/spec/to-primitive/real.display-manager.mjs
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=TUI display manager
|
||||||
|
After=systemd-user-sessions.service plymouth-quit-wait.service
|
||||||
|
After=getty@tty2.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=idle
|
||||||
|
ExecStart=/usr/bin/ly
|
||||||
|
StandardInput=tty
|
||||||
|
TTYPath=/dev/tty2
|
||||||
|
TTYReset=yes
|
||||||
|
TTYVHangup=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
Alias=display-manager.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "TUI display manager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "After",
|
||||||
|
"value": "systemd-user-sessions.service plymouth-quit-wait.service"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "After",
|
||||||
|
"value": "getty@tty2.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "idle"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/bin/ly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardInput",
|
||||||
|
"value": "tty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TTYPath",
|
||||||
|
"value": "/dev/tty2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TTYReset",
|
||||||
|
"value": "yes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TTYVHangup",
|
||||||
|
"value": "yes"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Alias",
|
||||||
|
"value": "display-manager.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
104
src/spec/to-primitive/real.maia-console@.mjs
Normal file
104
src/spec/to-primitive/real.maia-console@.mjs
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=maia color scheme for the console
|
||||||
|
After=getty@%i.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/bin/maia-console
|
||||||
|
StandardOutput=tty
|
||||||
|
TTYPath=/dev/%i
|
||||||
|
TTYVTDisallocate=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=getty@%i.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "maia color scheme for the console"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "After",
|
||||||
|
"value": "getty@%i.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "oneshot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/bin/maia-console"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardOutput",
|
||||||
|
"value": "tty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TTYPath",
|
||||||
|
"value": "/dev/%i"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TTYVTDisallocate",
|
||||||
|
"value": "yes"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "WantedBy",
|
||||||
|
"value": "getty@%i.service"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Unit',
|
||||||
|
settings: {
|
||||||
|
Description: 'maia color scheme for the console',
|
||||||
|
After: 'getty@%i.service',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Service',
|
||||||
|
settings: {
|
||||||
|
Type: 'oneshot',
|
||||||
|
ExecStart: '/usr/bin/maia-console',
|
||||||
|
StandardOutput: 'tty',
|
||||||
|
TTYPath: '/dev/%i',
|
||||||
|
TTYVTDisallocate: 'yes',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Install',
|
||||||
|
settings: {
|
||||||
|
WantedBy: 'getty@%i.service',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
99
src/spec/to-primitive/real.nix-daemon.mjs
Normal file
99
src/spec/to-primitive/real.nix-daemon.mjs
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=Nix Daemon
|
||||||
|
RequiresMountsFor=/nix/store
|
||||||
|
RequiresMountsFor=/nix/var
|
||||||
|
ConditionPathIsReadWrite=/nix/var/nix/daemon-socket
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=@/nix/store/fwak7l5jjl0py4wldsqjbv7p7rdzql0b-nix-2.3.9/bin/nix-daemon nix-daemon --daemon
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "Nix Daemon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "RequiresMountsFor",
|
||||||
|
"value": "/nix/store"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "RequiresMountsFor",
|
||||||
|
"value": "/nix/var"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ConditionPathIsReadWrite",
|
||||||
|
"value": "/nix/var/nix/daemon-socket"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "@/nix/store/fwak7l5jjl0py4wldsqjbv7p7rdzql0b-nix-2.3.9/bin/nix-daemon nix-daemon --daemon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "KillMode",
|
||||||
|
"value": "process"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Install",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "WantedBy",
|
||||||
|
"value": "multi-user.target"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Unit',
|
||||||
|
settings: {
|
||||||
|
Description: 'Nix Daemon',
|
||||||
|
RequiresMountsFor: [
|
||||||
|
'/nix/store',
|
||||||
|
'/nix/var',
|
||||||
|
],
|
||||||
|
ConditionPathIsReadWrite: '/nix/var/nix/daemon-socket',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Service',
|
||||||
|
settings: {
|
||||||
|
ExecStart: '@/nix/store/fwak7l5jjl0py4wldsqjbv7p7rdzql0b-nix-2.3.9/bin/nix-daemon nix-daemon --daemon',
|
||||||
|
KillMode: 'process',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Install',
|
||||||
|
settings: {
|
||||||
|
WantedBy: 'multi-user.target',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
88
src/spec/to-primitive/real.systemd-fsck-silent-root.mjs
Normal file
88
src/spec/to-primitive/real.systemd-fsck-silent-root.mjs
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=File System Check on Root Device
|
||||||
|
Documentation=man:systemd-fsck-root.service(8)
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=local-fs.target shutdown.target
|
||||||
|
ConditionPathIsReadWrite=!/
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/systemd/systemd-fsck
|
||||||
|
StandardOutput=null
|
||||||
|
StandardError=journal+console
|
||||||
|
TimeoutSec=0`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "File System Check on Root Device"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Documentation",
|
||||||
|
"value": "man:systemd-fsck-root.service(8)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "DefaultDependencies",
|
||||||
|
"value": "no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Before",
|
||||||
|
"value": "local-fs.target shutdown.target"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ConditionPathIsReadWrite",
|
||||||
|
"value": "!/"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "oneshot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "RemainAfterExit",
|
||||||
|
"value": "yes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/lib/systemd/systemd-fsck"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardOutput",
|
||||||
|
"value": "null"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardError",
|
||||||
|
"value": "journal+console"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TimeoutSec",
|
||||||
|
"value": "0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
94
src/spec/to-primitive/real.systemd-fsck-silent@.mjs
Normal file
94
src/spec/to-primitive/real.systemd-fsck-silent@.mjs
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
export const string = `[Unit]
|
||||||
|
Description=File System Check on %f
|
||||||
|
Documentation=man:systemd-fsck@.service(8)
|
||||||
|
DefaultDependencies=no
|
||||||
|
BindsTo=%i.device
|
||||||
|
After=%i.device systemd-fsck-silent-root.service local-fs-pre.target
|
||||||
|
Before=systemd-quotacheck.service shutdown.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/systemd/systemd-fsck
|
||||||
|
StandardOutput=null
|
||||||
|
StandardError=journal+console
|
||||||
|
TimeoutSec=0`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
"type": "unitFile",
|
||||||
|
"comments": [],
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Unit",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Description",
|
||||||
|
"value": "File System Check on %f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Documentation",
|
||||||
|
"value": "man:systemd-fsck@.service(8)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "DefaultDependencies",
|
||||||
|
"value": "no"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "BindsTo",
|
||||||
|
"value": "%i.device"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "After",
|
||||||
|
"value": "%i.device systemd-fsck-silent-root.service local-fs-pre.target"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Before",
|
||||||
|
"value": "systemd-quotacheck.service shutdown.target"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"title": "Service",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "Type",
|
||||||
|
"value": "oneshot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "RemainAfterExit",
|
||||||
|
"value": "yes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "ExecStart",
|
||||||
|
"value": "/usr/lib/systemd/systemd-fsck"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardOutput",
|
||||||
|
"value": "null"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "StandardError",
|
||||||
|
"value": "journal+console"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "setting",
|
||||||
|
"name": "TimeoutSec",
|
||||||
|
"value": "0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
45
src/spec/to-primitive/repeated-settings.mjs
Normal file
45
src/spec/to-primitive/repeated-settings.mjs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
export const string = `[Install]
|
||||||
|
After=something.service
|
||||||
|
After=something-else.service
|
||||||
|
After=something-different.service`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
type: 'unitFile',
|
||||||
|
comments: [],
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
title: 'Install',
|
||||||
|
body: [
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'After',
|
||||||
|
value: 'something.service',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'After',
|
||||||
|
value: 'something-else.service',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'After',
|
||||||
|
value: 'something-different.service',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Install',
|
||||||
|
settings: {
|
||||||
|
After: [
|
||||||
|
'something.service',
|
||||||
|
'something-else.service',
|
||||||
|
'something-different.service',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
29
src/spec/to-primitive/weird-characters.mjs
Normal file
29
src/spec/to-primitive/weird-characters.mjs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
export const string = `[Install]
|
||||||
|
Description=Test description(1) https://something/? \\#`;
|
||||||
|
|
||||||
|
export const ast = {
|
||||||
|
type: 'unitFile',
|
||||||
|
comments: [],
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
type: 'section',
|
||||||
|
title: 'Install',
|
||||||
|
body: [
|
||||||
|
{
|
||||||
|
type: 'setting',
|
||||||
|
name: 'Description',
|
||||||
|
value: 'Test description(1) https://something/? \\#',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const data = [
|
||||||
|
{
|
||||||
|
title: 'Install',
|
||||||
|
settings: {
|
||||||
|
Description: 'Test description(1) https://something/? \\#',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
0
src/string-to-ast.mjs
Executable file → Normal file
0
src/string-to-ast.mjs
Executable file → Normal file
0
src/string-to-data.mjs
Executable file → Normal file
0
src/string-to-data.mjs
Executable file → Normal file
0
src/visitor-creator.mjs
Executable file → Normal file
0
src/visitor-creator.mjs
Executable file → Normal file
Loading…
Reference in a new issue