Skip to content

Commit

Permalink
Extract Logger into its own package (#2165)
Browse files Browse the repository at this point in the history
  • Loading branch information
webtaculars authored and devongovett committed Oct 18, 2018
1 parent b1e6d59 commit af06ce9
Show file tree
Hide file tree
Showing 28 changed files with 1,597 additions and 30 deletions.
1 change: 1 addition & 0 deletions packages/core/logger/.gitignore
@@ -0,0 +1 @@
lib
5 changes: 5 additions & 0 deletions packages/core/logger/index.js
@@ -0,0 +1,5 @@
// Node 8 supports native async functions - no need to use compiled code!
module.exports =
parseInt(process.versions.node, 10) < 8
? require('./lib/Logger')
: require('./src/Logger');
32 changes: 32 additions & 0 deletions packages/core/logger/package.json
@@ -0,0 +1,32 @@
{
"name": "@parcel/logger",
"version": "1.10.3",
"description": "Blazing fast, zero configuration web application bundler",
"main": "index.js",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/parcel-bundler/parcel.git"
},
"engines": {
"node": ">= 6.0.0"
},
"scripts": {
"test": "cross-env NODE_ENV=test mocha",
"test-ci": "yarn build && yarn test",
"format": "prettier --write \"./{src,bin,test}/**/*.{js,json,md}\"",
"lint": "eslint . && prettier \"./{src,bin,test}/**/*.{js,json,md}\" --list-different",
"build": "babel src -d lib",
"prepublish": "yarn build"
},
"devDependencies": {
"mocha": "^5.2.0",
"sinon": "^5.0.1"
},
"dependencies": {
"chalk": "^2.1.0",
"grapheme-breaker": "^0.3.2",
"ora": "^2.1.0",
"strip-ansi": "^4.0.0"
}
}
8 changes: 8 additions & 0 deletions packages/core/logger/src/.babelrc
@@ -0,0 +1,8 @@
{
"presets": [["@babel/preset-env", {
"targets": {
"node": "6"
}
}]],
"plugins": ["@babel/plugin-transform-runtime"]
}
3 changes: 3 additions & 0 deletions packages/core/logger/src/.eslintrc.json
@@ -0,0 +1,3 @@
{
"extends": "../../../../.eslintrc.json"
}
@@ -1,7 +1,7 @@
const chalk = require('chalk');
const readline = require('readline');
const prettyError = require('./utils/prettyError');
const emoji = require('./utils/emoji');
const prettyError = require('./prettyError');
const emoji = require('./emoji');
const {countBreaks} = require('grapheme-breaker');
const stripAnsi = require('strip-ansi');
const ora = require('ora');
Expand All @@ -25,6 +25,7 @@ class Logger {
options && typeof options.color === 'boolean'
? options.color
: chalk.supportsColor;
this.emoji = (options && options.emoji) || emoji;
this.chalk = new chalk.constructor({enabled: this.color});
this.isTest =
options && typeof options.isTest === 'boolean'
Expand Down Expand Up @@ -106,23 +107,27 @@ class Logger {
return;
}

this._writeError(err, emoji.warning, this.chalk.yellow);
this._writeError(err, this.emoji.warning, this.chalk.yellow);
}

error(err) {
if (this.logLevel < 1) {
return;
}

this._writeError(err, emoji.error, this.chalk.red.bold);
this._writeError(err, this.emoji.error, this.chalk.red.bold);
}

success(message) {
this.log(`${emoji.success} ${this.chalk.green.bold(message)}`);
this.log(`${this.emoji.success} ${this.chalk.green.bold(message)}`);
}

formatError(err, opts) {
return prettyError(err, opts);
}

