From 9243c8577fe082846946714d36f877287339a8e2 Mon Sep 17 00:00:00 2001 From: Maxime ROBERT Date: Sat, 31 Aug 2019 20:16:20 +0100 Subject: [PATCH] feat: output published/draft status and display lines with colors --- src/article.ts | 7 ++++++- src/dev-to-git.interface.ts | 18 +++++++++--------- src/helpers.ts | 30 +++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/article.ts b/src/article.ts index 6b5e574..de07e06 100644 --- a/src/article.ts +++ b/src/article.ts @@ -5,6 +5,7 @@ import extractFrontMatter from 'front-matter'; interface ArticleFrontMatter { title: string; + published: boolean; } const imagesRe: RegExp = /\!\[.*\]\(\.\/.*\)/g; @@ -87,6 +88,7 @@ export class Article { articleId: this.articleConfig.id, articleTitle: frontMatter.title, error, + published: frontMatter.published, }; } @@ -95,6 +97,7 @@ export class Article { articleId: this.articleConfig.id, updateStatus: UpdateStatus.ALREADY_UP_TO_DATE as UpdateStatus.ALREADY_UP_TO_DATE, articleTitle: frontMatter.title, + published: frontMatter.published, }; } @@ -108,12 +111,14 @@ export class Article { articleId: this.articleConfig.id, articleTitle: frontMatter.title, updateStatus: UpdateStatus.UPDATED as UpdateStatus.UPDATED, + published: frontMatter.published, })) .catch(error => ({ articleId: this.articleConfig.id, articleTitle: frontMatter.title, updateStatus: UpdateStatus.ERROR as UpdateStatus.ERROR, error, + published: frontMatter.published, })); } @@ -124,6 +129,6 @@ export class Article { throw new Error(`The article doesn't have a valid front matter`); } - return { title: frontMatter.attributes.title }; + return { title: frontMatter.attributes.title, published: frontMatter.attributes.published || false }; } } diff --git a/src/dev-to-git.interface.ts b/src/dev-to-git.interface.ts index 8d2dc55..6b64c1b 100644 --- a/src/dev-to-git.interface.ts +++ b/src/dev-to-git.interface.ts @@ -37,12 +37,12 @@ export type ArticlePublishedStatus = { | { updateStatus: UpdateStatus.FAILED_TO_EXTRACT_FRONT_MATTER; } - | { - articleTitle: string; - updateStatus: Exclude; - } - | { - articleTitle: string; - updateStatus: UpdateStatus.ERROR; - error: Error; - }); + | ({ articleTitle: string; published: boolean } & ( + | { + updateStatus: Exclude; + } + | { + updateStatus: UpdateStatus.ERROR; + error: Error; + } + ))); diff --git a/src/helpers.ts b/src/helpers.ts index 7c1c6e0..757319e 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,27 +1,39 @@ import { ArticlePublishedStatus, ConfigurationOptions, UpdateStatus } from './dev-to-git.interface'; +import chalk from 'chalk'; export const formatArticlePublishedStatuses = (articlePublishedStatuses: ArticlePublishedStatus[]): string => { return articlePublishedStatuses .map(articleStatus => { if (articleStatus.updateStatus === UpdateStatus.FAILED_TO_EXTRACT_FRONT_MATTER) { - return `Article with ID "${articleStatus.articleId}" doesn't have a front matter correctly formatted`; + return chalk.red( + `Article with ID "${articleStatus.articleId}" doesn't have a front matter correctly formatted`, + ); } - let text: string = `Article "${articleStatus.articleTitle}" `; + const baseText: string = `[${articleStatus.published ? 'PUBLISHED' : 'DRAFT'}] Article "${ + articleStatus.articleTitle + }" `; + let text: string = ''; switch (articleStatus.updateStatus) { case UpdateStatus.ALREADY_UP_TO_DATE as UpdateStatus.ALREADY_UP_TO_DATE: - text += `is already up to date`; + text = chalk.blueBright(baseText + `is already up to date`); break; case UpdateStatus.ERROR as UpdateStatus.ERROR: - text += - `encountered an error:\n` + - `Error name: "${articleStatus.error.name}"\n` + - `Error message: "${articleStatus.error.message}"\n` + - `Error stack: "${articleStatus.error.stack}"`; + text = chalk.redBright( + baseText + + `encountered an error:\n` + + `Error name: "${articleStatus.error.name}"\n` + + `Error message: "${articleStatus.error.message}"\n` + + `Error stack: "${articleStatus.error.stack}"`, + ); break; case UpdateStatus.UPDATED as UpdateStatus.UPDATED: - text += `has been successfully updated`; + if (articleStatus.published) { + text = chalk.greenBright(baseText + `has been successfully updated`); + } else { + text = chalk.yellowBright(baseText + `has been successfully updated`); + } break; default: