fix(core): update
This commit is contained in:
parent
c4e3f628cd
commit
10562afea1
1
license
1
license
@ -1,4 +1,5 @@
|
||||
Copyright (c) 2019 Lossless GmbH (hello@lossless.com)
|
||||
Copyright (c) 2017-2019, braces lab
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
183
package-lock.json
generated
183
package-lock.json
generated
@ -70,7 +70,6 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz",
|
||||
"integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-256-colors": "^1.1.0"
|
||||
}
|
||||
@ -97,7 +96,6 @@
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-3.0.5.tgz",
|
||||
"integrity": "sha512-pc5Nq0WUysS34qPpyiZXiX254kL3vyRVbt3D36Q5QU+eHhxAThHofSzgOdyVHUZU2WFoaMlKowIVsyUFzIkfdw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartdelay": "^2.0.2",
|
||||
"@pushrocks/smartpromise": "^2.0.5",
|
||||
@ -111,8 +109,7 @@
|
||||
"@pushrocks/smartpromise": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-2.0.5.tgz",
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -143,7 +140,6 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.3.tgz",
|
||||
"integrity": "sha512-TXKDDqsc7sBTLl+oiYNaF6IdNk1n70i8ur8QfwcUU6tegTnrEkvMWy9h5Zdty/fq1ioCNpKLvuXoA+fgYVwKGQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartpromise": "^3.0.2"
|
||||
}
|
||||
@ -152,7 +148,6 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartevent/-/smartevent-2.0.3.tgz",
|
||||
"integrity": "sha512-x4B1mzzE6LrMATXsRLNuZpMTlB2JodL44MA4bF4FucU3SBBiWhFv3CFJRlO9B23SKZ1fwdJQrk2lT7YTUHXXJQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartpromise": "^2.0.5"
|
||||
},
|
||||
@ -160,8 +155,7 @@
|
||||
"@pushrocks/smartpromise": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-2.0.5.tgz",
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -169,7 +163,6 @@
|
||||
"version": "1.0.15",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexit/-/smartexit-1.0.15.tgz",
|
||||
"integrity": "sha512-pvJBmF13spcDN+O8rSpYlKBOObyfW+omZKQr3hhSMT1VHMEYV8e/njsA19Cg4C2DfLPv+cRFFgPn27zJpleRsQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/lik": "^3.0.5",
|
||||
"@pushrocks/smartdelay": "^2.0.3",
|
||||
@ -191,28 +184,64 @@
|
||||
"glob": "^7.1.3",
|
||||
"js-yaml": "^3.13.1",
|
||||
"vinyl-file": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/fs-extra": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2ffs-extra/-/fs-extra-5.1.0.tgz",
|
||||
"integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/fs-extra/-/fs-extra-7.0.1.tgz",
|
||||
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@pushrocks/smartlog": {
|
||||
"version": "2.0.19",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog/-/smartlog-2.0.19.tgz",
|
||||
"integrity": "sha512-I2mDx7WcUlADYWxu5nNP3NSJv95YrCZoG/rarbEqovK7pJQ9a0aINmIcCHkQeL1VSWvxgvhXwHyV/yNEJ4zh3Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartlog-interfaces": "^2.0.5"
|
||||
}
|
||||
},
|
||||
"@pushrocks/smartlog-destination-local": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-destination-local/-/smartlog-destination-local-8.0.2.tgz",
|
||||
"integrity": "sha512-+Ed7WxvBF6yNtsT8cZuxkm+NaeCtCUyjt+UVJD/5zetLGMHJ7r0d9texFP771ss4Yu9as18kTs3ompCrxQw+GQ==",
|
||||
"requires": {
|
||||
"@pushrocks/consolecolor": "^2.0.1",
|
||||
"@pushrocks/smartlog-interfaces": "^2.0.2",
|
||||
"@pushrocks/smartpromise": "^2.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@pushrocks/smartpromise": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-2.0.5.tgz",
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@pushrocks/smartlog-interfaces": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-interfaces/-/smartlog-interfaces-2.0.5.tgz",
|
||||
"integrity": "sha512-eLNlRpDwy3E+6v/B6fo/NiAo+UxBO3SxKgIIsgUGbWfVpsyUi0PG2xfVCdhJlhL1AsRRvKglfHSOB8qKE+XCLw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-eLNlRpDwy3E+6v/B6fo/NiAo+UxBO3SxKgIIsgUGbWfVpsyUi0PG2xfVCdhJlhL1AsRRvKglfHSOB8qKE+XCLw=="
|
||||
},
|
||||
"@pushrocks/smartlog-source-ora": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartlog-source-ora/-/smartlog-source-ora-1.0.8.tgz",
|
||||
"integrity": "sha512-yPFACo/1gHx2o43qYLJ6LB5AUvSFB42abYynySpaIZfQKzdz09eJB/LMbVdOKPObwk7bcma5owyK5lPHicG9Ig==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartlog-interfaces": "^2.0.5",
|
||||
"ora": "^3.4.0"
|
||||
@ -246,8 +275,7 @@
|
||||
"@pushrocks/smartpromise": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.2.tgz",
|
||||
"integrity": "sha512-jmrJMUEmBCWChWK8CIcx4Vw3wv/8OgVNmkaxJrbs+WMaoRUfJtpWWJfrAwwHWt9ZXJbarJ+CwfwfYiiZXymndQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-jmrJMUEmBCWChWK8CIcx4Vw3wv/8OgVNmkaxJrbs+WMaoRUfJtpWWJfrAwwHWt9ZXJbarJ+CwfwfYiiZXymndQ=="
|
||||
},
|
||||
"@pushrocks/smartrequest": {
|
||||
"version": "1.1.16",
|
||||
@ -264,7 +292,6 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrx/-/smartrx-2.0.3.tgz",
|
||||
"integrity": "sha512-OWxagu+CBdPaq76AIg91hJyrNhDTlEpesj01ooWCeVIaLY3G7yvFkqHsEKNOwPUG1LzCWmjq1l1dHQx9p2vJ9A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/lik": "^3.0.2",
|
||||
"@pushrocks/smartevent": "^2.0.3",
|
||||
@ -275,16 +302,14 @@
|
||||
"@pushrocks/smartpromise": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-2.0.5.tgz",
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@pushrocks/smartshell": {
|
||||
"version": "2.0.23",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.23.tgz",
|
||||
"integrity": "sha512-+YXacX/sp4f+iBYm4vAoxrq/c8WCHnFhMaW66l3R08stl0eezW3SytoSlnr6R+JT1xqnBzIItDfCyyRC3uEVnw==",
|
||||
"dev": true,
|
||||
"version": "2.0.25",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.25.tgz",
|
||||
"integrity": "sha512-sYVHOhBRdr+CkjS+o1SDtB5058ZYxTPAYuexx2ydl2g+57KNdEcSRWN/2mOv5+NFH+tvvgtnUjC3AclC9CwJ4A==",
|
||||
"requires": {
|
||||
"@pushrocks/smartdelay": "^2.0.3",
|
||||
"@pushrocks/smartexit": "^1.0.15",
|
||||
@ -297,7 +322,6 @@
|
||||
"version": "3.0.12",
|
||||
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarttime/-/smarttime-3.0.12.tgz",
|
||||
"integrity": "sha512-NoMt1NUhNqcF5y7fCTHoC3d/+MobzgNUg6yHbSGxFRaentQzCrMPNahQIVLbrAStf03LUUBePUjSRdPYucP1gw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@pushrocks/smartpromise": "^3.0.2",
|
||||
"@types/cron": "^1.7.1",
|
||||
@ -346,7 +370,6 @@
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fcron/-/cron-1.7.1.tgz",
|
||||
"integrity": "sha512-48brwgU18DqA0mQX1As5OcJEo1yNjaXMM6Mk4r8K1dOzLJRQ37FE/kCivKx7ClKEHfhX2FdcxKzJ1B744a+V3A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*",
|
||||
"moment": ">=2.14.0"
|
||||
@ -371,10 +394,9 @@
|
||||
}
|
||||
},
|
||||
"@types/fs-extra": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2ffs-extra/-/fs-extra-5.1.0.tgz",
|
||||
"integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==",
|
||||
"dev": true,
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2ffs-extra/-/fs-extra-8.0.0.tgz",
|
||||
"integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
@ -382,20 +404,17 @@
|
||||
"@types/luxon": {
|
||||
"version": "1.15.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fluxon/-/luxon-1.15.1.tgz",
|
||||
"integrity": "sha512-SOGSpxsAoR+pHLev7oFGbQ4mZCmfcmYY2xsv2+/UeEG2rcJA30k5NVux3cW9rgTe2EVtrqFG+KtMs6ERZsTGKA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-SOGSpxsAoR+pHLev7oFGbQ4mZCmfcmYY2xsv2+/UeEG2rcJA30k5NVux3cW9rgTe2EVtrqFG+KtMs6ERZsTGKA=="
|
||||
},
|
||||
"@types/minimatch": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fminimatch/-/minimatch-3.0.3.tgz",
|
||||
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "10.14.9",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-10.14.9.tgz",
|
||||
"integrity": "sha512-NelG/dSahlXYtSoVPErrp06tYFrvzj8XLWmKA+X8x0W//4MqbUyZu++giUG/v0bjAT6/Qxa8IjodrfdACyb0Fg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-NelG/dSahlXYtSoVPErrp06tYFrvzj8XLWmKA+X8x0W//4MqbUyZu++giUG/v0bjAT6/Qxa8IjodrfdACyb0Fg=="
|
||||
},
|
||||
"@types/vinyl": {
|
||||
"version": "2.0.3",
|
||||
@ -409,8 +428,7 @@
|
||||
"@types/which": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-1.3.1.tgz",
|
||||
"integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ=="
|
||||
},
|
||||
"@types/yargs": {
|
||||
"version": "12.0.12",
|
||||
@ -421,8 +439,7 @@
|
||||
"ansi-256-colors": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz",
|
||||
"integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=",
|
||||
"dev": true
|
||||
"integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo="
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "3.0.0",
|
||||
@ -434,7 +451,6 @@
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://verdaccio.lossless.one/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
@ -469,14 +485,12 @@
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||
"dev": true
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://verdaccio.lossless.one/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
@ -533,7 +547,6 @@
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://verdaccio.lossless.one/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
@ -550,16 +563,14 @@
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/cli-cursor/-/cli-cursor-2.1.0.tgz",
|
||||
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"restore-cursor": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"cli-spinners": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/cli-spinners/-/cli-spinners-2.1.0.tgz",
|
||||
"integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==",
|
||||
"dev": true
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/cli-spinners/-/cli-spinners-2.2.0.tgz",
|
||||
"integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ=="
|
||||
},
|
||||
"cliui": {
|
||||
"version": "4.1.0",
|
||||
@ -611,7 +622,6 @@
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://verdaccio.lossless.one/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
@ -619,8 +629,7 @@
|
||||
"color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://verdaccio.lossless.one/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
||||
"dev": true
|
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
@ -640,8 +649,7 @@
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||
"dev": true
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
@ -653,7 +661,6 @@
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://verdaccio.lossless.one/cron/-/cron-1.7.1.tgz",
|
||||
"integrity": "sha512-gmMB/pJcqUVs/NklR1sCGlNYM7TizEw+1gebz20BMc/8bTm/r7QUp3ZPSPlG8Z5XRlvb7qhjEjq/+bdIfUCL2A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"moment-timezone": "^0.5.x"
|
||||
}
|
||||
@ -690,7 +697,6 @@
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://verdaccio.lossless.one/defaults/-/defaults-1.0.3.tgz",
|
||||
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"clone": "^1.0.2"
|
||||
},
|
||||
@ -698,8 +704,7 @@
|
||||
"clone": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://verdaccio.lossless.one/clone/-/clone-1.0.4.tgz",
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
||||
"dev": true
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -727,8 +732,7 @@
|
||||
"escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://verdaccio.lossless.one/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||
"dev": true
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
@ -796,14 +800,20 @@
|
||||
}
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/fs-extra/-/fs-extra-7.0.1.tgz",
|
||||
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
|
||||
"dev": true,
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://verdaccio.lossless.one/graceful-fs/-/graceful-fs-4.2.2.tgz",
|
||||
"integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
@ -850,14 +860,12 @@
|
||||
"graceful-fs": {
|
||||
"version": "4.1.15",
|
||||
"resolved": "https://verdaccio.lossless.one/graceful-fs/-/graceful-fs-4.1.15.tgz",
|
||||
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
@ -914,8 +922,7 @@
|
||||
"isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/isexe/-/isexe-2.0.0.tgz",
|
||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||
"dev": true
|
||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
@ -937,7 +944,6 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
@ -965,7 +971,6 @@
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/log-symbols/-/log-symbols-2.2.0.tgz",
|
||||
"integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.0.1"
|
||||
}
|
||||
@ -973,8 +978,7 @@
|
||||
"luxon": {
|
||||
"version": "1.16.0",
|
||||
"resolved": "https://verdaccio.lossless.one/luxon/-/luxon-1.16.0.tgz",
|
||||
"integrity": "sha512-qaqB+JwpGwtl7UbIXng3A/l4W/ySBr8drQvwtMLZBMiLD2V+0fEnPWMrs+UjnIy9PsktazQaKvwDUCLzoWz0Hw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-qaqB+JwpGwtl7UbIXng3A/l4W/ySBr8drQvwtMLZBMiLD2V+0fEnPWMrs+UjnIy9PsktazQaKvwDUCLzoWz0Hw=="
|
||||
},
|
||||
"make-error": {
|
||||
"version": "1.3.5",
|
||||
@ -1027,7 +1031,6 @@
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://verdaccio.lossless.one/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
@ -1052,14 +1055,12 @@
|
||||
"moment": {
|
||||
"version": "2.24.0",
|
||||
"resolved": "https://verdaccio.lossless.one/moment/-/moment-2.24.0.tgz",
|
||||
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
|
||||
},
|
||||
"moment-timezone": {
|
||||
"version": "0.5.25",
|
||||
"resolved": "https://verdaccio.lossless.one/moment-timezone/-/moment-timezone-0.5.25.tgz",
|
||||
"integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"moment": ">= 2.9.0"
|
||||
}
|
||||
@ -1098,7 +1099,6 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/onetime/-/onetime-2.0.1.tgz",
|
||||
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mimic-fn": "^1.0.0"
|
||||
},
|
||||
@ -1106,8 +1106,7 @@
|
||||
"mimic-fn": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/mimic-fn/-/mimic-fn-1.2.0.tgz",
|
||||
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1115,7 +1114,6 @@
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://verdaccio.lossless.one/ora/-/ora-3.4.0.tgz",
|
||||
"integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.2",
|
||||
"cli-cursor": "^2.1.0",
|
||||
@ -1128,14 +1126,12 @@
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://verdaccio.lossless.one/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://verdaccio.lossless.one/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
@ -1299,7 +1295,6 @@
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://verdaccio.lossless.one/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
||||
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"onetime": "^2.0.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
@ -1309,7 +1304,6 @@
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://verdaccio.lossless.one/rxjs/-/rxjs-6.5.2.tgz",
|
||||
"integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tslib": "^1.9.0"
|
||||
}
|
||||
@ -1350,8 +1344,7 @@
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://verdaccio.lossless.one/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
||||
},
|
||||
"smartchai": {
|
||||
"version": "2.0.1",
|
||||
@ -1455,7 +1448,6 @@
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://verdaccio.lossless.one/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
@ -1463,8 +1455,7 @@
|
||||
"symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://verdaccio.lossless.one/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||
},
|
||||
"ts-node": {
|
||||
"version": "8.3.0",
|
||||
@ -1482,8 +1473,7 @@
|
||||
"tslib": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://verdaccio.lossless.one/tslib/-/tslib-1.10.0.tgz",
|
||||
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
|
||||
},
|
||||
"tslint": {
|
||||
"version": "5.17.0",
|
||||
@ -1544,8 +1534,7 @@
|
||||
"universalify": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://verdaccio.lossless.one/universalify/-/universalify-0.1.2.tgz",
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
@ -1584,7 +1573,6 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://verdaccio.lossless.one/wcwidth/-/wcwidth-1.0.1.tgz",
|
||||
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"defaults": "^1.0.3"
|
||||
}
|
||||
@ -1593,7 +1581,6 @@
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://verdaccio.lossless.one/which/-/which-1.3.1.tgz",
|
||||
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"isexe": "^2.0.0"
|
||||
}
|
||||
|
@ -20,7 +20,13 @@
|
||||
"tslint": "^5.11.0",
|
||||
"tslint-config-prettier": "^1.15.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"dependencies": {
|
||||
"@pushrocks/smartlog": "^2.0.19",
|
||||
"@pushrocks/smartlog-destination-local": "^8.0.2",
|
||||
"@pushrocks/smartshell": "^2.0.25",
|
||||
"@types/fs-extra": "^8.0.0",
|
||||
"fs-extra": "^8.1.0"
|
||||
},
|
||||
"files": [
|
||||
"ts/*",
|
||||
"ts_web/*",
|
||||
|
@ -1,2 +1,26 @@
|
||||
const removeme = {};
|
||||
export { removeme };
|
||||
// node native scope
|
||||
import * as path from 'path';
|
||||
|
||||
|
||||
export {
|
||||
path
|
||||
};
|
||||
|
||||
// @pushrocks scope
|
||||
import * as smartshell from '@pushrocks/smartshell';
|
||||
import * as smartlog from '@pushrocks/smartlog';
|
||||
import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local';
|
||||
|
||||
export {
|
||||
smartshell,
|
||||
smartlog,
|
||||
smartlogDestinationLocal
|
||||
};
|
||||
|
||||
// third party
|
||||
|
||||
import * as fs from 'fs-extra';
|
||||
|
||||
export {
|
||||
fs
|
||||
};
|
174
ts/smartdaemon.settings.ts
Normal file
174
ts/smartdaemon.settings.ts
Normal file
@ -0,0 +1,174 @@
|
||||
export const settingsReference = {
|
||||
name: {
|
||||
cli: {
|
||||
short: 'n',
|
||||
long: 'service',
|
||||
value: '[name]',
|
||||
description: 'Service name'
|
||||
},
|
||||
mandatory: true
|
||||
},
|
||||
description: {
|
||||
cli: {
|
||||
short: 'd',
|
||||
long: 'description',
|
||||
value: '[description]',
|
||||
description: 'Service description'
|
||||
},
|
||||
default: '{name} service'
|
||||
},
|
||||
author: {
|
||||
cli: {
|
||||
short: 'k',
|
||||
long: 'author',
|
||||
value: '[author]',
|
||||
description: 'Service author'
|
||||
}
|
||||
},
|
||||
user: {
|
||||
cli: {
|
||||
short: 'u',
|
||||
long: 'user',
|
||||
value: '[user]',
|
||||
description: 'User to run service as'
|
||||
}
|
||||
},
|
||||
group: {
|
||||
cli: {
|
||||
short: 'g',
|
||||
long: 'group',
|
||||
value: '[group]',
|
||||
description: 'Group to run service as'
|
||||
}
|
||||
},
|
||||
app: {
|
||||
cli: {
|
||||
short: 'A',
|
||||
long: 'app',
|
||||
value: '[app]',
|
||||
description: 'Application main file'
|
||||
},
|
||||
default: 'main.js'
|
||||
|
||||
},
|
||||
cwd: {
|
||||
cli: {
|
||||
short: 'c',
|
||||
long: 'cwd',
|
||||
value: '[path]',
|
||||
description: 'Application cwd'
|
||||
},
|
||||
mandatory: true,
|
||||
fs: true
|
||||
},
|
||||
'app.args': {
|
||||
cli: {
|
||||
short: 'p',
|
||||
long: 'app.args',
|
||||
value: '[args]',
|
||||
description: 'Application arguments'
|
||||
}
|
||||
},
|
||||
env: {
|
||||
cli: {
|
||||
short: 'e',
|
||||
long: 'env',
|
||||
value: '[NAME=VALUE]',
|
||||
description: 'Environment variables to set in systemd job',
|
||||
function: (v, vars) => {
|
||||
const _v = v.split('=')
|
||||
vars[_v[0]] = _v[1]; return vars
|
||||
},
|
||||
store: []
|
||||
}
|
||||
},
|
||||
pid: {
|
||||
cli: {
|
||||
short: 'P',
|
||||
long: 'pid',
|
||||
value: '[file]',
|
||||
description: 'Service pid file'
|
||||
},
|
||||
default: '/var/run/{name}.pid'
|
||||
},
|
||||
log: {
|
||||
cli: {
|
||||
short: 'L',
|
||||
long: 'log',
|
||||
value: '[log]',
|
||||
description: 'Service log file'
|
||||
},
|
||||
default: '/var/log/{name}/log'
|
||||
},
|
||||
error: {
|
||||
cli: {
|
||||
short: 'E',
|
||||
long: 'error',
|
||||
value: '[error]',
|
||||
description: 'Service error file'
|
||||
},
|
||||
default: '/var/log/{name}/error'
|
||||
},
|
||||
engine: {
|
||||
cli: {
|
||||
short: 'X',
|
||||
long: 'engine',
|
||||
value: '[node|forever|pm2]',
|
||||
description: 'Service engine (node|forever|pm2)'
|
||||
},
|
||||
default: 'node',
|
||||
mandatory: true
|
||||
},
|
||||
'engine.bin': {
|
||||
cli: {
|
||||
short: 'b',
|
||||
long: 'engine.bin',
|
||||
value: '[bin]',
|
||||
description: 'Service engine bin'
|
||||
},
|
||||
default: '/usr/bin/{engine}',
|
||||
fs: true
|
||||
},
|
||||
'engine.args': {
|
||||
cli: {
|
||||
short: 't',
|
||||
long: 'engine.args',
|
||||
value: '[eargs]',
|
||||
description: 'Service engine args'
|
||||
}
|
||||
},
|
||||
logrotate: {
|
||||
cli: {
|
||||
short: 'l',
|
||||
long: 'logrotate',
|
||||
description: 'Add logrotate config'
|
||||
}
|
||||
// default false
|
||||
},
|
||||
'logrotate.rotate': {
|
||||
cli: {
|
||||
short: 'R',
|
||||
long: 'logrotate.rotate',
|
||||
value: '[rotate]',
|
||||
description: 'Logrotate rotations'
|
||||
},
|
||||
default: 10
|
||||
|
||||
},
|
||||
'logrotate.frequency': {
|
||||
cli: {
|
||||
short: 'F',
|
||||
long: 'logrotate.frequency',
|
||||
value: '[frequency]',
|
||||
description: 'Logrotate frequency'
|
||||
},
|
||||
default: 'daily'
|
||||
},
|
||||
noroot: {
|
||||
cli: {
|
||||
short: 'w',
|
||||
long: 'noroot',
|
||||
description: 'Skip check for root permission'
|
||||
}
|
||||
}
|
||||
};
|
259
ts/smartdaemon.setup.ts
Normal file
259
ts/smartdaemon.setup.ts
Normal file
@ -0,0 +1,259 @@
|
||||
import * as plugins from './smartdaemon.plugins';
|
||||
|
||||
import { logger } from './smartdamon.logging';
|
||||
import { settingsReference } from './smartdaemon.settings';
|
||||
import { templateReference } from './smartdaemon.templates';
|
||||
|
||||
const smartshellInstance = new plugins.smartshell.Smartshell({
|
||||
executor: 'bash'
|
||||
});
|
||||
|
||||
/**
|
||||
* print success message
|
||||
* @method setup.success
|
||||
* @param {string} message
|
||||
*/
|
||||
export const setupSuccess = (message: string) => {
|
||||
logger.log('success', `service-systemd: ${message}`);
|
||||
};
|
||||
|
||||
/**
|
||||
* print error message
|
||||
* @method setup.fail
|
||||
* @param {string} message
|
||||
*/
|
||||
export const setupFail = (message) => {
|
||||
logger.log('error', `service-systemd ${message}`);
|
||||
};
|
||||
|
||||
/**
|
||||
* install the service
|
||||
* can also be used to update the service
|
||||
* @method setup.add
|
||||
* @param {object} settings
|
||||
* @return {string}
|
||||
*/
|
||||
export const setupAdd = async (settings) => {
|
||||
setupCheckSettings(settings);
|
||||
const contents = setupParse(settings);
|
||||
await setupCheckPaths(settings);
|
||||
await setupAddLog(settings);
|
||||
await setupAddScripts(settings, contents);
|
||||
await setupAddLogrotate(settings, contents);
|
||||
return `service ${settings.name} installed`;
|
||||
};
|
||||
|
||||
/**
|
||||
* remove the service
|
||||
* @method setup.remove
|
||||
* @param {string} service service name
|
||||
* @return {string}
|
||||
*/
|
||||
export const setupRemove = async (service) => {
|
||||
if (!service) {
|
||||
throw new Error('Missing argument: service name');
|
||||
}
|
||||
|
||||
const cmd = `systemctl disable ${service}.service`;
|
||||
logger.log('info', `service-systemd > ${cmd}`);
|
||||
await smartshellInstance.exec(cmd);
|
||||
|
||||
let file = plugins.path.join('/etc/systemd/system', `${service}.service`);
|
||||
logger.log('info', `service-systemd remove ${file}`);
|
||||
await plugins.fs.unlink(file);
|
||||
|
||||
file = plugins.path.join('/usr/local/bin', `systemd-${service}-start`);
|
||||
logger.log('info', `service-systemd remove ${file}`);
|
||||
await plugins.fs.unlink(file);
|
||||
|
||||
file = plugins.path.join('/etc/logrotate.d', service);
|
||||
logger.log('info', `service-systemd remove ${file}`);
|
||||
await plugins.fs.unlink(file);
|
||||
return `service ${service} uninstalled`;
|
||||
};
|
||||
|
||||
/**
|
||||
* check mandatories params and paths
|
||||
* @method setup.checkSettings
|
||||
* @param {object} settings
|
||||
*/
|
||||
export const setupCheckSettings = (settings) => {
|
||||
if (!settings.name) {
|
||||
settings.name = settings.service;
|
||||
}
|
||||
|
||||
delete settings.service;
|
||||
|
||||
const paths = [];
|
||||
for (const optionArg of Object.keys(settingsReference)) {
|
||||
const option = settingsReference[optionArg];
|
||||
if (option.mandatory && !settings[optionArg]) {
|
||||
throw new Error(`Missing ${optionArg} in settings file or arguments`);
|
||||
}
|
||||
if (option.fs) {
|
||||
settings[optionArg] = plugins.path.resolve(settings[optionArg]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* check mandatories params and paths
|
||||
* @method setup.checkPaths
|
||||
* @param {object} settings
|
||||
*/
|
||||
export const setupCheckPaths = async (settings) => {
|
||||
const exists = [];
|
||||
for (const optionArg of Object.keys(settingsReference)) {
|
||||
const option = settingsReference[optionArg];
|
||||
if (option.fs) {
|
||||
exists.push((async () => {
|
||||
const exists2 = await plugins.fs.pathExists(settings[optionArg]);
|
||||
if (!exists2) {
|
||||
throw Error(`path ${settings[optionArg]} (${optionArg}) does not exists`);
|
||||
}
|
||||
})());
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(exists);
|
||||
};
|
||||
|
||||
/**
|
||||
* merge settings with templates
|
||||
* create scripts contents
|
||||
* @method setup.parse
|
||||
* @param {object} settings
|
||||
*/
|
||||
export const setupParse = (settings) => {
|
||||
|
||||
if (settings.env) {
|
||||
settings.envs = '';
|
||||
for (const key of Object.keys(settings.env)) {
|
||||
settings.envs += 'Environment=' + key + '=' + settings.env[key] + '\n';
|
||||
}
|
||||
}
|
||||
settings.user = settings.user
|
||||
? `User=${settings.user}`
|
||||
: '';
|
||||
settings.group = settings.group
|
||||
? `Group=${settings.group}`
|
||||
: '';
|
||||
|
||||
settings.date = (new Date()).toString();
|
||||
|
||||
for (const key in settings) {
|
||||
if (typeof settings[key] === 'string') {
|
||||
settings[key] = plugins.string.template(settings[key], settings, true);
|
||||
}
|
||||
}
|
||||
|
||||
const _service = plugins.string.template(templateReference.engines[settings.engine].service, settings, true);
|
||||
const _start = plugins.string.template(templateReference.engines[settings.engine].start, settings, true);
|
||||
const _stop = plugins.string.template(templateReference.engines[settings.engine].stop, settings, true);
|
||||
const _logrotate = settings.logrotate ? plugins.string.template(templateReference.logrotate, settings, true) : '';
|
||||
|
||||
return {
|
||||
service: _service,
|
||||
start: _start,
|
||||
stop: _stop,
|
||||
logrotate: _logrotate
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* write scripts and run commands to install the service
|
||||
* @method setup.addScripts
|
||||
* @param {object} settings
|
||||
* @param {object} contents scripts contents
|
||||
* @param {string} contents.start
|
||||
* @param {string} contents.stop
|
||||
* @param {string} contents.service
|
||||
*/
|
||||
export const setupAddScripts = async (settings, contents) => {
|
||||
const service = plugins.path.join('/etc/systemd/system', `${settings.name}.service`);
|
||||
const tasks = [];
|
||||
|
||||
if (contents.start) {
|
||||
tasks.push(() => {
|
||||
const start = plugins.path.join('/usr/local/bin', `systemd-${settings.name}-start`);
|
||||
logger.log('info', `service-systemd: write file ${start}`);
|
||||
return plugins.fs.writeFile(start, contents.start, 'utf8');
|
||||
});
|
||||
}
|
||||
|
||||
if (contents.stop) {
|
||||
tasks.push(() => {
|
||||
const stop = plugins.path.join('/usr/local/bin', `systemd-${settings.name}-stop`);
|
||||
logger.log('info', `service-systemd: write file ${stop}`);
|
||||
return plugins.fs.writeFile(stop, contents.stop, {
|
||||
encoding: 'utf8'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (contents.start || contents.stop) {
|
||||
tasks.push(() => {
|
||||
const cmd = `chmod a+x /usr/local/bin/systemd-${settings.name}*`;
|
||||
logger.log('info', `service-systemd > ${cmd}`);
|
||||
return smartshellInstance.exec(cmd);
|
||||
});
|
||||
}
|
||||
|
||||
tasks.push(() => {
|
||||
logger.log('info', `service-systemd write file ${service}`);
|
||||
return plugins.fs.writeFile(service, contents.service, 'utf8');
|
||||
});
|
||||
|
||||
tasks.push(() => {
|
||||
const cmd = `systemctl enable ${service};systemctl daemon-reload`;
|
||||
logger.log('info', `service-systemd > ${cmd}`);
|
||||
return smartshellInstance.exec(cmd);
|
||||
});
|
||||
|
||||
for (const task of tasks) {
|
||||
await task();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ensure dirs for log files
|
||||
* @method setup.addLog
|
||||
* @param {object} settings
|
||||
*/
|
||||
export const setupAddLog = async (settings) => {
|
||||
const tasks = [];
|
||||
let dirLog;
|
||||
let dirError;
|
||||
|
||||
if (settings.log) {
|
||||
dirLog = plugins.path.dirname(settings.log);
|
||||
logger.log('info', `service-systemd: ensure dir ${dirLog}`);
|
||||
tasks.push(plugins.fs.ensureDir(dirLog));
|
||||
}
|
||||
if (settings.error) {
|
||||
dirError = plugins.path.dirname(settings.error);
|
||||
if (dirError !== dirLog) {
|
||||
logger.log('info', `service-systemd ensure dir ${dirError}`);
|
||||
tasks.push(plugins.fs.ensureDir(dirError));
|
||||
}
|
||||
}
|
||||
await Promise.all(tasks);
|
||||
};
|
||||
|
||||
/**
|
||||
* write logrotate conf script
|
||||
* @method setup.addLogrotate
|
||||
* @param {object} settings
|
||||
* @param {object} contents scripts contents
|
||||
* @param {string} contents.start
|
||||
* @param {string} contents.stop
|
||||
* @param {string} contents.service
|
||||
*/
|
||||
export const setupAddLogrotate = async (settings, contents) => {
|
||||
if (!settings.logrotate) {
|
||||
return;
|
||||
}
|
||||
const file = plugins.path.join('/etc/logrotate.d/', settings.name);
|
||||
logger.log('info', `service-systemd: write logrotate file ${file}`);
|
||||
await plugins.fs.writeFile(file, contents.logrotate, 'utf8');
|
||||
};
|
75
ts/smartdaemon.templates.ts
Normal file
75
ts/smartdaemon.templates.ts
Normal file
@ -0,0 +1,75 @@
|
||||
export const templateReference = {
|
||||
engines: {
|
||||
node: {
|
||||
service:
|
||||
'# Generated by service-systemd on {{date}}\n' +
|
||||
'[Unit]\n' +
|
||||
'Description={description}\n' +
|
||||
'Requires=network.target\n' +
|
||||
'After=network.target\n' +
|
||||
'\n' +
|
||||
'[Service]\n' +
|
||||
'Type=simple\n' +
|
||||
'ExecStart={engine.bin} {engine.args} {app} {app.args}\n' +
|
||||
'WorkingDirectory={cwd}\n' +
|
||||
'Restart=on-failure\n' +
|
||||
'{envs}\n' +
|
||||
'LimitNOFILE=infinity\n' +
|
||||
'LimitCORE=infinity\n' +
|
||||
'StandardInput=null\n' +
|
||||
'StandardOutput=syslog\n' +
|
||||
'StandardError=syslog\n' +
|
||||
'Restart=always\n' +
|
||||
'SyslogIdentifier={name}\n' +
|
||||
'PIDFile={pid}\n' +
|
||||
'{user}\n' +
|
||||
'{group}\n' +
|
||||
'[Install]\n' +
|
||||
'WantedBy=multi-user.target\n'
|
||||
},
|
||||
forever: {
|
||||
service:
|
||||
'# Generated by service-systemd on {date}\n' +
|
||||
'[Unit]\n' +
|
||||
'Description={description}\n' +
|
||||
'Requires=network.target\n' +
|
||||
'After=network.target\n' +
|
||||
'\n' +
|
||||
'[Service]\n' +
|
||||
'Type=forking\n' +
|
||||
'WorkingDirectory={cwd}\n' +
|
||||
'{envs}\n' +
|
||||
'ExecStart=/usr/local/bin/systemd-{name}-start\n' +
|
||||
'ExecStop=/usr/local/bin/systemd-{name}-stop\n' +
|
||||
'PIDFile={pid}\n' +
|
||||
'{user}\n' +
|
||||
'{group}\n' +
|
||||
'[Install]\n' +
|
||||
'WantedBy=multi-user.target\n',
|
||||
start:
|
||||
'#!/bin/bash\n' +
|
||||
'{engine.bin} start ' +
|
||||
'--pidFile {pid} ' +
|
||||
'--uid {name} ' +
|
||||
'--sourceDir {cwd} ' +
|
||||
'-l {log} ' +
|
||||
'-e {error} ' +
|
||||
'--append --minUptime 5000 --spinSleepTime 2000 ' +
|
||||
'{engine.args} ' +
|
||||
'{app} {app.args}\n' +
|
||||
'exit 0',
|
||||
stop: '#!/bin/bash\n' + '{engine.bin} stop {name}\n' + 'exit 0'
|
||||
}
|
||||
},
|
||||
logrotate:
|
||||
'{log}\n{error} {\n' +
|
||||
' {logrotate.frequency}\n' +
|
||||
' rotate {logrotate.rotate}\n' +
|
||||
' create\n' +
|
||||
' missingok\n' +
|
||||
' notifempty\n' +
|
||||
' compress\n' +
|
||||
' sharedscripts\n' +
|
||||
// ' postrotate\n{restart}\n' +
|
||||
' endscript\n}'
|
||||
};
|
15
ts/smartdamon.logging.ts
Normal file
15
ts/smartdamon.logging.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import * as plugins from './smartdaemon.plugins';
|
||||
|
||||
export const logger = new plugins.smartlog.Smartlog({
|
||||
logContext: {
|
||||
company: 'Some Company',
|
||||
companyunit: 'Some CompanyUnit',
|
||||
containerName: 'Some Containername',
|
||||
environment: 'local',
|
||||
runtime: 'node',
|
||||
zone: 'gitzone'
|
||||
},
|
||||
minimumLogLevel: 'silly'
|
||||
});
|
||||
|
||||
logger.addLogDestination(new plugins.smartlogDestinationLocal.DestinationLocal());
|
Loading…
Reference in New Issue
Block a user