From 3eb913dcb5ccd1a4ea5d44df80a0227c772a8997 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Fri, 6 Sep 2019 09:43:37 +0200 Subject: [PATCH] :bug: Fixed catch block in reconfigure script --- scripts/reconfigure.js | 418 +++++++++++++++++++++++------------------ 1 file changed, 231 insertions(+), 187 deletions(-) diff --git a/scripts/reconfigure.js b/scripts/reconfigure.js index 4eae6986878..f8a682250a7 100644 --- a/scripts/reconfigure.js +++ b/scripts/reconfigure.js @@ -1,48 +1,58 @@ /* eslint-disable no-console */ -const path = require('path') -const fs = require('fs') -const fse = require('fs-extra') -const glob = require('glob') -const yaml = require('js-yaml') -const chalk = require('chalk') -const handlebars = require('handlebars') -const Mustache = require('mustache') -const { version } = require('../lerna.json') +const path = require("path"); +const fs = require("fs"); +const fse = require("fs-extra"); +const glob = require("glob"); +const yaml = require("js-yaml"); +const chalk = require("chalk"); +const handlebars = require("handlebars"); +const Mustache = require("mustache"); +const { version } = require("../lerna.json"); -const repoPath = process.cwd() +const repoPath = process.cwd(); const config = { repoPath, - defaults: readConfigFile('defaults.yaml'), - descriptions: readConfigFile('descriptions.yaml'), - keywords: readConfigFile('keywords.yaml'), - badges: readConfigFile('badges.yaml'), - scripts: readConfigFile('scripts.yaml'), - changelog: readConfigFile('changelog.yaml'), - changetypes: ['Added', 'Changed', 'Deprecated', 'Removed', 'Fixed', 'Security'], - dependencies: readConfigFile('dependencies.yaml', { version }), - exceptions: readConfigFile('exceptions.yaml'), + defaults: readConfigFile("defaults.yaml"), + descriptions: readConfigFile("descriptions.yaml"), + keywords: readConfigFile("keywords.yaml"), + badges: readConfigFile("badges.yaml"), + scripts: readConfigFile("scripts.yaml"), + changelog: readConfigFile("changelog.yaml"), + changetypes: [ + "Added", + "Changed", + "Deprecated", + "Removed", + "Fixed", + "Security" + ], + dependencies: readConfigFile("dependencies.yaml", { version }), + exceptions: readConfigFile("exceptions.yaml"), templates: { - pkg: readTemplateFile('package.dflt.json'), - rollup: readTemplateFile('rollup.config.dflt.js'), - changelog: readTemplateFile('changelog.dflt.md'), - readme: readTemplateFile('readme.dflt.md') + pkg: readTemplateFile("package.dflt.json"), + rollup: readTemplateFile("rollup.config.dflt.js"), + changelog: readTemplateFile("changelog.dflt.md"), + readme: readTemplateFile("readme.dflt.md") } -} +}; -const packages = glob.sync('*', { - cwd: path.join(config.repoPath, 'packages') -}) +const packages = glob.sync("*", { + cwd: path.join(config.repoPath, "packages") +}); -validate(packages, config) -reconfigure(packages, config) +validate(packages, config); +reconfigure(packages, config); -process.exit() +process.exit(); /** * Reads a template file */ function readTemplateFile(file) { - return fs.readFileSync(path.join(repoPath, 'config', 'templates', file), 'utf-8') + return fs.readFileSync( + path.join(repoPath, "config", "templates", file), + "utf-8" + ); } /** @@ -53,25 +63,25 @@ function readExampleFile(file, subdir = false) { subdir ? path.join( repoPath, - 'packages', - 'create-freesewing-pattern', - 'template', - 'default', - 'example', + "packages", + "create-freesewing-pattern", + "template", + "default", + "example", file ) : path.join( repoPath, - 'packages', - 'create-freesewing-pattern', - 'template', - 'default', - 'example', + "packages", + "create-freesewing-pattern", + "template", + "default", + "example", subdir, file ), - 'utf-8' - ) + "utf-8" + ); } /** @@ -80,9 +90,14 @@ function readExampleFile(file, subdir = false) { function readConfigFile(file, replace = false) { if (replace) return yaml.safeLoad( - Mustache.render(fs.readFileSync(path.join(repoPath, 'config', file), 'utf-8'), replace) - ) - return yaml.safeLoad(fs.readFileSync(path.join(repoPath, 'config', file), 'utf-8')) + Mustache.render( + fs.readFileSync(path.join(repoPath, "config", file), "utf-8"), + replace + ) + ); + return yaml.safeLoad( + fs.readFileSync(path.join(repoPath, "config", file), "utf-8") + ); } /** @@ -90,14 +105,17 @@ function readConfigFile(file, replace = false) { * Returns its contents if it exists, or an empty string if not */ function readInfoFile(pkg) { - let markup = '' + let markup = ""; try { - markup = fs.readFileSync(path.join(repoPath, 'packages', pkg, 'info.md'), 'utf-8') - } catch { - return '' + markup = fs.readFileSync( + path.join(repoPath, "packages", pkg, "info.md"), + "utf-8" + ); + } catch (err) { + return ""; } - return markup + return markup; } /** @@ -108,23 +126,25 @@ function readInfoFile(pkg) { * - other */ function packageType(pkg, config) { - if (pkg.substring(0, 7) === 'plugin-') return 'plugin' - if (config.descriptions[pkg].substring(0, 21) === 'A FreeSewing pattern ') return 'pattern' - return 'other' + if (pkg.substring(0, 7) === "plugin-") return "plugin"; + if (config.descriptions[pkg].substring(0, 21) === "A FreeSewing pattern ") + return "pattern"; + return "other"; } /** * Returns an array of keywords for a package */ function keywords(pkg, config, type) { - if (typeof config.keywords[pkg] !== 'undefined') return config.keywords[pkg] - if (typeof config.keywords[type] !== 'undefined') return config.keywords[type] + if (typeof config.keywords[pkg] !== "undefined") return config.keywords[pkg]; + if (typeof config.keywords[type] !== "undefined") + return config.keywords[type]; else { console.log( - chalk.redBright.bold('Problem:'), + chalk.redBright.bold("Problem:"), chalk.redBright(`No keywords for package ${pkg} which is of type ${type}`) - ) - process.exit() + ); + process.exit(); } } @@ -132,30 +152,30 @@ function keywords(pkg, config, type) { * Returns an plain object of scripts for a package */ function scripts(pkg, config, type) { - let runScripts = {} + let runScripts = {}; for (let key of Object.keys(config.scripts._)) { runScripts[key] = Mustache.render(config.scripts._[key], { name: pkg - }) + }); } - if (typeof config.scripts._types[type] !== 'undefined') { + if (typeof config.scripts._types[type] !== "undefined") { for (let key of Object.keys(config.scripts._types[type])) { runScripts[key] = Mustache.render(config.scripts._types[type][key], { name: pkg - }) + }); } } - if (typeof config.scripts[pkg] !== 'undefined') { + if (typeof config.scripts[pkg] !== "undefined") { for (let key of Object.keys(config.scripts[pkg])) { - if (config.scripts[pkg][key] === '!') delete runScripts[key] + if (config.scripts[pkg][key] === "!") delete runScripts[key]; else runScripts[key] = Mustache.render(config.scripts[pkg][key], { name: pkg - }) + }); } } - return runScripts + return runScripts; } /** @@ -168,78 +188,82 @@ function scripts(pkg, config, type) { * */ function deps(section, pkg, config, type) { - let dependencies = {} + let dependencies = {}; if ( - typeof config.dependencies._types[type] !== 'undefined' && - typeof config.dependencies._types[type][section] !== 'undefined' + typeof config.dependencies._types[type] !== "undefined" && + typeof config.dependencies._types[type][section] !== "undefined" ) - dependencies = config.dependencies._types[type][section] - if (typeof config.dependencies[pkg] === 'undefined') return dependencies - if (typeof config.dependencies[pkg][section] !== 'undefined') - return { ...dependencies, ...config.dependencies[pkg][section] } + dependencies = config.dependencies._types[type][section]; + if (typeof config.dependencies[pkg] === "undefined") return dependencies; + if (typeof config.dependencies[pkg][section] !== "undefined") + return { ...dependencies, ...config.dependencies[pkg][section] }; - return dependencies + return dependencies; } /** * These merely call deps() for the relevant dependency section */ function dependencies(pkg, config, type) { - return deps('_', pkg, config, type) + return deps("_", pkg, config, type); } function devDependencies(pkg, config, type) { - return deps('dev', pkg, config, type) + return deps("dev", pkg, config, type); } function peerDependencies(pkg, config, type) { - return deps('peer', pkg, config, type) + return deps("peer", pkg, config, type); } /** * Creates a package.json file for a package */ function packageConfig(pkg, config) { - let type = packageType(pkg, config) - let pkgConf = {} + let type = packageType(pkg, config); + let pkgConf = {}; // Let's keep these at the top - pkgConf.name = fullName(pkg, config) - pkgConf.version = version - pkgConf.description = config.descriptions[pkg] + pkgConf.name = fullName(pkg, config); + pkgConf.version = version; + pkgConf.description = config.descriptions[pkg]; pkgConf = { ...pkgConf, ...JSON.parse(Mustache.render(config.templates.pkg, { name: pkg })) - } - pkgConf.keywords = pkgConf.keywords.concat(keywords(pkg, config, type)) - pkgConf.scripts = scripts(pkg, config, type) - pkgConf.dependencies = dependencies(pkg, config, type) - pkgConf.devDependencies = devDependencies(pkg, config, type) - pkgConf.peerDependencies = peerDependencies(pkg, config, type) - if (typeof config.exceptions.packageJson[pkg] !== 'undefined') { + }; + pkgConf.keywords = pkgConf.keywords.concat(keywords(pkg, config, type)); + pkgConf.scripts = scripts(pkg, config, type); + pkgConf.dependencies = dependencies(pkg, config, type); + pkgConf.devDependencies = devDependencies(pkg, config, type); + pkgConf.peerDependencies = peerDependencies(pkg, config, type); + if (typeof config.exceptions.packageJson[pkg] !== "undefined") { pkgConf = { ...pkgConf, ...config.exceptions.packageJson[pkg] - } + }; for (let key of Object.keys(config.exceptions.packageJson[pkg])) { - if (config.exceptions.packageJson[pkg][key] === '!') delete pkgConf[key] + if (config.exceptions.packageJson[pkg][key] === "!") delete pkgConf[key]; } } - return pkgConf + return pkgConf; } /** * Returns an string with the markup for badges in the readme file */ function badges(pkg, config) { - let markup = '' - for (let group of ['_all', '_social']) { - markup += "

" + let markup = ""; + for (let group of ["_all", "_social"]) { + markup += "

"; for (let key of Object.keys(config.badges[group])) { - markup += formatBadge(config.badges[group][key], pkg, fullName(pkg, config)) + markup += formatBadge( + config.badges[group][key], + pkg, + fullName(pkg, config) + ); } - markup += '

' + markup += "

"; } - return markup + return markup; } /** @@ -251,14 +275,14 @@ function formatBadge(badge, name, fullname) { title="${Mustache.render(badge.alt, { name, fullname })}" >${Mustache.render(badge.alt, { name, fullname })} - ` + `; } /** * Returns the full (namespaced) name of a package */ function fullName(pkg, config) { - if (config.exceptions.noNamespace.indexOf(pkg) !== -1) return pkg - else return `@freesewing/${pkg}` + if (config.exceptions.noNamespace.indexOf(pkg) !== -1) return pkg; + else return `@freesewing/${pkg}`; } /** @@ -270,9 +294,9 @@ function readme(pkg, config) { description: config.descriptions[pkg], badges: badges(pkg, config), info: readInfoFile(pkg) - }) + }); - return markup + return markup; } /** @@ -280,102 +304,106 @@ function readme(pkg, config) { */ function changelog(pkg, config) { let markup = Mustache.render(config.templates.changelog, { - fullname: pkg === 'global' ? 'FreeSewing (global)' : fullName(pkg, config), - changelog: pkg === 'global' ? globalChangelog(config) : packageChangelog(pkg, config) - }) + fullname: pkg === "global" ? "FreeSewing (global)" : fullName(pkg, config), + changelog: + pkg === "global" ? globalChangelog(config) : packageChangelog(pkg, config) + }); - return markup + return markup; } /** * Generates the global changelog data */ function globalChangelog(config) { - let markup = '' + let markup = ""; for (let v in config.changelog) { - let changes = config.changelog[v] - markup += '\n## ' + v - if (v !== 'Unreleased') markup += ' (' + formatDate(changes.date) + ')' - markup += '\n\n' + let changes = config.changelog[v]; + markup += "\n## " + v; + if (v !== "Unreleased") markup += " (" + formatDate(changes.date) + ")"; + markup += "\n\n"; for (let pkg of packages) { - let changed = false + let changed = false; for (let type of config.changetypes) { if ( - typeof changes[type] !== 'undefined' && + typeof changes[type] !== "undefined" && changes[type] !== null && - typeof changes[type][pkg] !== 'undefined' && + typeof changes[type][pkg] !== "undefined" && changes[type][pkg] !== null ) { - if (!changed) changed = '' - changed += '\n#### ' + type + '\n\n' - for (let change of changes[type][pkg]) changed += ' - ' + change + '\n' + if (!changed) changed = ""; + changed += "\n#### " + type + "\n\n"; + for (let change of changes[type][pkg]) + changed += " - " + change + "\n"; } } - if (changed) markup += '### ' + pkg + '\n' + changed + '\n' + if (changed) markup += "### " + pkg + "\n" + changed + "\n"; } } - return markup + return markup; } /** * Generates the changelog data for a package */ function packageChangelog(pkg, config) { - let markup = '' + let markup = ""; for (let v in config.changelog) { - let changes = config.changelog[v] - let changed = false + let changes = config.changelog[v]; + let changed = false; for (let type of config.changetypes) { if ( - typeof changes[type] !== 'undefined' && + typeof changes[type] !== "undefined" && changes[type] !== null && - typeof changes[type][pkg] !== 'undefined' && + typeof changes[type][pkg] !== "undefined" && changes[type][pkg] !== null ) { - if (!changed) changed = '' - changed += '\n### ' + type + '\n\n' - for (let change of changes[type][pkg]) changed += ' - ' + change + '\n' + if (!changed) changed = ""; + changed += "\n### " + type + "\n\n"; + for (let change of changes[type][pkg]) changed += " - " + change + "\n"; } } - markup += '## ' + v - if (v !== 'Unreleased') markup += ' (' + formatDate(changes.date) + ')' - markup += '\n' - markup += changed ? changed : `\n**Note:** Version bump only for package ${pkg}\n\n\n` + markup += "## " + v; + if (v !== "Unreleased") markup += " (" + formatDate(changes.date) + ")"; + markup += "\n"; + markup += changed + ? changed + : `\n**Note:** Version bump only for package ${pkg}\n\n\n`; } - return markup + return markup; } function formatDate(date) { let d = new Date(date), - month = '' + (d.getMonth() + 1), - day = '' + d.getDate(), - year = d.getFullYear() + month = "" + (d.getMonth() + 1), + day = "" + d.getDate(), + year = d.getFullYear(); - if (month.length < 2) month = '0' + month - if (day.length < 2) day = '0' + day + if (month.length < 2) month = "0" + month; + if (day.length < 2) day = "0" + day; - return [year, month, day].join('-') + return [year, month, day].join("-"); } /** * Make sure we have (at least) a description for each package */ function validate(pkgs, config) { - console.log(chalk.blueBright('Validating package descriptions')) + console.log(chalk.blueBright("Validating package descriptions")); for (let pkg of pkgs) { - if (typeof config.descriptions[pkg] !== 'string') { + if (typeof config.descriptions[pkg] !== "string") { console.log( - chalk.redBright.bold('Problem:'), + chalk.redBright.bold("Problem:"), chalk.redBright(`No description for package ${pkg}`) - ) - process.exit() + ); + process.exit(); } } - console.log(chalk.yellowBright.bold('Looks good')) + console.log(chalk.yellowBright.bold("Looks good")); - return true + return true; } /** @@ -386,41 +414,50 @@ function configurePatternExample(pkg, config) { // Create example dir structure let source = path.join( config.repoPath, - 'packages', - 'create-freesewing-pattern', - 'template', - 'default', - 'example' - ) - let dest = path.join(config.repoPath, 'packages', pkg, 'example') - fse.ensureDirSync(path.join(dest, 'src')) - fse.ensureDirSync(path.join(dest, 'public')) + "packages", + "create-freesewing-pattern", + "template", + "default", + "example" + ); + let dest = path.join(config.repoPath, "packages", pkg, "example"); + fse.ensureDirSync(path.join(dest, "src")); + fse.ensureDirSync(path.join(dest, "public")); // Copy files - for (let file of ['.babelrc', '.env']) - fs.copyFileSync(path.join(source, file), path.join(dest, file)) - for (let file of ['index.js', 'serviceWorker.js']) - fs.copyFileSync(path.join(source, 'src', file), path.join(dest, 'src', file)) + for (let file of [".babelrc", ".env"]) + fs.copyFileSync(path.join(source, file), path.join(dest, file)); + for (let file of ["index.js", "serviceWorker.js"]) + fs.copyFileSync( + path.join(source, "src", file), + path.join(dest, "src", file) + ); fs.copyFileSync( - path.join(source, 'public', 'favicon.ico'), - path.join(dest, 'public', 'favicon.ico') - ) + path.join(source, "public", "favicon.ico"), + path.join(dest, "public", "favicon.ico") + ); // Write templates let replace = { name: pkg, - author: 'freesewing', + author: "freesewing", yarn: true, - language: 'en' + language: "en" + }; + for (let file of ["package.json", "README.md"]) { + let template = handlebars.compile( + fs.readFileSync(path.join(source, file), "utf-8") + ); + fs.writeFileSync(path.join(dest, file), template(replace)); } - for (let file of ['package.json', 'README.md']) { - let template = handlebars.compile(fs.readFileSync(path.join(source, file), 'utf-8')) - fs.writeFileSync(path.join(dest, file), template(replace)) + for (let file of ["index.html", "manifest.json"]) { + let template = handlebars.compile( + fs.readFileSync(path.join(source, "public", file), "utf-8") + ); + fs.writeFileSync(path.join(dest, "public", file), template(replace)); } - for (let file of ['index.html', 'manifest.json']) { - let template = handlebars.compile(fs.readFileSync(path.join(source, 'public', file), 'utf-8')) - fs.writeFileSync(path.join(dest, 'public', file), template(replace)) - } - let template = handlebars.compile(fs.readFileSync(path.join(source, 'src', 'App.js'), 'utf-8')) - fs.writeFileSync(path.join(dest, 'src', 'App.js'), template(replace)) + let template = handlebars.compile( + fs.readFileSync(path.join(source, "src", "App.js"), "utf-8") + ); + fs.writeFileSync(path.join(dest, "src", "App.js"), template(replace)); } /** @@ -431,25 +468,32 @@ function configurePatternExample(pkg, config) { */ function reconfigure(pkgs, config) { for (let pkg of pkgs) { - console.log(chalk.blueBright(`Reconfiguring ${pkg}`)) - let pkgConfig = packageConfig(pkg, config) + console.log(chalk.blueBright(`Reconfiguring ${pkg}`)); + let pkgConfig = packageConfig(pkg, config); fs.writeFileSync( - path.join(config.repoPath, 'packages', pkg, 'package.json'), - JSON.stringify(pkgConfig, null, 2) + '\n' - ) + path.join(config.repoPath, "packages", pkg, "package.json"), + JSON.stringify(pkgConfig, null, 2) + "\n" + ); if (config.exceptions.customRollup.indexOf(pkg) === -1) { fs.writeFileSync( - path.join(config.repoPath, 'packages', pkg, 'rollup.config.js'), + path.join(config.repoPath, "packages", pkg, "rollup.config.js"), config.templates.rollup - ) + ); } - fs.writeFileSync(path.join(config.repoPath, 'packages', pkg, 'README.md'), readme(pkg, config)) fs.writeFileSync( - path.join(config.repoPath, 'packages', pkg, 'CHANGELOG.md'), + path.join(config.repoPath, "packages", pkg, "README.md"), + readme(pkg, config) + ); + fs.writeFileSync( + path.join(config.repoPath, "packages", pkg, "CHANGELOG.md"), changelog(pkg, config) - ) - if (packageType(pkg, config) === 'pattern') configurePatternExample(pkg, config) + ); + if (packageType(pkg, config) === "pattern") + configurePatternExample(pkg, config); } - fs.writeFileSync(path.join(config.repoPath, 'CHANGELOG.md'), changelog('global', config)) - console.log(chalk.yellowBright.bold('All done.')) + fs.writeFileSync( + path.join(config.repoPath, "CHANGELOG.md"), + changelog("global", config) + ); + console.log(chalk.yellowBright.bold("All done.")); }