feat(app): improved errors and warning for disabled features

This commit is contained in:
lowlighter
2022-08-28 12:32:57 -04:00
parent 77dfb2ae7e
commit 7a53a2da55
45 changed files with 58 additions and 47 deletions

View File

@@ -226,7 +226,7 @@ export default async function(
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled)||(!q.my_plugin)) if ((!q.my_plugin)||(imports.metadata.plugins.my_plugin.enabled(enabled, {extras})))
return null return null
//Automatically validate user inputs //Automatically validate user inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, computed, rest, graphql,
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.<%= name %>) || (!imports.metadata.plugins.<%= name %>.extras("enabled", {extras}))) if ((!q.<%= name %>) || (!imports.metadata.plugins.<%= name %>.enabled(enabled, {extras})))
return null return null
//Results //Results
return {} return {}

View File

@@ -217,9 +217,20 @@ metadata.plugin = async function({__plugins, __templates, name, logger}) {
Object.assign(meta.inputs, inputs, Object.fromEntries(Object.entries(inputs).map(([key, value]) => [metadata.to.query(key, {name}), value]))) Object.assign(meta.inputs, inputs, Object.fromEntries(Object.entries(inputs).map(([key, value]) => [metadata.to.query(key, {name}), value])))
} }
//Enable state handler
{
meta.enabled = function(enabled, {extras = {}, error = true} = {}) {
if ((process.env.GITHUB_ACTIONS)&&(!enabled))
console.warn(`::warning::Plugin "${name}" is currently disabled. Add "plugin_${name}: yes" to your workflow to enable it.`)
if ((error)&&(!enabled))
throw Object.assign(new Error(`Plugin "${name}" is disabled${process.env.GITHUB_ACTIONS ? "" : " on this server"}`), {enabled: true})
return (enabled) && (meta.extras("enabled", {extras, error}))
}
}
//Extra features parser //Extra features parser
{ {
meta.extras = function(input, {extras = {}, error = true}) { meta.extras = function(input, {extras = {}, error = true} = {}) {
const key = metadata.to.yaml(input, {name}) const key = metadata.to.yaml(input, {name})
try { try {
//Required permissions //Required permissions
@@ -270,7 +281,7 @@ metadata.plugin = async function({__plugins, __templates, name, logger}) {
console.debug(`metrics/extras > ${name} > ${key} > skipping (no error mode)`) console.debug(`metrics/extras > ${name} > ${key} > skipping (no error mode)`)
return false return false
} }
throw Object.assign(new Error(`Unsupported option "${key}"`), {extras: true}) throw Object.assign(new Error(`Option "${key}" is disabled on this server`), {extras: true})
} }
} }
} }

View File

