Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions lib/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
const concordance = require('concordance');
const isError = require('is-error');
const isPromise = require('is-promise');
const concordanceOptions = require('./concordance-options').default;
const concordanceDiffOptions = require('./concordance-options').diff;
const {default: concordanceOptions, diff: concordanceDiffOptions} = require('./concordance-options').resolve();
const snapshotManager = require('./snapshot-manager');

function formatDescriptorDiff(actualDescriptor, expectedDescriptor, options) {
Expand Down
1 change: 1 addition & 0 deletions lib/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ exports.run = async () => { // eslint-disable-line complexity

const chalkOptions = {level: combined.color === false ? 0 : require('chalk').level};
const chalk = require('./chalk').set(chalkOptions);
require('./concordance-options').configure();

if (confError) {
if (confError.parent) {
Expand Down
96 changes: 48 additions & 48 deletions lib/concordance-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,9 @@ const util = require('util');
const ansiStyles = require('ansi-styles');
const stripAnsi = require('strip-ansi');
const cloneDeepWith = require('lodash/cloneDeepWith');
const reactPlugin = require('@concordance/react');
const merge = require('lodash/merge');
const chalk = require('./chalk').get();

// Wrap Concordance's React plugin. Change the name to avoid collisions if in
// the future users can register plugins themselves.
const avaReactPlugin = {...reactPlugin, name: 'ava-plugin-react'};
const plugins = [avaReactPlugin];

const forceColor = new chalk.Instance({level: Math.max(chalk.level, 1)});

const colorTheme = {
Expand Down Expand Up @@ -52,34 +47,6 @@ const colorTheme = {
keyBracket: {open: forceColor.grey('['), close: forceColor.grey(']')},
valueFallback: forceColor.grey('…')
},
react: {
functionType: forceColor.grey('\u235F'),
openTag: {
start: forceColor.grey('<'),
end: forceColor.grey('>'),
selfClose: forceColor.grey('/'),
selfCloseVoid: ' ' + forceColor.grey('/')
},
closeTag: {
open: forceColor.grey('</'),
close: forceColor.grey('>')
},
tagName: ansiStyles.magenta,
attribute: {
separator: '=',
value: {
openBracket: forceColor.grey('{'),
closeBracket: forceColor.grey('}'),
string: {
line: {open: forceColor.blue('"'), close: forceColor.blue('"'), escapeQuote: '"'}
}
}
},
child: {
openBracket: forceColor.grey('{'),
closeBracket: forceColor.grey('}')
}
},
regexp: {
source: {open: ansiStyles.blue.open + '/', close: '/' + ansiStyles.blue.close},
flags: ansiStyles.yellow
Expand Down Expand Up @@ -118,22 +85,55 @@ const colorTheme = {
undefined: ansiStyles.yellow
};

const plainTheme = cloneDeepWith(colorTheme, value => {
if (typeof value === 'string') {
return stripAnsi(value);
let resolved = null;
exports.resolve = () => {
if (!resolved) {
throw new Error('Concordance options have not yet been configured');
}
});

const theme = chalk.level > 0 ? colorTheme : plainTheme;
return resolved;
};

exports.default = {
// Use Node's object inspection depth, clamped to a minimum of 3
get maxDepth() {
return Math.max(3, util.inspect.defaultOptions.depth);
},
plugins,
theme
exports.configure = plugins => {
if (resolved) {
throw new Error('Concordance options have already been configured');
}

// TODO: Remove in the next major release.
if (plugins === undefined) {
const avaReactPlugin = require('./legacy-react');

plugins = [avaReactPlugin];
} else {
// TODO: Resolve plugins
}

const resolvedTheme = plugins.reduce((theme, {themeOverride}) => {
return merge(theme, themeOverride);
}, colorTheme);

const plainTheme = cloneDeepWith(resolvedTheme, value => {
if (typeof value === 'string') {
return stripAnsi(value);
}
});

const theme = chalk.level > 0 ? resolvedTheme : plainTheme;

plugins = plugins.map(({themeOverride: _, ...plugin}) => plugin);

resolved = {
default: {
// Use Node's object inspection depth, clamped to a minimum of 3
get maxDepth() {
return Math.max(3, util.inspect.defaultOptions.depth);
},
plugins,
theme
},

diff: {maxDepth: 1, plugins, theme},
snapshotManager: {plugins, theme: plainTheme}
};
};

exports.diff = {maxDepth: 1, plugins, theme};
exports.snapshotManager = {plugins, theme: plainTheme};
41 changes: 41 additions & 0 deletions lib/legacy-react.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict';
const ansiStyles = require('ansi-styles');
const reactPlugin = require('@concordance/react');
const chalk = require('./chalk').get();

const forceColor = new chalk.Instance({level: Math.max(chalk.level, 1)});

module.exports = {
...reactPlugin,
name: 'ava-plugin-react',
themeOverride: {
react: {
functionType: forceColor.grey('\u235F'),
openTag: {
start: forceColor.grey('<'),
end: forceColor.grey('>'),
selfClose: forceColor.grey('/'),
selfCloseVoid: ' ' + forceColor.grey('/')
},
closeTag: {
open: forceColor.grey('</'),
close: forceColor.grey('>')
},
tagName: ansiStyles.magenta,
attribute: {
separator: '=',
value: {
openBracket: forceColor.grey('{'),
closeBracket: forceColor.grey('}'),
string: {
line: {open: forceColor.blue('"'), close: forceColor.blue('"'), escapeQuote: '"'}
}
}
},
child: {
openBracket: forceColor.grey('{'),
closeBracket: forceColor.grey('}')
}
}
}
};
2 changes: 1 addition & 1 deletion lib/serialize-error.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const isError = require('is-error');
const StackUtils = require('stack-utils');
const assert = require('./assert');
const beautifyStack = require('./beautify-stack');
const concordanceOptions = require('./concordance-options').default;
const {default: concordanceOptions} = require('./concordance-options').resolve();

function isAvaAssertionError(source) {
return source instanceof assert.AssertionError;
Expand Down
2 changes: 1 addition & 1 deletion lib/snapshot-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const convertSourceMap = require('convert-source-map');
const slash = require('slash');
const writeFileAtomic = require('write-file-atomic');

const concordanceOptions = require('./concordance-options').snapshotManager;
const {snapshotManager: concordanceOptions} = require('./concordance-options').resolve();

// Increment if encoding layout or Concordance serialization versions change. Previous AVA versions will not be able to
// decode buffers generated by a newer version, so changing this value will require a major version bump of AVA itself.
Expand Down
2 changes: 1 addition & 1 deletion lib/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const plur = require('plur');
const assert = require('./assert');
const nowAndTimers = require('./now-and-timers');
const parseTestArgs = require('./parse-test-args');
const concordanceOptions = require('./concordance-options').default;
const {default: concordanceOptions} = require('./concordance-options').resolve();

function formatErrorValue(label, error) {
const formatted = concordance.format(error, concordanceOptions);
Expand Down
1 change: 1 addition & 0 deletions lib/worker/subprocess.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ ipc.send({type: 'ready-for-options'});
ipc.options.then(async options => {
require('./options').set(options);
require('../chalk').set(options.chalkOptions);
require('../concordance-options').configure(options.plugins);

if (options.chalkOptions.level > 0) {
const {stdout, stderr} = process;
Expand Down
1 change: 1 addition & 0 deletions test/api.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();

const path = require('path');
const fs = require('fs');
Expand Down
1 change: 1 addition & 0 deletions test/assert.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({chalkOptions: {level: 0}});

const path = require('path');
Expand Down
1 change: 1 addition & 0 deletions test/beautify-stack.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const proxyquire = require('proxyquire').noPreserveCache();
Expand Down
1 change: 1 addition & 0 deletions test/code-excerpt.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set({level: 1});
require('../lib/concordance-options').configure();

const fs = require('fs');
const tempWrite = require('temp-write');
Expand Down
1 change: 1 addition & 0 deletions test/helper/fix-reporter-env.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module.exports = () => {

fixColors();
require('../../lib/chalk').set({level: 3});
require('../../lib/concordance-options').configure();

return {
restoreClock() {
Expand Down
1 change: 1 addition & 0 deletions test/hooks.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const {test} = require('tap');
Expand Down
1 change: 1 addition & 0 deletions test/observable.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const {test} = require('tap');
Expand Down
1 change: 1 addition & 0 deletions test/promise.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set({level: 0});
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const {test} = require('tap');
Expand Down
1 change: 1 addition & 0 deletions test/runner.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const {test} = require('tap');
Expand Down
1 change: 1 addition & 0 deletions test/serialize-error.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const fs = require('fs');
Expand Down
1 change: 1 addition & 0 deletions test/test-try-commit.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({chalkOptions: {level: 0}});

const {test} = require('tap');
Expand Down
1 change: 1 addition & 0 deletions test/test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set({level: 0});
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({});

const path = require('path');
Expand Down
1 change: 1 addition & 0 deletions test/try-snapshot.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';
require('../lib/chalk').set();
require('../lib/concordance-options').configure();
require('../lib/worker/options').set({chalkOptions: {level: 0}});

const path = require('path');
Expand Down
1 change: 1 addition & 0 deletions test/watcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const {normalizeGlobs} = require('../lib/globs');
const {setImmediate} = require('../lib/now-and-timers');

require('../lib/chalk').set({});
require('../lib/concordance-options').configure();

// Helper to make using beforeEach less arduous
function makeGroup(test) {
Expand Down