Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extract Logger into its own package #2165

Merged
merged 9 commits into from Oct 18, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
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
}
}
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