Skip to content

Commit

Permalink
refactor(betterer 🔧): remove reporter from config so it can be passed…
Browse files Browse the repository at this point in the history
… to workers
  • Loading branch information
phenomnomnominal committed Sep 15, 2024
1 parent 1c0e5e2 commit 45764b9
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 30 deletions.
1 change: 0 additions & 1 deletion goldens/api/betterer.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ export type BettererConfigPaths = ReadonlyArray<string>;
// @public
export interface BettererConfigReporter {
logo: boolean;
reporter: BettererReporter;
}

// @public
Expand Down
23 changes: 15 additions & 8 deletions packages/betterer/src/globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,22 @@ class BettererGlobalResolvers {
}

class BettererGlobals {
public readonly reporter: BettererReporter = this.config.reporter;
public readonly resolvers: BettererGlobalResolvers = new BettererGlobalResolvers(this.config);

constructor(
public readonly config: BettererConfig,
public readonly _reporter: BettererReporter | null,
public readonly results: BettererResultsWorker,
private _runWorkerPool: BettererRunWorkerPool | null,
private _testMetaLoader: BettererTestMetaLoaderWorker | null,
private readonly _runWorkerPool: BettererRunWorkerPool | null,
private readonly _testMetaLoader: BettererTestMetaLoaderWorker | null,
public readonly versionControl: BettererVersionControlWorker
) {}

public get reporter(): BettererReporter {
invariantΔ(this._reporter, `\`reporter\` should only be accessed on the main thread!`);
return this._reporter;
}

public get runWorkerPool(): BettererRunWorkerPool {
invariantΔ(this._runWorkerPool, `\`runWorkerPool\` should only be accessed on the main thread!`);
return this._runWorkerPool;
Expand All @@ -53,12 +58,15 @@ export async function createGlobals(
options: BettererOptions,
optionsWatch: BettererOptionsWatcher = {}
): Promise<void> {
let reporter = await loadDefaultReporter();
let errorReporter = await loadDefaultReporter();

try {
const configContext = await createContextConfig(options);
const configFS = await createFSConfig(options);
const configReporter = await createReporterConfig(configFS, options);

const [configReporter, reporter] = await createReporterConfig(configFS, options);
errorReporter = reporter;

const configWatcher = createWatcherConfig(configFS, optionsWatch);

const { cache, cachePath, configPaths, cwd, resultsPath } = configFS;
Expand All @@ -80,17 +88,16 @@ export async function createGlobals(
...configWatcher,
versionControlPath
});
reporter = config.reporter;

const runWorkerPool = await createRunWorkerPool(config.workers);

setGlobals(config, results, runWorkerPool, testMetaLoader, versionControl);
setGlobals(config, reporter, results, runWorkerPool, testMetaLoader, versionControl);
} catch (error) {
await Promise.all([results.destroy(), testMetaLoader.destroy(), versionControl.destroy()]);
throw error;
}
} catch (error) {
const reporterΩ = reporter as BettererReporterΩ;
const reporterΩ = errorReporter as BettererReporterΩ;
await reporterΩ.configError(options, error as BettererError);
throw error;
}
Expand Down
11 changes: 4 additions & 7 deletions packages/betterer/src/reporters/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { loadReporters, loadSilentReporter } from './loader.js';
export async function createReporterConfig(
configBase: BettererConfigFS,
options: BettererOptionsReporter
): Promise<BettererConfigReporter> {
): Promise<[BettererConfigReporter, BettererReporter]> {
const { cwd } = configBase;

const logo = options.logo ?? false;
Expand All @@ -26,17 +26,14 @@ export async function createReporterConfig(

const reporter = silent ? loadSilentReporter() : await loadReporters(reporters, cwd);

return {
logo,
reporter
};
return [{ logo }, reporter];
}

export async function overrideReporterConfig(optionsOverride: BettererOptionsReporterOverride): Promise<void> {
if (optionsOverride.reporters) {
const { config, results, runWorkerPool, testMetaLoader, versionControl } = getGlobals();
const reporters = toArray<string | BettererReporter>(optionsOverride.reporters);
config.reporter = await loadReporters(reporters, config.cwd);
setGlobals(config, results, runWorkerPool, testMetaLoader, versionControl);
const reporter = await loadReporters(reporters, config.cwd);
setGlobals(config, reporter, results, runWorkerPool, testMetaLoader, versionControl);
}
}
4 changes: 0 additions & 4 deletions packages/betterer/src/reporters/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,6 @@ export interface BettererConfigReporter {
* When `true`, the default reporter will render the Betterer logo.
*/
logo: boolean;
/**
* The reporter instance. All reporter hooks will be a noop if `silent` is `true`.
*/
reporter: BettererReporter;
}

/**
Expand Down
8 changes: 4 additions & 4 deletions packages/betterer/src/results/results-summary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export class BettererResultsSummaryΩ implements BettererResultsSummary {
}

public static async create(): Promise<BettererResultsSummary> {
const { config, resolvers, results, testMetaLoader, versionControl } = getGlobals();
const { config, reporter, resolvers, results, testMetaLoader, versionControl } = getGlobals();
const { configPaths, filters, includes, excludes, resultsPath } = config;

try {
Expand Down Expand Up @@ -75,9 +75,9 @@ export class BettererResultsSummaryΩ implements BettererResultsSummary {
);

return new BettererResultsSummaryΩ(testStatuses, onlyFileTests);
} catch (e) {
await config.reporter.configError?.(config, e as BettererError);
throw e;
} catch (error) {
await reporter.configError?.(config, error as BettererError);
throw error;
} finally {
await versionControl.destroy();
}
Expand Down
5 changes: 0 additions & 5 deletions packages/betterer/src/run/run.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { BettererError } from '@betterer/errors';

import type { BettererConfig } from '../config/types.js';
import type { BettererFilePaths } from '../fs/index.js';
import type { BettererTestMeta } from '../test/index.js';
import type { BettererRunMeta } from './meta/types.js';
Expand Down Expand Up @@ -51,10 +50,6 @@ export class BettererRunΩ implements BettererRun {
workers: 1
};

// `BettererReporter` instance can't be passed to the worker_thread, but
// the worker doesn't actually need the it, so just ignore it.
delete (workerConfig as Partial<BettererConfig>).reporter;

const runMeta = await worker.api.init(testMeta, workerConfig, results, versionControl);
workerHandle.release();

Expand Down
2 changes: 1 addition & 1 deletion packages/betterer/src/run/worker-run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export class BettererWorkerRunΩ implements BettererRun {

// If we're in a worker, we need to populate the globals:
if (process.env.BETTERER_WORKER !== 'false') {
setGlobals(config, results, null, null, versionControl);
setGlobals(config, null, results, null, null, versionControl);
}

const isNew = !(await results.api.hasBaseline(name));
Expand Down

0 comments on commit 45764b9

Please sign in to comment.