diff --git a/src/index.js b/src/index.js index cb2d32f..2ff9224 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,5 @@ -const ora = require('ora') const _ = require('lodash') -const { logError } = require('./logging') +const { logger, logError } = require('./logging') const guessPathIfEmpty = require('./guess-path') const showSize = require('./show-size') @@ -22,7 +21,9 @@ async function deploy ({ remotePinners = ['infura'], dnsProviders = [], siteDomain, - credentials = {} + credentials = {}, + writeLog = null, + writeError = null } = {}) { publicDirPath = guessPathIfEmpty(publicDirPath) @@ -30,7 +31,7 @@ async function deploy ({ return undefined } - const readableSize = await showSize(publicDirPath) + const readableSize = await showSize(publicDirPath, { writeLog, writeError }) if (!readableSize) { return undefined @@ -54,9 +55,11 @@ async function deploy ({ let lastHash = null for (const pinnerName of remotePinners) { - const pinner = await pinnerProviders[_.camelCase(pinnerName)]( - credentials[_.camelCase(pinnerName)] || null - ) + const pinner = await pinnerProviders[_.camelCase(pinnerName)]({ + ...credentials[_.camelCase(pinnerName)], + writeLog, + writeError + }) if (!pinner) { return @@ -80,8 +83,8 @@ async function deploy ({ } if (!sameValues(pinnedHashes)) { - const spinner = ora() - spinner.fail('≠ Found inconsistency in pinned hashes:') + const log = logger({ writeLog, writeError }) + log.fail('≠ Found inconsistency in pinned hashes:') logError(pinnedHashes) return } diff --git a/src/logging.js b/src/logging.js index 843d3bb..ef5cfe8 100644 --- a/src/logging.js +++ b/src/logging.js @@ -1,6 +1,7 @@ const _ = require('lodash') const fp = require('lodash/fp') const neatFrame = require('neat-frame') +const ora = require('ora') const { stripIndent } = require('common-tags') function formatError (e) { @@ -28,4 +29,20 @@ function logError (e) { return errorString } -module.exports = { formatError, logError } +const logger = (options) => { + if (!(options.writeError && options.writeLog)) { + return ora() + } + + const stderr = options.writeError ? options.writeError : logError + const stdout = options.writeLog + + return { + fail: stderr, + succeed: stdout, + info: stdout, + start: stdout + } +} + +module.exports = { formatError, logError, logger } diff --git a/src/pinners/maker.js b/src/pinners/maker.js index d2ae5f7..e02eee1 100644 --- a/src/pinners/maker.js +++ b/src/pinners/maker.js @@ -1,7 +1,6 @@ -const ora = require('ora') const colors = require('colors/safe') const _ = require('lodash') -const { logError } = require('../logging') +const { logger, logError } = require('../logging') const { linkCid } = require('../url-utils') const white = colors.brightWhite @@ -19,35 +18,35 @@ module.exports = ({ name, builder, pinDir, pinHash }) => async options => { return { pinDir: async (dir, tag) => { - const spinner = ora() - spinner.start(`📠 Uploading and pinning to ${name}…`) + const log = logger(options) + log.start(`📠 Uploading and pinning to ${name}…`) try { const hash = await pinDir(api, dir, tag) - spinner.succeed(`📌 Added and pinned to ${name} with hash:`) - spinner.info(linkCid(hash, slug)) + log.succeed(`📌 Added and pinned to ${name} with hash:`) + log.info(linkCid(hash, slug)) return hash } catch (error) { - spinner.fail(`💔 Uploading to ${name} didn't work.`) + log.fail(`💔 Uploading to ${name} didn't work.`) logError(error) return undefined } }, pinHash: async (hash, tag) => { - const spinner = ora() - spinner.start(`📠 Pinning hash to ${name}…`) + const log = logger(options) + log.start(`📠 Pinning hash to ${name}…`) try { await pinHash(api, hash, tag) - spinner.succeed(`📌 Hash pinned to ${name}:`) - spinner.info(linkCid(hash, slug)) + log.succeed(`📌 Hash pinned to ${name}:`) + log.info(linkCid(hash, slug)) return hash } catch (error) { - spinner.fail(`💔 Pinning to ${name} didn't work.`) + log.fail(`💔 Pinning to ${name} didn't work.`) logError(error) return undefined } diff --git a/src/show-size.js b/src/show-size.js index 15b76d4..45e2f12 100644 --- a/src/show-size.js +++ b/src/show-size.js @@ -1,14 +1,13 @@ const util = require('util') const trammel = util.promisify(require('trammel')) const byteSize = require('byte-size') -const ora = require('ora') const colors = require('colors/safe') -const { logError } = require('./logging') +const { logger, logError } = require('./logging') -module.exports = async path => { - const spinner = ora() - spinner.start(`📦 Calculating size of ${colors.blue(path)}…`) +module.exports = async (path, options) => { + const log = logger(options) + log.start(`📦 Calculating size of ${colors.blue(path)}…`) try { const size = await trammel(path, { stopOnError: true, @@ -16,12 +15,12 @@ module.exports = async path => { }) const kibi = byteSize(size, { units: 'iec' }) const readableSize = `${kibi.value} ${kibi.unit}` - spinner.succeed( + log.succeed( `🚚 Directory ${colors.blue(path)} weighs ${readableSize}.` ) return readableSize } catch (e) { - spinner.fail("⚖ Couldn't calculate website size.") + log.fail("⚖ Couldn't calculate website size.") logError(e) return undefined }