From d7d30fd417c37001a30e4e43c4724564db52216f Mon Sep 17 00:00:00 2001 From: Timo Hocker Date: Sat, 27 Jun 2020 19:36:35 +0200 Subject: [PATCH] carry previous date string --- lib/snippets/copyright/copyright_generator.ts | 19 ++++--- lib/snippets/copyright/index.ts | 50 +++++++++---------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/lib/snippets/copyright/copyright_generator.ts b/lib/snippets/copyright/copyright_generator.ts index 880bc3c..976d1fb 100644 --- a/lib/snippets/copyright/copyright_generator.ts +++ b/lib/snippets/copyright/copyright_generator.ts @@ -9,13 +9,18 @@ import { CopyrightOptions } from './copyright_options'; export class CopyrightGenerator { public static get_copyright_notice ( - opt: CopyrightOptions + opt: CopyrightOptions, + date_str?: string ): string { let notice = ''; - const date = (new Date); - const dtf = new Intl.DateTimeFormat ('en', { month: 'long' }); - const year = date.getFullYear (); - const month = dtf.format (date); + let date_string = date_str; + if (typeof date_str === 'undefined') { + const date = (new Date); + const dtf = new Intl.DateTimeFormat ('en', { month: 'long' }); + const year = date.getFullYear (); + const month = dtf.format (date); + date_string = `${month} ${year}`; + } if (opt.has_license) { notice = `${'/*'} @@ -23,7 +28,7 @@ export class CopyrightGenerator { * This file is part of ${opt.software} which is released under ${ opt.license}. * See file 'LICENSE' for full license details. - * Created by ${opt.author} <${opt.email}>, ${month} ${year} + * Created by ${opt.author} <${opt.email}>, ${date_string} */ `; @@ -31,7 +36,7 @@ export class CopyrightGenerator { else { notice = `${'/*'} * Copyright (C) ${opt.company || opt.author} - All Rights Reserved - * Created by ${opt.author} <${opt.email}>, ${month} ${year} + * Created by ${opt.author} <${opt.email}>, ${date_string} */ `; diff --git a/lib/snippets/copyright/index.ts b/lib/snippets/copyright/index.ts index 5fb2379..c1b11a9 100644 --- a/lib/snippets/copyright/index.ts +++ b/lib/snippets/copyright/index.ts @@ -42,9 +42,7 @@ export default class Copyright implements Snippet { await modify_json ((json) => { json.author = `${options.author} <${options.email}>`; - json.license = options.has_license - ? options.license - : 'UNLICENSED'; + json.license = options.has_license ? options.license : 'UNLICENSED'; return json; }); @@ -59,11 +57,14 @@ export default class Copyright implements Snippet { ); } - if (!this._loaded_from_config && await new Confirm ( - { message: 'should those settings be saved for the next run?' } + if ( + !this._loaded_from_config + && (await new Confirm ( + { message: 'should those settings be saved for the next run?' } + ) + .run () + .catch (DialogHandler.catch)) ) - .run () - .catch (DialogHandler.catch)) this.save_options_file (); } @@ -81,10 +82,9 @@ export default class Copyright implements Snippet { this._options.software = await new Input ({ message: 'software name' }) .run () .catch (DialogHandler.catch); - this._options.has_license = await new Confirm ({ - message: - 'would you like to specify a license?' - }) + this._options.has_license = await new Confirm ( + { message: 'would you like to specify a license?' } + ) .run () .catch (DialogHandler.catch); if (this._options.has_license) { @@ -104,9 +104,7 @@ export default class Copyright implements Snippet { this._options = null; if (await fs.pathExists (file_path)) { - const options = JSON.parse ( - await fs.readFile (file_path, 'utf-8') - ); + const options = JSON.parse (await fs.readFile (file_path, 'utf-8')); // eslint-disable-next-line no-console console.log (`author: ${options.author} @@ -135,21 +133,23 @@ license: ${options.license}`); ); } - private fix_file_license ( - data: string, - filename: string - ): string | null { - const regex = /\/\*\s+\*\sCopyright[\s\S]*?\*\/\n{0,2}/gu; + private fix_file_license (data: string, filename: string): string | null { + // eslint-disable-next-line max-len + const regex = /\/\*\s+\*\sCopyright[\s\S]*?(?:Created by.*?, (?[a-z]+ [0-9]+)[\s\S]*?|\s)\*\/\n{0,2}/gu; const shebang = /^#!.*?\n\n/gu; const shebang_line = shebang.exec (data); if (!(/\.(?:js|ts|mjs)$/u).test (filename) && !regex.test (data)) return null; - return (shebang_line ? shebang_line[0] : '') - + CopyrightGenerator.get_copyright_notice ( - this._options as CopyrightOptions - ) - + data.replace (regex, '') - .replace (shebang, ''); + const res = regex.exec (data); + return ( + (shebang_line ? shebang_line[0] : '') + + CopyrightGenerator.get_copyright_notice ( + this._options as CopyrightOptions, + res?.groups?.date + ) + + data.replace (regex, '') + .replace (shebang, '') + ); } }