opencollective-postinstall
Advanced tools
Comparing version 1.0.18 to 1.1.0
101
bin/setup.js
#!/usr/bin/env node | ||
const utils = require('../lib/utils'); | ||
const utils = require("../lib/utils"); | ||
const debug = utils.debug; | ||
if (!utils.isDevEnvironment()) { | ||
debug("Not in dev environment"); | ||
process.exit(0); | ||
} | ||
const debug = utils.debug; | ||
// In some CI environment, NODE_ENV might not be defined. | ||
@@ -19,4 +19,4 @@ // We exit if `inquirer` module is not installed | ||
const inquirer = require('inquirer'); | ||
if (typeof inquirer.prompt([]).then !== 'function') { | ||
const inquirer = require("inquirer"); | ||
if (typeof inquirer.prompt([]).then !== "function") { | ||
debug("Wrong version of inquirer, exiting"); | ||
@@ -26,6 +26,6 @@ process.exit(0); | ||
const fs = require('fs'); | ||
const path = require('path'); | ||
const fetchData = require('../lib/fetchData'); | ||
const print = require('../lib/print'); | ||
const fs = require("fs"); | ||
const path = require("path"); | ||
const fetchData = require("../lib/fetchData"); | ||
const print = require("../lib/print"); | ||
@@ -36,6 +36,6 @@ const fetchLogo = fetchData.fetchLogo; | ||
const parentDir = process.cwd().split('/').slice(-2, -1)[0]; | ||
if (parentDir !== 'node_modules') { | ||
const parentDir = process.cwd().split(process.platform === 'win32' ? "\\" : "/").slice(-2, -1)[0]; | ||
if (parentDir !== "node_modules") { | ||
// No need to run the setup in standalone mode | ||
debug(`Parent dir (${parentDir}) is not "node_modules", exiting`); | ||
debug("Parent dir (" + parentDir + ") is not \"node_modules\", exiting"); | ||
debug("Current dir (cwd):", process.cwd()); | ||
@@ -45,11 +45,11 @@ process.exit(0); | ||
const projectPackageJSON = path.normalize('../../package.json'); | ||
const projectREADME = path.normalize('../../README.md'); | ||
const projectPackageJSON = path.normalize("../../package.json"); | ||
const projectREADME = path.normalize("../../README.md"); | ||
var package; | ||
try { | ||
package = JSON.parse(fs.readFileSync(projectPackageJSON, 'utf8')); | ||
debug(`package.json successfully loaded for ${package.name}`); | ||
package = JSON.parse(fs.readFileSync(projectPackageJSON, "utf8")); | ||
debug("package.json successfully loaded for " + package.name); | ||
} catch(e) { | ||
debug(`Unable to load ${process.cwd()}/${projectPackageJSON}`, e); | ||
debug("Unable to load " + process.cwd() + "/" + projectPackageJSON, e); | ||
} | ||
@@ -68,34 +68,41 @@ if (!package) { | ||
if (process.env.OC_POSTINSTALL_TEST) { | ||
return { | ||
collectiveSlug: package.name, | ||
logo: "https://opencollective.com/opencollective/logo.txt" | ||
}; | ||
} | ||
const questions = [ | ||
{ | ||
type: 'input', | ||
name: 'collectiveSlug', | ||
message: 'Enter the slug of your collective (https://opencollective.com/:slug)', | ||
type: "input", | ||
name: "collectiveSlug", | ||
message: "Enter the slug of your collective (https://opencollective.com/:slug)", | ||
default: package.name, | ||
validate: (str) => { | ||
if(str.match(/^[a-zA-Z\-0-9]+$/)) return true; | ||
else return 'Please enter a valid slug (e.g. https://opencollective.com/webpack)'; | ||
else return "Please enter a valid slug (e.g. https://opencollective.com/webpack)"; | ||
} | ||
}, | ||
{ | ||
type: 'list', | ||
name: 'showLogo', | ||
message: 'What logo should we use?', | ||
type: "list", | ||
name: "showLogo", | ||
message: "What logo should we use?", | ||
choices: (answers) => [ | ||
{ name: 'Open Collective logo (see above)', value: `https://opencollective.com/opencollective/logo.txt` }, | ||
{ name: `The logo of your Collective (https://opencollective.com/${answers.collectiveSlug}/logo.txt)`, value: `https://opencollective.com/${answers.collectiveSlug}/logo.txt` }, | ||
{ name: 'Custom URL', value: 'custom'}, | ||
{ name: 'No logo', value: null } | ||
{ name: "Open Collective logo (see above)", value: "https://opencollective.com/opencollective/logo.txt" }, | ||
{ name: "The logo of your Collective (https://opencollective.com/" + answers.collectiveSlug + "/logo.txt)", value: "https://opencollective.com/" + answers.collectiveSlug + "/logo.txt" }, | ||
{ name: "Custom URL", value: "custom"}, | ||
{ name: "No logo", value: null } | ||
] | ||
}, | ||
{ | ||
type: 'input', | ||
name: 'logo', | ||
message: 'URL of your logo in ASCII art', | ||
default: (answers) => `https://opencollective.com/${answers.collectiveSlug}/logo.txt`, | ||
type: "input", | ||
name: "logo", | ||
message: "URL of your logo in ASCII art", | ||
default: (answers) => "https://opencollective.com/" + answers.collectiveSlug + "/logo.txt", | ||
validate: (str) => { | ||
if(str.match(/^https?:\/\/[^\/]+\/.+$/)) return true; | ||
else return 'Please enter a valid url (e.g. https://opencollective.com/webpack/logo.txt)'; | ||
else return "Please enter a valid url (e.g. https://opencollective.com/webpack/logo.txt)"; | ||
}, | ||
when: (answers) => answers.showLogo === 'custom' | ||
when: (answers) => answers.showLogo === "custom" | ||
} | ||
@@ -115,6 +122,6 @@ ]; | ||
const ProcessAnswers = function(answers) { | ||
console.log(`> Updating your package.json`); | ||
console.log("> Updating your package.json"); | ||
package.collective = { | ||
type: "opencollective", | ||
url: `https://opencollective.com/${answers.collectiveSlug}` | ||
url: "https://opencollective.com/" + answers.collectiveSlug | ||
} | ||
@@ -127,10 +134,10 @@ const logo = answers.logo || answers.showLogo; | ||
} | ||
var postinstall = "node node_modules/.bin/opencollective-postinstall || exit"; | ||
var postinstall = "opencollective-postinstall || exit 0"; | ||
package.scripts = package.scripts || {}; | ||
if (package.scripts.postinstall && package.scripts.postinstall.indexOf(postinstall) === -1) { | ||
package.scripts.postinstall = `${package.scripts.postinstall} && ${postinstall}`; | ||
package.scripts.postinstall = package.scripts.postinstall + " && " + postinstall; | ||
} else { | ||
package.scripts.postinstall = postinstall; | ||
} | ||
fs.writeFileSync(projectPackageJSON, JSON.stringify(package, null, 2), 'utf8'); | ||
fs.writeFileSync(projectPackageJSON, JSON.stringify(package, null, 2), "utf8"); | ||
return updateREADME(answers.collectiveSlug); | ||
@@ -140,12 +147,10 @@ } | ||
const updateREADME = function(collectiveSlug) { | ||
const badgesmd = `[![Backers on Open Collective](https://opencollective.com/${collectiveSlug}/backers/badge.svg)](#backers) | ||
[![Sponsors on Open Collective](https://opencollective.com/${collectiveSlug}/sponsors/badge.svg)](#sponsors)`; | ||
const badgeshtml = `<a href="#backers" alt="sponsors on Open Collective"><img src="https://opencollective.com/${collectiveSlug}/backers/badge.svg" /></a> | ||
<a href="#sponsors" alt="Sponsors on Open Collective"><img src="https://opencollective.com/${collectiveSlug}/sponsors/badge.svg" /></a>`; | ||
const badgesmd = "[![Backers on Open Collective](https://opencollective.com/" + collectiveSlug + "/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/" + collectiveSlug + "/sponsors/badge.svg)](#sponsors)"; | ||
const badgeshtml = "<a href=\"#backers\" alt=\"sponsors on Open Collective\"><img src=\"https://opencollective.com/" + collectiveSlug + "/backers/badge.svg\" /></a> <a href=\"#sponsors\" alt=\"Sponsors on Open Collective\"><img src=\"https://opencollective.com/" + collectiveSlug + "/sponsors/badge.svg\" /></a>"; | ||
var readme; | ||
try { | ||
readme = fs.readFileSync(projectREADME, 'utf8'); | ||
readme = fs.readFileSync(projectREADME, "utf8"); | ||
if (readme.indexOf(`https://opencollective.com/${collectiveSlug}/backers/badge.svg`) !== -1) { | ||
if (readme.indexOf("https://opencollective.com/" + collectiveSlug + "/backers/badge.svg") !== -1) { | ||
console.log("Looks like you already have Open Collective added to your README.md, skipping this step.") | ||
@@ -155,3 +160,3 @@ return; | ||
const lines = readme.split('\n'); | ||
const lines = readme.split("\n"); | ||
const newLines = []; | ||
@@ -171,3 +176,3 @@ | ||
console.log("> Adding badges and placeholders for backers and sponsors on your README.md"); | ||
return fs.writeFileSync(projectREADME, newLines.join('\n'), 'utf8'); | ||
return fs.writeFileSync(projectREADME, newLines.join("\n"), "utf8"); | ||
}); | ||
@@ -174,0 +179,0 @@ } catch(e) { |
@@ -31,3 +31,3 @@ const execSync = require('child_process').execSync; | ||
opts.align = opts.align || 'center'; | ||
const terminalCols = parseInt(execSync(`tput cols`).toString()); | ||
const terminalCols = process.platform === 'win32' ? 80 : parseInt(execSync(`tput cols`).toString()); | ||
const strLength = str.replace(/\u001b\[[0-9]{2}m/g,'').length; | ||
@@ -34,0 +34,0 @@ const leftPaddingLength = (opts.align === 'center') ? Math.floor((terminalCols - strLength) / 2) : 2; |
{ | ||
"name": "opencollective-postinstall", | ||
"version": "1.0.18", | ||
"version": "1.1.0", | ||
"description": "Prompt users to donate after they install your node module with npm install", | ||
@@ -11,7 +11,7 @@ "main": "index.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1", | ||
"test": "mocha test", | ||
"postinstall": "node bin/setup.js" | ||
}, | ||
"bin": { | ||
"opencollective-postinstall": "./bin/opencollective-postinstall.js" | ||
"opencollective-postinstall": "./bin/opencollective-postinstall" | ||
}, | ||
@@ -35,3 +35,8 @@ "keywords": [ | ||
"inquirer": "^3.0.6" | ||
}, | ||
"devDependencies": { | ||
"chai": "3.5.0", | ||
"cross-env": "^4.0.0", | ||
"mocha": "3.2.0" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
26298
15
1
13
3
383
5