123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var fetch = require('node-fetch');
- var child_process = require('child_process');
- var chalk = require('chalk');
- var consola = require('consola');
- var path = require('path');
- var fs = require('fs');
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
- var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
- var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
- var consola__default = /*#__PURE__*/_interopDefaultLegacy(consola);
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
- var reportAndThrowError = function reportAndThrowError(msg) {
- report(msg);
- throw new Error(msg);
- };
- var report = function report(message) {
- consola__default['default'].debug({
- message: String(message),
- tag: 'opencollective'
- });
- };
- var hideMessage = function hideMessage() {
- var env = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : process.env;
- // Show message if it is forced
- if (env.OPENCOLLECTIVE_FORCE) {
- return false;
- } // Don't show after oracle postinstall
- if (env.OC_POSTINSTALL_TEST) {
- return true;
- } // Don't show if opted-out
- if (env.OPENCOLLECTIVE_HIDE) {
- return true;
- } // Compatability with opencollective-postinstall
- if (!!env.DISABLE_OPENCOLLECTIVE && env.DISABLE_OPENCOLLECTIVE !== '0' && env.DISABLE_OPENCOLLECTIVE !== 'false') {
- return true;
- } // Don't show if on CI
- if (env.CI || env.CONTINUOUS_INTEGRATION) {
- return true;
- } // Only show in dev environment
- return Boolean(env.NODE_ENV) && !['dev', 'development'].includes(env.NODE_ENV);
- };
- var formatMoney = function formatMoney(currency) {
- return function (amount) {
- amount = amount / 100; // converting cents
- var precision = 0;
- return amount.toLocaleString(currency, {
- style: 'currency',
- currency: currency,
- minimumFractionDigits: precision,
- maximumFractionDigits: precision
- });
- };
- };
- var isWin32 = process.platform === 'win32';
- var stripLeadingSlash = function stripLeadingSlash(s) {
- return s.startsWith('/') ? s.substring(1) : s;
- };
- var stripTrailingSlash = function stripTrailingSlash(s) {
- return s.endsWith('/') ? s.slice(0, -1) : s;
- };
- /* eslint-disable no-console */
- var print = function print() {
- var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
- return function () {
- var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var terminalCols = retrieveCols();
- var strLength = str.replace(/\u001B\[[0-9]{2}m/g, '').length;
- var leftPaddingLength = Math.floor((terminalCols - strLength) / 2);
- var leftPadding = ' '.repeat(Math.max(leftPaddingLength, 0));
- if (color) {
- str = chalk__default['default'][color](str);
- }
- console.log(leftPadding, str);
- };
- };
- var retrieveCols = function () {
- var result = false;
- return function () {
- if (result) {
- return result;
- }
- var defaultCols = 80;
- try {
- var terminalCols = child_process.execSync('tput cols', {
- stdio: ['pipe', 'pipe', 'ignore']
- });
- result = parseInt(terminalCols.toString()) || defaultCols;
- } catch (e) {
- result = defaultCols;
- }
- return result;
- };
- }();
- var printStats = function printStats(stats, color) {
- if (!stats) {
- return;
- }
- var colored = print(color);
- var bold = print('bold');
- var formatWithCurrency = formatMoney(stats.currency);
- colored("Number of contributors: ".concat(stats.contributorsCount));
- colored("Number of backers: ".concat(stats.backersCount));
- colored("Annual budget: ".concat(formatWithCurrency(stats.yearlyIncome)));
- bold("Current balance: ".concat(formatWithCurrency(stats.balance)), 'bold');
- };
- var printLogo = function printLogo(logoText) {
- if (!logoText) {
- return;
- }
- logoText.split('\n').forEach(print('blue'));
- };
- /**
- * Only show emoji on OSx (Windows shell doesn't like them that much ¯\_(ツ)_/¯ )
- * @param {*} emoji
- */
- var emoji = function emoji(_emoji) {
- return process.stdout.isTTY && !isWin32 ? _emoji : '';
- };
- function printFooter(collective) {
- var dim = print('dim');
- var yellow = print('yellow');
- var emptyLine = print();
- yellow("Thanks for installing ".concat(collective.slug, " ").concat(emoji('🙏')));
- dim('Please consider donating to our open collective');
- dim('to help us maintain this package.');
- emptyLine();
- printStats(collective.stats);
- emptyLine();
- print()("".concat(chalk__default['default'].bold("".concat(emoji('👉 '), " ").concat(collective.donationText)), " ").concat(chalk__default['default'].underline(collective.donationUrl)));
- emptyLine();
- }
- function _slicedToArray(arr, i) {
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
- }
- function _arrayWithHoles(arr) {
- if (Array.isArray(arr)) return arr;
- }
- function _iterableToArrayLimit(arr, i) {
- if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
- var _arr = [];
- var _n = true;
- var _d = false;
- var _e = undefined;
- try {
- for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
- _arr.push(_s.value);
- if (i && _arr.length === i) break;
- }
- } catch (err) {
- _d = true;
- _e = err;
- } finally {
- try {
- if (!_n && _i["return"] != null) _i["return"]();
- } finally {
- if (_d) throw _e;
- }
- }
- return _arr;
- }
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return;
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
- var n = Object.prototype.toString.call(o).slice(8, -1);
- if (n === "Object" && o.constructor) n = o.constructor.name;
- if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
- }
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length;
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
- return arr2;
- }
- function _nonIterableRest() {
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
- function _await(value, then, direct) {
- if (direct) {
- return then ? then(value) : value;
- }
- if (!value || !value.then) {
- value = Promise.resolve(value);
- }
- return then ? value.then(then) : value;
- }
- var FETCH_TIMEOUT = 3000;
- function _catch(body, recover) {
- try {
- var result = body();
- } catch (e) {
- return recover(e);
- }
- if (result && result.then) {
- return result.then(void 0, recover);
- }
- return result;
- }
- var fetchJson = _async(function (url) {
- return _catch(function () {
- return _await(global.fetch("".concat(url, ".json"), {
- timeout: FETCH_TIMEOUT
- }), function (_global$fetch) {
- return _global$fetch.json();
- });
- }, function (e) {
- report(e);
- reportAndThrowError("Could not fetch ".concat(url, ".json"));
- });
- });
- function _async(f) {
- return function () {
- for (var args = [], i = 0; i < arguments.length; i++) {
- args[i] = arguments[i];
- }
- try {
- return Promise.resolve(f.apply(this, args));
- } catch (e) {
- return Promise.reject(e);
- }
- };
- }
- var fetchStats = _async(function (collectiveUrl) {
- return _catch(function () {
- return _await(fetchJson(collectiveUrl));
- }, function (e) {
- report(e);
- report("Could not load the stats for ".concat(collectiveSlugFromUrl(collectiveUrl)));
- });
- });
- var fetchLogo = _async(function (logoUrl) {
- if (!logoUrl) {
- // Silent return if no logo has been provided
- return;
- }
- if (!logoUrl.match(/^https?:\/\//)) {
- reportAndThrowError("Your logo URL isn't well-formatted - ".concat(logoUrl));
- }
- return _catch(function () {
- return _await(global.fetch(logoUrl, {
- timeout: FETCH_TIMEOUT
- }), function (res) {
- if (isLogoResponseWellFormatted(res)) {
- return res.text();
- }
- report("Error while fetching logo from ".concat(logoUrl, ". The response wasn't well-formatted"));
- });
- }, function () {
- report("Error while fetching logo from ".concat(logoUrl));
- });
- });
- var isLogoResponseWellFormatted = function isLogoResponseWellFormatted(res) {
- return res.status === 200 && res.headers.get('content-type').match(/^text\/plain/);
- };
- var fetchPkg = function fetchPkg(pathToPkg) {
- var fullPathToPkg = path__default['default'].resolve("".concat(pathToPkg, "/package.json"));
- try {
- return JSON.parse(fs__default['default'].readFileSync(fullPathToPkg, 'utf8'));
- } catch (e) {
- reportAndThrowError("Could not find package.json at ".concat(fullPathToPkg));
- }
- };
- function _await$1(value, then, direct) {
- if (direct) {
- return then ? then(value) : value;
- }
- if (!value || !value.then) {
- value = Promise.resolve(value);
- }
- return then ? value.then(then) : value;
- }
- function _async$1(f) {
- return function () {
- for (var args = [], i = 0; i < arguments.length; i++) {
- args[i] = arguments[i];
- }
- try {
- return Promise.resolve(f.apply(this, args));
- } catch (e) {
- return Promise.reject(e);
- }
- };
- }
- var collectiveSlugFromUrl = function collectiveSlugFromUrl(url) {
- return url.substr(url.lastIndexOf('/') + 1).toLowerCase().replace(/\.json/g, '');
- };
- var collectiveUrl = function collectiveUrl(pkg) {
- var url = pkg.collective && pkg.collective.url;
- if (!url) {
- reportAndThrowError('No collective URL set!');
- }
- return stripTrailingSlash(url);
- }; // use pkg.collective.logo for "legacy"/compatibility reasons
- var collectiveLogoUrl = function collectiveLogoUrl(pkg) {
- return pkg.collective.logo || pkg.collective.logoUrl || false;
- };
- var collectiveDonationText = function collectiveDonationText(pkg) {
- return pkg.collective.donation && pkg.collective.donation.text || 'Donate:';
- };
- var getCollective = _async$1(function (pkgPath) {
- var pkg = fetchPkg(pkgPath);
- var url = collectiveUrl(pkg);
- var baseCollective = {
- url: url,
- slug: collectiveSlugFromUrl(url),
- logoUrl: collectiveLogoUrl(pkg),
- donationUrl: collectiveDonationUrl(pkg),
- donationText: collectiveDonationText(pkg)
- };
- var logoUrl = baseCollective.logoUrl;
- var promises = [fetchStats(url)].concat(logoUrl ? fetchLogo(logoUrl) : []);
- return _await$1(Promise.all(promises), function (_ref) {
- var _ref2 = _slicedToArray(_ref, 2),
- stats = _ref2[0],
- logo = _ref2[1];
- return Object.assign(baseCollective, {
- stats: stats,
- logo: logo
- });
- });
- });
- var collectiveDonationUrl = function collectiveDonationUrl(pkg) {
- var defaultDonationAmount = pkg.collective.donation && pkg.collective.donation.amount;
- var donateUrl = "".concat(collectiveUrl(pkg), "/").concat(retrieveDonationSlug(pkg));
- if (defaultDonationAmount) {
- return "".concat(donateUrl, "/").concat(defaultDonationAmount);
- }
- return donateUrl;
- };
- var retrieveDonationSlug = function retrieveDonationSlug(pkg) {
- var rawDonationSlug = pkg.collective.donation && pkg.collective.donation.slug;
- if (!rawDonationSlug) {
- return 'donate';
- }
- return stripLeadingSlash(rawDonationSlug);
- };
- function _await$2(value, then, direct) {
- if (direct) {
- return then ? then(value) : value;
- }
- if (!value || !value.then) {
- value = Promise.resolve(value);
- }
- return then ? value.then(then) : value;
- }
- function _async$2(f) {
- return function () {
- for (var args = [], i = 0; i < arguments.length; i++) {
- args[i] = arguments[i];
- }
- try {
- return Promise.resolve(f.apply(this, args));
- } catch (e) {
- return Promise.reject(e);
- }
- };
- }
- var init = _async$2(function (path, hide) {
- if (hide === undefined) hide = hideMessage();
- if (hide) {
- return;
- }
- global.fetch = global.fetch || fetch__default['default'];
- return _await$2(getCollective(path), function (collective) {
- printLogo(collective.logo);
- printFooter(collective);
- });
- });
- exports.init = init;
|