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 })}"
>
- `
+ `;
}
/**
* 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."));
}