etcher/lib/cli/log.js
Juan Cruz Viotti c44594b45e refactor: use ES6 fat arrows in application code (#522)
ES6 fat arrows provide reasonable `this` behaviour, which protects us
from some subtle accidental bugs, and erradicates `const self = this`
from the codebase.

Far arrows were not applied in Mocha code and AngularJS
controllers/services constructors since these frameworks rely on
`.bind()` on those functions.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-23 17:41:41 -04:00

88 lines
2.2 KiB
JavaScript

/*
* Copyright 2016 Resin.io
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
const fs = require('fs');
const options = require('./cli');
const logStream = options.log ? fs.createWriteStream(options.log) : null;
const STDOUT_STREAM = logStream || process.stdout;
const STDERR_STREAM = logStream || process.stderr;
/**
* The purpose of this module is to workaround an Electron Windows issue
* where an Electron process with `ELECTRON_RUN_AS_NODE` enabled will
* not attach `stdout`/`stderr` to the process, therefore not allowing
* us to redirect output to a file from `child_process` or console pipes.
*
* A temporary solution is to implement logic that redirects output
* to a log file in the Etcher CLI.
*
* TODO: Delete this file, and the corresponding `--log` option once
* this issue is fixed in Electron.
* See: https://github.com/electron/electron/issues/5715
*/
/**
* @summary Write a line to stdout
* @function
* @public
*
* @description
* If the `--log` option was passed, this function writes the line
* to it, otherwise to `process.stdout`.
*
* @param {String} line - line
*
* @example
* log.toStdout('Hello world!');
*/
exports.toStdout = (line) => {
STDOUT_STREAM.write(line + '\n');
};
/**
* @summary Write a line to stderr
* @function
* @public
*
* @description
* If the `--log` option was passed, this function writes the line
* to it, otherwise to `process.stderr`.
*
* @param {String} line - line
*
* @example
* log.toStderr('Hello world!');
*/
exports.toStderr = (line) => {
STDERR_STREAM.write(line + '\n');
};
/**
* @summary Close any used streams, if needed
* @function
* @public
*
* @example
* log.close();
*/
exports.close = () => {
if (logStream) {
logStream.close();
}
};