@@ -130,8 +130,8 @@ export function formatters({timeZone} = {}) {
/**Error formatter */ /**Error formatter */
format.error = function(error, {descriptions = {}, ...attributes} = {}) { format.error = function(error, {descriptions = {}, ...attributes} = {}) {
try { try {
//Extras features error //Extras features or enable state error
if (error.extras) if ((error.extras)||(error.enabled))
throw {error: {message: error.message, instance: error}} throw {error: {message: error.message, instance: error}}
//Already formatted error //Already formatted error
if (error.error?.message) if (error.error?.message)

View File

@@ -6,7 +6,7 @@ export default async function({login, q, imports, data, computed, graphql, queri
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.achievements) || (!imports.metadata.plugins.achievements.extras("enabled", {extras}))) if ((!q.achievements) || (!imports.metadata.plugins.achievements.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, rest, q, account, imports}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.activity) || (!imports.metadata.plugins.activity.extras("enabled", {extras}))) if ((!q.activity) || (!imports.metadata.plugins.activity.enabled(enabled, {extras})))
return null return null
//Context //Context

View File

@@ -3,7 +3,7 @@ export default async function({login, data, queries, imports, q, account}, {enab
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.anilist) || (!imports.metadata.plugins.anilist.extras("enabled", {extras}))) if ((!q.anilist) || (!imports.metadata.plugins.anilist.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, data, imports, graphql, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.calendar) || (!imports.metadata.plugins.calendar.extras("enabled", {extras}))) if ((!q.calendar) || (!imports.metadata.plugins.calendar.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, rest, account}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.code) || (!imports.metadata.plugins.code.extras("enabled", {extras}))) if ((!q.code) || (!imports.metadata.plugins.code.enabled(enabled, {extras})))
return null return null
//Context //Context

View File

@@ -3,7 +3,7 @@ export default async function({q, data, imports, account}, {enabled = false, ext
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.fortune) || (!imports.metadata.plugins.fortune.extras("enabled", {extras}))) if ((!q.fortune) || (!imports.metadata.plugins.fortune.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({q, imports, data, account}, {enabled = false, ext
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.nightscout) || (!imports.metadata.plugins.nightscout.extras("enabled", {extras}))) if ((!q.nightscout) || (!imports.metadata.plugins.nightscout.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({q, imports, data, account}, {enabled = false, tok
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.poopmap) || (!imports.metadata.plugins.poopmap.extras("enabled", {extras}))) if ((!q.poopmap) || (!imports.metadata.plugins.poopmap.enabled(enabled, {extras})))
return null return null
if (!token) if (!token)

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.screenshot) || (!imports.metadata.plugins.screenshot.extras("enabled", {extras}))) if ((!q.screenshot) || (!imports.metadata.plugins.screenshot.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.stock) || (!imports.metadata.plugins.stock.extras("enabled", {extras}))) if ((!q.stock) || (!imports.metadata.plugins.stock.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, rest, graphql, queries,
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.contributors) || (!imports.metadata.plugins.contributors.extras("enabled", {extras}))) if ((!q.contributors) || (!imports.metadata.plugins.contributors.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -59,7 +59,7 @@ export default async function({login, q}, {conf, data, rest, graphql, plugins, q
//Plugins //Plugins
for (const name of Object.keys(imports.plugins)) { for (const name of Object.keys(imports.plugins)) {
if ((!plugins[name]?.enabled) || (!q[name])) if (!q[name])
continue continue
pending.push((async () => { pending.push((async () => {
try { try {

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, graphql, queries, data, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.discussions) || (!imports.metadata.plugins.discussions.extras("enabled", {extras}))) if ((!q.discussions) || (!imports.metadata.plugins.discussions.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, computed, imports, q, graphql, queri
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.followup) || (!imports.metadata.plugins.followup.extras("enabled", {extras}))) if ((!q.followup) || (!imports.metadata.plugins.followup.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, graphql, q, imports, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.gists) || (!imports.metadata.plugins.gists.extras("enabled", {extras}))) if ((!q.gists) || (!imports.metadata.plugins.gists.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -6,7 +6,7 @@ export default async function({login, data, rest, imports, q, account}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.habits) || (!imports.metadata.plugins.habits.extras("enabled", {extras}))) if ((!q.habits) || (!imports.metadata.plugins.habits.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, graphql, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.introduction) || (!imports.metadata.plugins.introduction.extras("enabled", {extras}))) if ((!q.introduction) || (!imports.metadata.plugins.introduction.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, graphql, q, imports, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.isocalendar) || (!imports.metadata.plugins.isocalendar.extras("enabled", {extras}))) if ((!q.isocalendar) || (!imports.metadata.plugins.isocalendar.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -6,7 +6,7 @@ export default async function({login, data, imports, q, rest, account}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.languages) || (!imports.metadata.plugins.languages.extras("enabled", {extras}))) if ((!q.languages) || (!imports.metadata.plugins.languages.enabled(enabled, {extras})))
return null return null
//Context //Context

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, graphql, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.licenses) || (!imports.metadata.plugins.licenses.extras("enabled", {extras}))) if ((!q.licenses) || (!imports.metadata.plugins.licenses.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, imports, rest, q, account}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.lines) || (!imports.metadata.plugins.lines.extras("enabled", {extras}))) if ((!q.lines) || (!imports.metadata.plugins.lines.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -32,7 +32,7 @@ export default async function({login, imports, data, q, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.music) || (!imports.metadata.plugins.music.extras("enabled", {extras}))) if ((!q.music) || (!imports.metadata.plugins.music.enabled(enabled, {extras})))
return null return null
//Initialization //Initialization

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, rest, graphql, data, account,
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.notable) || (!imports.metadata.plugins.notable.extras("enabled", {extras}))) if ((!q.notable) || (!imports.metadata.plugins.notable.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, imports, data, q, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.pagespeed) || (!imports.metadata.plugins.pagespeed.extras("enabled", {extras}))) if ((!q.pagespeed) || (!imports.metadata.plugins.pagespeed.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, graphql, rest, q, queries, imports,
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.people) || (!imports.metadata.plugins.people.extras("enabled", {extras}))) if ((!q.people) || (!imports.metadata.plugins.people.enabled(enabled, {extras})))
return null return null
//Context //Context

View File

@@ -3,7 +3,7 @@ export default async function({login, data, imports, q, queries, account}, {enab
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.posts) || (!imports.metadata.plugins.posts.extras("enabled", {extras}))) if ((!q.posts) || (!imports.metadata.plugins.posts.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, imports, graphql, q, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.projects) || (!imports.metadata.plugins.projects.extras("enabled", {extras}))) if ((!q.projects) || (!imports.metadata.plugins.projects.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, graphql, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.reactions) || (!imports.metadata.plugins.reactions.extras("enabled", {extras}))) if ((!q.reactions) || (!imports.metadata.plugins.reactions.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, graphql, queries, data, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.repositories) || (!imports.metadata.plugins.repositories.extras("enabled", {extras}))) if ((!q.repositories) || (!imports.metadata.plugins.repositories.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.rss) || (!imports.metadata.plugins.rss.extras("enabled", {extras}))) if ((!q.rss) || (!imports.metadata.plugins.rss.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.skyline) || (!imports.metadata.plugins.skyline.extras("enabled", {extras}))) if ((!q.skyline) || (!imports.metadata.plugins.skyline.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, graphql, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.sponsors) || (!imports.metadata.plugins.sponsors.extras("enabled", {extras}))) if ((!q.sponsors) || (!imports.metadata.plugins.sponsors.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.stackoverflow) || (!imports.metadata.plugins.stackoverflow.extras("enabled", {extras}))) if ((!q.stackoverflow) || (!imports.metadata.plugins.stackoverflow.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, graphql, data, imports, q, queries, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.stargazers) || (!imports.metadata.plugins.stargazers.extras("enabled", {extras}))) if ((!q.stargazers) || (!imports.metadata.plugins.stargazers.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.starlists) || (!imports.metadata.plugins.starlists.extras("enabled", {extras}))) if ((!q.starlists) || (!imports.metadata.plugins.starlists.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, graphql, q, queries, imports, accoun
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.stars) || (!imports.metadata.plugins.stars.extras("enabled", {extras}))) if ((!q.stars) || (!imports.metadata.plugins.stars.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.support) || (!imports.metadata.plugins.support.extras("enabled", {extras}))) if ((!q.support) || (!imports.metadata.plugins.support.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, data, imports, q, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.topics) || (!imports.metadata.plugins.topics.extras("enabled", {extras}))) if ((!q.topics) || (!imports.metadata.plugins.topics.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, imports, data, rest, q, account}, {enabled
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.traffic) || (!imports.metadata.plugins.traffic.extras("enabled", {extras}))) if ((!q.traffic) || (!imports.metadata.plugins.traffic.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, imports, data, q, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.tweets) || (!imports.metadata.plugins.tweets.extras("enabled", {extras}))) if ((!q.tweets) || (!imports.metadata.plugins.tweets.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs

View File

@@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
//Plugin execution //Plugin execution
try { try {
//Check if plugin is enabled and requirements are met //Check if plugin is enabled and requirements are met
if ((!enabled) || (!q.wakatime) || (!imports.metadata.plugins.wakatime.extras("enabled", {extras}))) if ((!q.wakatime) || (!imports.metadata.plugins.wakatime.enabled(enabled, {extras})))
return null return null
//Load inputs //Load inputs