_writeError(err, emoji, color) {
let {message, stack} = prettyError(err, {color: this.color});
let {message, stack} = this.formatError(err, {color: this.color});
this.write(color(`${emoji} ${message}`));
if (stack) {
this.write(stack);
Expand Down Expand Up @@ -177,6 +182,7 @@ class Logger {
}

_log(message) {
// eslint-disable-next-line no-console
console.log(message);
}

Expand Down
File renamed without changes.
File renamed without changes.
8 changes: 8 additions & 0 deletions packages/core/logger/test/.babelrc
@@ -0,0 +1,8 @@
{
"presets": [["@babel/preset-env", {
"targets": {
"node": "current"
}
}]],
"plugins": ["@babel/plugin-transform-runtime"]
}
6 changes: 6 additions & 0 deletions packages/core/logger/test/.eslintrc.json
@@ -0,0 +1,6 @@
{
"extends": "../../../../.eslintrc.json",
"env": {
"mocha": true
}
}
File renamed without changes.
2 changes: 2 additions & 0 deletions packages/core/logger/test/mocha.opts
@@ -0,0 +1,2 @@
--require @parcel/babel-register
--exit
@@ -1,5 +1,5 @@
const assert = require('assert');
const prettyError = require('../src/utils/prettyError');
const prettyError = require('../src/prettyError');

const message = 'Error Message!';
const fileName = 'Test.js';
Expand Down
6 changes: 2 additions & 4 deletions packages/core/parcel-bundler/package.json
Expand Up @@ -43,7 +43,6 @@
"filesize": "^3.6.0",
"fswatcher-child": "^1.0.5",
"get-port": "^3.2.0",
"grapheme-breaker": "^0.3.2",
"htmlnano": "^0.1.9",
"is-glob": "^4.0.0",
"is-url": "^1.2.2",
Expand All @@ -54,7 +53,6 @@
"node-forge": "^0.7.1",
"node-libs-browser": "^2.0.0",
"opn": "^5.1.0",
"ora": "^2.1.0",
"postcss": "^6.0.19",
"postcss-value-parser": "^3.3.0",
"posthtml": "^0.11.2",
Expand All @@ -65,13 +63,13 @@
"serialize-to-js": "^1.1.1",
"serve-static": "^1.12.4",
"source-map": "0.6.1",
"strip-ansi": "^4.0.0",
"terser": "^3.7.3",
"toml": "^2.3.3",
"tomlify-j0.4": "^3.0.0",
"v8-compile-cache": "^2.0.0",
"ws": "^5.1.1",
"@parcel/workers": "^1.10.3"
"@parcel/workers": "^1.10.3",
"@parcel/logger": "^1.10.3"
},
"devDependencies": {
"@babel/cli": "^7.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/Asset.js
Expand Up @@ -6,7 +6,7 @@ const md5 = require('./utils/md5');
const isURL = require('./utils/is-url');
const config = require('./utils/config');
const syncPromise = require('./utils/syncPromise');
const logger = require('./Logger');
const logger = require('@parcel/logger');
const Resolver = require('./Resolver');
const objectHash = require('./utils/objectHash');

Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/Bundler.js
Expand Up @@ -9,7 +9,7 @@ const FSCache = require('./FSCache');
const HMRServer = require('./HMRServer');
const Server = require('./Server');
const {EventEmitter} = require('events');
const logger = require('./Logger');
const logger = require('@parcel/logger');
const PackagerRegistry = require('./packagers');
const localRequire = require('./utils/localRequire');
const config = require('./utils/config');
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/FSCache.js
Expand Up @@ -3,7 +3,7 @@ const path = require('path');
const md5 = require('./utils/md5');
const objectHash = require('./utils/objectHash');
const pkg = require('../package.json');
const logger = require('./Logger');
const logger = require('@parcel/logger');
const {isGlob, glob} = require('./utils/glob');

// These keys can affect the output, so if they differ, the cache should not match
Expand Down
5 changes: 2 additions & 3 deletions packages/core/parcel-bundler/src/HMRServer.js
@@ -1,10 +1,9 @@
const http = require('http');
const https = require('https');
const WebSocket = require('ws');
const prettyError = require('./utils/prettyError');
const generateCertificate = require('./utils/generateCertificate');
const getCertificate = require('./utils/getCertificate');
const logger = require('./Logger');
const logger = require('@parcel/logger');

class HMRServer {
async start(options = {}) {
Expand Down Expand Up @@ -49,7 +48,7 @@ class HMRServer {
}

emitError(err) {
let {message, stack} = prettyError(err);
let {message, stack} = logger.formatError(err);

// store the most recent error so we can notify new connections
// and so we can broadcast when the error is resolved
Expand Down
5 changes: 2 additions & 3 deletions packages/core/parcel-bundler/src/Server.js
Expand Up @@ -5,9 +5,8 @@ const getPort = require('get-port');
const serverErrors = require('./utils/customErrors').serverErrors;
const generateCertificate = require('./utils/generateCertificate');
const getCertificate = require('./utils/getCertificate');
const prettyError = require('./utils/prettyError');
const AnsiToHtml = require('ansi-to-html');
const logger = require('./Logger');
const logger = require('@parcel/logger');
const path = require('path');
const url = require('url');

Expand Down Expand Up @@ -83,7 +82,7 @@ function middleware(bundler) {
if (process.env.NODE_ENV === 'production') {
errorMesssge += '<p><b>Check the console for details.</b></p>';
} else {
const {message, stack} = prettyError(error, {color: true});
const {message, stack} = logger.formatError(error, {color: true});
errorMesssge += `<p><b>${message}</b></p>`;
if (stack) {
errorMesssge += `<div style="background: black; padding: 1rem;">${ansiToHtml.toHtml(
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/assets/JSAsset.js
Expand Up @@ -15,7 +15,7 @@ const SourceMap = require('../SourceMap');
const hoist = require('../scope-hoisting/hoist');
const path = require('path');
const fs = require('../utils/fs');
const logger = require('../Logger');
const logger = require('@parcel/logger');

const IMPORT_RE = /\b(?:import\b|export\b|require\s*\()/;
const ENV_RE = /\b(?:process\.env)\b/;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/assets/JSONLDAsset.js
@@ -1,7 +1,7 @@
const urlJoin = require('../utils/urlJoin');
const isURL = require('../utils/is-url');
const Asset = require('../Asset');
const logger = require('../Logger');
const logger = require('@parcel/logger');

// A list of all attributes in a schema that may produce a dependency
// Based on https://schema.org/ImageObject
Expand Down
@@ -1,5 +1,5 @@
const semver = require('semver');
const logger = require('../../Logger');
const logger = require('@parcel/logger');
const path = require('path');
const localRequire = require('../../utils/localRequire');
const installPackage = require('../../utils/installPackage');
Expand Down
5 changes: 2 additions & 3 deletions packages/core/parcel-bundler/src/utils/bundleReport.js
@@ -1,7 +1,6 @@
const path = require('path');
const prettifyTime = require('./prettifyTime');
const logger = require('../Logger');
const emoji = require('./emoji');
const logger = require('@parcel/logger');
const filesize = require('filesize');

const LARGE_BUNDLE_SIZE = 1024 * 1024;
Expand Down Expand Up @@ -83,7 +82,7 @@ function* iterateBundles(bundle) {
function prettifySize(size, isLarge) {
let res = filesize(size);
if (isLarge) {
return logger.chalk.yellow(emoji.warning + ' ' + res);
return logger.chalk.yellow(logger.emoji.warning + ' ' + res);
}
return logger.chalk.magenta(res);
}
Expand Down
Expand Up @@ -2,7 +2,7 @@ const forge = require('node-forge');
const fs = require('fs');
const mkdirp = require('mkdirp');
const path = require('path');
const logger = require('../Logger');
const logger = require('@parcel/logger');

function generateCertificate(options = {}) {
const privateKeyPath = path.join(options.cacheDir, 'private.pem');
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/utils/installPackage.js
Expand Up @@ -2,7 +2,7 @@ const config = require('./config');
const promisify = require('./promisify');
const resolve = promisify(require('resolve'));
const commandExists = require('command-exists');
const logger = require('../Logger');
const logger = require('@parcel/logger');
const pipeSpawn = require('./pipeSpawn');
const PromiseQueue = require('./PromiseQueue');
const path = require('path');
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/utils/pipeSpawn.js
@@ -1,5 +1,5 @@
const spawn = require('cross-spawn');
const logger = require('../Logger');
const logger = require('@parcel/logger');

function pipeSpawn(cmd, params, opts) {
const cp = spawn(
Expand Down
2 changes: 1 addition & 1 deletion packages/core/parcel-bundler/src/visitors/fs.js
Expand Up @@ -2,7 +2,7 @@ const t = require('@babel/types');
const Path = require('path');
const fs = require('fs');
const template = require('@babel/template').default;
const logger = require('../Logger');
const logger = require('@parcel/logger');

const bufferTemplate = template('Buffer(CONTENT, ENC)');

Expand Down

0 comments on commit af06ce9

Please sign in to comment.