diff --git a/debug.mjs b/debug.mjs index 2f0cd7c..f0a5180 100644 --- a/debug.mjs +++ b/debug.mjs @@ -1 +1 @@ -export * from './dist/debug.js'; +export * from './dist/debug/index.js'; diff --git a/package-e2e/test.cjs b/package-e2e/test.cjs index b5ca071..7d50763 100644 --- a/package-e2e/test.cjs +++ b/package-e2e/test.cjs @@ -10,9 +10,10 @@ assert(typeof $Assign === 'function', 'jest-metadata should export $Assign funct assert(typeof $Defaults === 'function', 'jest-metadata should export $Defaults function as a named export'); assert(typeof $Unshift === 'function', 'jest-metadata should export $Unshift function as a named export'); -const { events, metadataRegistryEvents } = require('jest-metadata/debug'); +const { events, metadataRegistryEvents, visualize } = require('jest-metadata/debug'); assert(typeof events === 'object', 'jest-metadata/debug should export `events` object'); assert(typeof metadataRegistryEvents === 'object', 'jest-metadata/debug should export `metadataRegistryEvents` object'); +assert(typeof visualize === 'function', 'jest-metadata/debug should export `visualize` function as a named export'); const environmentListener = require('jest-metadata/environment-listener'); assert(typeof environmentListener === 'function', 'jest-metadata/environment-listener should export a class as its default export'); diff --git a/package-e2e/test.mjs b/package-e2e/test.mjs index 6395393..e029b8f 100644 --- a/package-e2e/test.mjs +++ b/package-e2e/test.mjs @@ -1,6 +1,6 @@ import assert from 'assert'; import { $Set, $Push, $Merge, $Assign, $Defaults, $Unshift, state, metadata } from 'jest-metadata'; -import { events, metadataRegistryEvents } from 'jest-metadata/debug'; +import { events, metadataRegistryEvents, visualize } from 'jest-metadata/debug'; import JsdomTestEnvironment from 'jest-metadata/environment-jsdom'; import NodeTestEnvironment from 'jest-metadata/environment-node'; import environmentListener from 'jest-metadata/environment-listener'; @@ -17,6 +17,7 @@ assert(typeof $Unshift === 'function', 'jest-metadata should export `$Unshift` f assert(typeof events === 'object', 'jest-metadata/debug should export `events` object'); assert(typeof metadataRegistryEvents === 'object', 'jest-metadata/debug should export `metadataRegistryEvents` object'); +assert(typeof visualize === 'function', 'jest-metadata/debug should export `visualize` function as a named export'); assert(typeof environmentListener === 'function', 'jest-metadata/environment-listener should export a function as its default export'); diff --git a/package-e2e/test.ts b/package-e2e/test.ts index c81f49d..64b7bc7 100644 --- a/package-e2e/test.ts +++ b/package-e2e/test.ts @@ -1,5 +1,5 @@ import { $Set, $Push, $Merge, $Assign, $Defaults, $Unshift, state, metadata } from 'jest-metadata'; -import { events, metadataRegistryEvents } from 'jest-metadata/debug'; +import { events, metadataRegistryEvents, visualize } from 'jest-metadata/debug'; import type { GlobalMetadata, Metadata } from 'jest-metadata'; import JestMetadataReporter, { query, JestMetadataReporter as JestMetadataReporterNamed } from 'jest-metadata/reporter'; import JsdomTestEnvironment from 'jest-metadata/environment-jsdom'; @@ -74,3 +74,8 @@ assertType(JsdomTestEnvironment); assertType(NodeTestEnvironment); assertType(environmentListener); + +assertType(() => { + assertType>(visualize('/path/to/bunyamin.log')); + assertType>(visualize([{ type: 'setup', testFilePath: 'test.ts' }])); +}); diff --git a/package.json b/package.json index 0356cfa..385230b 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "funpermaproxy": "^1.1.0", "jest-environment-emit": "^1.0.6", "lodash.merge": "^4.6.2", + "lodash.snakecase": "^4.1.1", "node-ipc": "9.2.1", "strip-ansi": "^6.0.0", "tslib": "^2.5.3" @@ -135,11 +136,8 @@ "@types/bunyan": "^1.8.8", "@types/jest": "^29.2.5", "@types/lodash": "^4.14.191", - "@types/lodash.get": "^4.4.7", - "@types/lodash.memoize": "^4.1.7", "@types/lodash.merge": "^4.6.7", - "@types/lodash.once": "^4.1.7", - "@types/lodash.set": "^4.3.7", + "@types/lodash.snakecase": "^4.1.9", "@types/node": "^18.11.18", "@types/node-ipc": "^9.2.0", "@types/rimraf": "^3.0.2", diff --git a/src/metadata/__utils__/MetadataVisitor.ts b/src/debug/MetadataVisitor.ts similarity index 98% rename from src/metadata/__utils__/MetadataVisitor.ts rename to src/debug/MetadataVisitor.ts index d90b723..fc6809c 100644 --- a/src/metadata/__utils__/MetadataVisitor.ts +++ b/src/debug/MetadataVisitor.ts @@ -9,7 +9,7 @@ import type { TestEntryMetadata, TestFnInvocationMetadata, TestInvocationMetadata, -} from '../index'; +} from '../metadata'; export abstract class MetadataVisitor { constructor(protected readonly checker: MetadataChecker) {} diff --git a/src/debug.ts b/src/debug/index.ts similarity index 66% rename from src/debug.ts rename to src/debug/index.ts index 7e6a47b..0fddcf2 100644 --- a/src/debug.ts +++ b/src/debug/index.ts @@ -1,6 +1,6 @@ -import { ParentProcessRealm, realm } from './realms'; +import { ParentProcessRealm, realm } from '../realms'; -export { Shallow } from './jest-reporter'; +export { Shallow } from '../jest-reporter'; export function isFallback() { return realm.type === 'parent_process' @@ -11,3 +11,5 @@ export function isFallback() { export const events = realm.events; export const metadataRegistryEvents = realm.metadataRegistry.events; + +export * from './visualize'; diff --git a/src/metadata/__utils__/plant/MetadataPlantObject.ts b/src/debug/plant/MetadataPlantObject.ts similarity index 55% rename from src/metadata/__utils__/plant/MetadataPlantObject.ts rename to src/debug/plant/MetadataPlantObject.ts index df94fe9..b075020 100644 --- a/src/metadata/__utils__/plant/MetadataPlantObject.ts +++ b/src/debug/plant/MetadataPlantObject.ts @@ -1,6 +1,4 @@ -import { isEmpty, omitBy } from 'lodash'; - -import type { Metadata } from '../../index'; +import type { Metadata } from '../../metadata'; import { PlantObject } from './PlantObject'; const COLORS: Record = { @@ -21,13 +19,25 @@ export class MetadataPlantObject extends PlantObject { id: metadata.id, name, color: COLORS[name], - properties: omitBy( - { - id: metadata.id.split(':').pop(), - data: metadata.get(), - }, - isEmpty, - ), + properties: getProperties(metadata), }); } } + +function getProperties(metadata: Metadata): Record { + const [fileId, childId] = metadata.id.split(':'); + const result: Record = { + id: childId || fileId, + data: metadata.get(), + }; + + if (!result.id) { + delete result.id; + } + + if (!result.data || Object.keys(result.data).length === 0) { + delete result.data; + } + + return result; +} diff --git a/src/metadata/__utils__/plant/PlantLink.ts b/src/debug/plant/PlantLink.ts similarity index 91% rename from src/metadata/__utils__/plant/PlantLink.ts rename to src/debug/plant/PlantLink.ts index 11ae2cc..a6f13a0 100644 --- a/src/metadata/__utils__/plant/PlantLink.ts +++ b/src/debug/plant/PlantLink.ts @@ -1,4 +1,4 @@ -import { snakeCase } from 'lodash'; +import snakeCase from 'lodash.snakecase'; export class PlantLink { constructor( diff --git a/src/metadata/__utils__/plant/PlantMetadataVisitor.ts b/src/debug/plant/PlantMetadataVisitor.ts similarity index 99% rename from src/metadata/__utils__/plant/PlantMetadataVisitor.ts rename to src/debug/plant/PlantMetadataVisitor.ts index 9d1b144..1197b43 100644 --- a/src/metadata/__utils__/plant/PlantMetadataVisitor.ts +++ b/src/debug/plant/PlantMetadataVisitor.ts @@ -8,7 +8,7 @@ import type { TestEntryMetadata, TestFnInvocationMetadata, TestInvocationMetadata, -} from '../../index'; +} from '../../metadata'; import { MetadataVisitor } from '../MetadataVisitor'; import { MetadataPlantObject } from './MetadataPlantObject'; import { PlantLink } from './PlantLink'; diff --git a/src/metadata/__utils__/plant/PlantObject.ts b/src/debug/plant/PlantObject.ts similarity index 96% rename from src/metadata/__utils__/plant/PlantObject.ts rename to src/debug/plant/PlantObject.ts index 334a0e1..655f5e6 100644 --- a/src/metadata/__utils__/plant/PlantObject.ts +++ b/src/debug/plant/PlantObject.ts @@ -1,4 +1,4 @@ -import { snakeCase } from 'lodash'; +import snakeCase from 'lodash.snakecase'; export type PlantObjectConfig = { id: string; diff --git a/src/metadata/__utils__/plant/PlantSerializer.ts b/src/debug/plant/PlantSerializer.ts similarity index 96% rename from src/metadata/__utils__/plant/PlantSerializer.ts rename to src/debug/plant/PlantSerializer.ts index 0b72a67..3b230b6 100644 --- a/src/metadata/__utils__/plant/PlantSerializer.ts +++ b/src/debug/plant/PlantSerializer.ts @@ -1,4 +1,4 @@ -import type { GlobalMetadataRegistry, MetadataChecker } from '../../index'; +import type { GlobalMetadataRegistry, MetadataChecker } from '../../metadata'; import { PlantMetadataVisitor } from './PlantMetadataVisitor'; export const PlantSerializer = { diff --git a/src/metadata/__utils__/plant/index.ts b/src/debug/plant/index.ts similarity index 100% rename from src/metadata/__utils__/plant/index.ts rename to src/debug/plant/index.ts diff --git a/src/debug/visualize.ts b/src/debug/visualize.ts new file mode 100644 index 0000000..45f498a --- /dev/null +++ b/src/debug/visualize.ts @@ -0,0 +1,50 @@ +import fs from 'node:fs/promises'; +import { + GlobalMetadataRegistry, + type MetadataEvent, + MetadataEventHandler, + MetadataFactoryImpl, + type WriteMetadataEventEmitter, +} from '../metadata'; +import { SerialEmitter } from '../utils'; +import { PlantSerializer } from './plant'; + +export async function visualize(traceJsonFile: string | MetadataEvent[]) { + const events: MetadataEvent[] = Array.isArray(traceJsonFile) + ? traceJsonFile + : await readEvents(traceJsonFile); + + return replayEvents(events); +} + +async function readEvents(traceJsonFile: string): Promise { + const raw = await fs.readFile(traceJsonFile, 'utf8'); + const json = JSON.parse(raw) as any[]; + const mainPID = json[0].pid; + const events: MetadataEvent[] = []; + for (const event of json) { + const { cat, pid, args } = event; + if (pid === mainPID && args?.event?.type && cat?.includes('emitter-events')) { + events.push(args.event as MetadataEvent); + } + } + + return events; +} + +function replayEvents(events: MetadataEvent[]) { + const emitter: WriteMetadataEventEmitter = new SerialEmitter('set'); + const metadataRegistry = new GlobalMetadataRegistry(); + const metadataFactory = new MetadataFactoryImpl(metadataRegistry, emitter); + const globalMetadata = metadataFactory.createGlobalMetadata(); + const eventHandler = new MetadataEventHandler({ + globalMetadata, + metadataRegistry, + }); + + for (const event of events) { + eventHandler.handle(event); + } + + return PlantSerializer.serialize(metadataFactory.checker, metadataRegistry); +} diff --git a/src/environment-listener.ts b/src/environment-listener.ts index 2fd5b9b..48b1d75 100644 --- a/src/environment-listener.ts +++ b/src/environment-listener.ts @@ -5,7 +5,7 @@ import { detectDuplicateRealms, injectRealmIntoSandbox, realm } from './realms'; import { jestUtils, logger } from './utils'; const listener: EnvironmentListenerFn = (context) => { - const log = logger.child({ cat: 'environment', tid: 'environment' }); + const log = logger.child({ cat: 'jest-metadata-environment', tid: 'jest-metadata' }); const jestEnvironment = context.env; const jestEnvironmentConfig = context.config; const environmentContext = context.context; diff --git a/src/ipc/IPCClient.ts b/src/ipc/IPCClient.ts index c9c66c3..1f2654f 100644 --- a/src/ipc/IPCClient.ts +++ b/src/ipc/IPCClient.ts @@ -4,11 +4,11 @@ import stripAnsi from 'strip-ansi'; import { JestMetadataError } from '../errors'; import type { GlobalMetadata, MetadataEvent } from '../metadata'; import { internal } from '../metadata'; -import { logger, optimizeTracing } from '../utils'; +import { diagnostics, optimizeTracing } from '../utils'; import type { BatchMessage } from './BatchMessage'; import { sendAsyncMessage } from './sendAsyncMessage'; -const log = logger.child({ cat: 'ipc', tid: 'ipc-client' }); +const log = diagnostics.child({ cat: ['ipc', 'ipc-client'], tid: 'jest-metadata-ipc' }); type IPC = Omit; type IPCConnection = (typeof node_ipc)['of'][string]; diff --git a/src/ipc/IPCServer.ts b/src/ipc/IPCServer.ts index 95578d3..e06db4c 100644 --- a/src/ipc/IPCServer.ts +++ b/src/ipc/IPCServer.ts @@ -4,10 +4,13 @@ import node_ipc from 'node-ipc'; import stripAnsi from 'strip-ansi'; import type { Metadata, MetadataEventEmitter } from '../metadata'; -import { Deferred, logger, makeDeferred, optimizeTracing } from '../utils'; +import { Deferred, diagnostics, makeDeferred, optimizeTracing } from '../utils'; import type { BatchMessage } from './BatchMessage'; -const log = logger.child({ cat: 'ipc', tid: 'ipc-server' }); +const log = diagnostics.child({ + cat: ['ipc', 'ipc-server'], + tid: 'jest-metadata-ipc', +}); type IPC = Omit; diff --git a/src/jest-reporter/ReporterServer.ts b/src/jest-reporter/ReporterServer.ts index 16c00fd..2c1f97d 100644 --- a/src/jest-reporter/ReporterServer.ts +++ b/src/jest-reporter/ReporterServer.ts @@ -1,9 +1,11 @@ +import path from 'node:path'; + /* eslint-disable @typescript-eslint/no-empty-function,unicorn/no-for-loop */ import type { TestCaseResult, TestResult } from '@jest/reporters'; // eslint-disable-next-line import/no-internal-modules import { aggregateLogs } from 'jest-environment-emit/debug'; import type { IPCServer } from '../ipc'; -import { logger, memoizeArg1, memoizeLast, optimizeTracing } from '../utils'; +import { diagnostics, memoizeArg1, memoizeLast, optimizeTracing } from '../utils'; import type { AssociateMetadata } from './AssociateMetadata'; import type { FallbackAPI } from './FallbackAPI'; @@ -11,28 +13,35 @@ export type ReporterServerConfig = { ipc: IPCServer; fallbackAPI: FallbackAPI; associate: AssociateMetadata; + rootDir: string; }; const __REPORTER = optimizeTracing((testFilePath: string, data?: unknown) => { return { - tid: ['reporter', testFilePath], + tid: ['jest-metadata-reporter', testFilePath], data, }; }); +const __FILE = optimizeTracing((cwd: string, testFilePath: string) => { + return path.relative(cwd, testFilePath); +}); + /** * @implements {import('@jest/reporters').Reporter} */ export class ReporterServer { - #log = logger.child({ cat: 'reporter', tid: 'reporter' }); + #log = diagnostics.child({ cat: 'reporter', tid: 'jest-metadata-reporter' }); #associate: AssociateMetadata; #fallbackAPI: FallbackAPI; #ipc: IPCServer; + #rootDir: string; constructor(config: ReporterServerConfig) { this.#associate = config.associate; this.#fallbackAPI = config.fallbackAPI; this.#ipc = config.ipc; + this.#rootDir = config.rootDir; // We are memoizing all methods because there might be // multiple reporters based on jest-metadata, so we need to @@ -67,7 +76,7 @@ export class ReporterServer { } onTestFileStart(testPath: string): void { - this.#log.debug.begin(__REPORTER(testPath), testPath); + this.#log.debug.begin(__REPORTER(testPath), __FILE(this.#rootDir, testPath)); const testFileMetadata = this.#fallbackAPI.reportTestFile(testPath); this.#associate.filePath(testPath, testFileMetadata); } diff --git a/src/jest-reporter/__tests__/fallback-api.test.ts b/src/jest-reporter/__tests__/fallback-api.test.ts index 2bc2d03..9884d2a 100644 --- a/src/jest-reporter/__tests__/fallback-api.test.ts +++ b/src/jest-reporter/__tests__/fallback-api.test.ts @@ -40,6 +40,7 @@ describe('Fallback API', () => { const fallbackAPI = new FallbackAPI(globalMetadata, emitter); server = new ReporterServer({ associate, + rootDir: process.cwd(), fallbackAPI, ipc, }); diff --git a/src/metadata/__tests__/__snapshots__/integration.test.ts.snap b/src/metadata/__tests__/__snapshots__/integration.test.ts.snap index 3dcd08f..bf82967 100644 --- a/src/metadata/__tests__/__snapshots__/integration.test.ts.snap +++ b/src/metadata/__tests__/__snapshots__/integration.test.ts.snap @@ -6,6 +6,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/bail-env-1/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -51,6 +52,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/bail-env-N/bail-lo object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_long_js #def +tests_bail_bail_long_js : id = "__tests__/bail/bail-long.js" object "DescribeBlockMetadata" as tests_bail_bail_long_js_describe_0 #ded tests_bail_bail_long_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_long_js_hook_0 #fdd @@ -98,6 +100,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/bail-env-N/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -143,6 +146,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/duplicate-ca object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_cases_js #def +tests_default_duplicate_cases_js : id = "__tests__/default/duplicate-cases.js" object "DescribeBlockMetadata" as tests_default_duplicate_cases_js_describe_0 #ded tests_default_duplicate_cases_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_cases_js_hook_0 #fdd @@ -224,6 +228,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/duplicate-ge object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_generation_js #def +tests_default_duplicate_generation_js : id = "__tests__/default/duplicate-generation.js" object "DescribeBlockMetadata" as tests_default_duplicate_generation_js_describe_0 #ded tests_default_duplicate_generation_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_generation_js_hook_0 #fdd @@ -282,6 +287,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/duplicate-na object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_name_js #def +tests_default_duplicate_name_js : id = "__tests__/default/duplicate-name.js" object "DescribeBlockMetadata" as tests_default_duplicate_name_js_describe_0 #ded tests_default_duplicate_name_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_name_js_hook_0 #fdd @@ -463,6 +469,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/hook-afterAl object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_after_all_fail_js #def +tests_default_hook_after_all_fail_js : id = "__tests__/default/hook-afterAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_after_all_fail_js_describe_0 #ded tests_default_hook_after_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_after_all_fail_js_hook_0 #fdd @@ -515,6 +522,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/hook-beforeA object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_before_all_fail_js #def +tests_default_hook_before_all_fail_js : id = "__tests__/default/hook-beforeAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_before_all_fail_js_describe_0 #ded tests_default_hook_before_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_before_all_fail_js_hook_0 #fdd @@ -561,6 +569,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/hook-nesting object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_nesting_js #def +tests_default_hook_nesting_js : id = "__tests__/default/hook-nesting.js" object "DescribeBlockMetadata" as tests_default_hook_nesting_js_describe_0 #ded tests_default_hook_nesting_js_describe_0 : id = "describe_0" tests_default_hook_nesting_js_describe_0 : data = {\\n "vendor": {\\n "filename": "hook-nesting.js"\\n }\\n} @@ -667,6 +676,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-concurr object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_concurrent_js #def +tests_default_test_concurrent_js : id = "__tests__/default/test-concurrent.js" object "DescribeBlockMetadata" as tests_default_test_concurrent_js_describe_0 #ded tests_default_test_concurrent_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_concurrent_js_hook_0 #fdd @@ -761,6 +771,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-fail 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_fail_js #def +tests_default_test_fail_js : id = "__tests__/default/test-fail.js" object "DescribeBlockMetadata" as tests_default_test_fail_js_describe_0 #ded tests_default_test_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_fail_js_hook_0 #fdd @@ -794,6 +805,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-pass 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_pass_js #def +tests_default_test_pass_js : id = "__tests__/default/test-pass.js" object "DescribeBlockMetadata" as tests_default_test_pass_js_describe_0 #ded tests_default_test_pass_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_pass_js_hook_0 #fdd @@ -827,6 +839,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-retry 1 object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_retry_js #def +tests_default_test_retry_js : id = "__tests__/default/test-retry.js" object "DescribeBlockMetadata" as tests_default_test_retry_js_describe_0 #ded tests_default_test_retry_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_retry_js_hook_0 #fdd @@ -887,6 +900,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-skip 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_skip_js #def +tests_default_test_skip_js : id = "__tests__/default/test-skip.js" object "DescribeBlockMetadata" as tests_default_test_skip_js_describe_0 #ded tests_default_test_skip_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_skip_js_hook_0 #fdd @@ -934,6 +948,7 @@ exports[`metadata - integration test: e2e/__fixtures__/27.x.x/env-N/test-todo 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_todo_js #def +tests_default_test_todo_js : id = "__tests__/default/test-todo.js" object "DescribeBlockMetadata" as tests_default_test_todo_js_describe_0 #ded tests_default_test_todo_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_todo_js_hook_0 #fdd @@ -1001,6 +1016,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/bail-env-1/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -1046,6 +1062,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/bail-env-N/bail-lo object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_long_js #def +tests_bail_bail_long_js : id = "__tests__/bail/bail-long.js" object "DescribeBlockMetadata" as tests_bail_bail_long_js_describe_0 #ded tests_bail_bail_long_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_long_js_hook_0 #fdd @@ -1093,6 +1110,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/bail-env-N/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -1138,6 +1156,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/duplicate-ca object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_cases_js #def +tests_default_duplicate_cases_js : id = "__tests__/default/duplicate-cases.js" object "DescribeBlockMetadata" as tests_default_duplicate_cases_js_describe_0 #ded tests_default_duplicate_cases_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_cases_js_hook_0 #fdd @@ -1219,6 +1238,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/duplicate-ge object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_generation_js #def +tests_default_duplicate_generation_js : id = "__tests__/default/duplicate-generation.js" object "DescribeBlockMetadata" as tests_default_duplicate_generation_js_describe_0 #ded tests_default_duplicate_generation_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_generation_js_hook_0 #fdd @@ -1277,6 +1297,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/duplicate-na object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_name_js #def +tests_default_duplicate_name_js : id = "__tests__/default/duplicate-name.js" object "DescribeBlockMetadata" as tests_default_duplicate_name_js_describe_0 #ded tests_default_duplicate_name_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_name_js_hook_0 #fdd @@ -1458,6 +1479,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/hook-afterAl object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_after_all_fail_js #def +tests_default_hook_after_all_fail_js : id = "__tests__/default/hook-afterAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_after_all_fail_js_describe_0 #ded tests_default_hook_after_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_after_all_fail_js_hook_0 #fdd @@ -1510,6 +1532,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/hook-beforeA object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_before_all_fail_js #def +tests_default_hook_before_all_fail_js : id = "__tests__/default/hook-beforeAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_before_all_fail_js_describe_0 #ded tests_default_hook_before_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_before_all_fail_js_hook_0 #fdd @@ -1556,6 +1579,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/hook-nesting object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_nesting_js #def +tests_default_hook_nesting_js : id = "__tests__/default/hook-nesting.js" object "DescribeBlockMetadata" as tests_default_hook_nesting_js_describe_0 #ded tests_default_hook_nesting_js_describe_0 : id = "describe_0" tests_default_hook_nesting_js_describe_0 : data = {\\n "vendor": {\\n "filename": "hook-nesting.js"\\n }\\n} @@ -1662,6 +1686,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-concurr object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_concurrent_js #def +tests_default_test_concurrent_js : id = "__tests__/default/test-concurrent.js" object "DescribeBlockMetadata" as tests_default_test_concurrent_js_describe_0 #ded tests_default_test_concurrent_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_concurrent_js_hook_0 #fdd @@ -1736,6 +1761,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-fail 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_fail_js #def +tests_default_test_fail_js : id = "__tests__/default/test-fail.js" object "DescribeBlockMetadata" as tests_default_test_fail_js_describe_0 #ded tests_default_test_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_fail_js_hook_0 #fdd @@ -1769,6 +1795,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-pass 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_pass_js #def +tests_default_test_pass_js : id = "__tests__/default/test-pass.js" object "DescribeBlockMetadata" as tests_default_test_pass_js_describe_0 #ded tests_default_test_pass_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_pass_js_hook_0 #fdd @@ -1802,6 +1829,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-retry 1 object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_retry_js #def +tests_default_test_retry_js : id = "__tests__/default/test-retry.js" object "DescribeBlockMetadata" as tests_default_test_retry_js_describe_0 #ded tests_default_test_retry_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_retry_js_hook_0 #fdd @@ -1862,6 +1890,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-skip 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_skip_js #def +tests_default_test_skip_js : id = "__tests__/default/test-skip.js" object "DescribeBlockMetadata" as tests_default_test_skip_js_describe_0 #ded tests_default_test_skip_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_skip_js_hook_0 #fdd @@ -1909,6 +1938,7 @@ exports[`metadata - integration test: e2e/__fixtures__/28.x.x/env-N/test-todo 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_todo_js #def +tests_default_test_todo_js : id = "__tests__/default/test-todo.js" object "DescribeBlockMetadata" as tests_default_test_todo_js_describe_0 #ded tests_default_test_todo_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_todo_js_hook_0 #fdd @@ -1976,6 +2006,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/bail-env-1/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -2021,6 +2052,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/bail-env-N/bail-lo object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_long_js #def +tests_bail_bail_long_js : id = "__tests__/bail/bail-long.js" object "DescribeBlockMetadata" as tests_bail_bail_long_js_describe_0 #ded tests_bail_bail_long_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_long_js_hook_0 #fdd @@ -2068,6 +2100,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/bail-env-N/bail-sh object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_bail_bail_short_js #def +tests_bail_bail_short_js : id = "__tests__/bail/bail-short.js" object "DescribeBlockMetadata" as tests_bail_bail_short_js_describe_0 #ded tests_bail_bail_short_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_bail_bail_short_js_hook_0 #fdd @@ -2113,6 +2146,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/duplicate-ca object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_cases_js #def +tests_default_duplicate_cases_js : id = "__tests__/default/duplicate-cases.js" object "DescribeBlockMetadata" as tests_default_duplicate_cases_js_describe_0 #ded tests_default_duplicate_cases_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_cases_js_hook_0 #fdd @@ -2194,6 +2228,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/duplicate-ge object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_generation_js #def +tests_default_duplicate_generation_js : id = "__tests__/default/duplicate-generation.js" object "DescribeBlockMetadata" as tests_default_duplicate_generation_js_describe_0 #ded tests_default_duplicate_generation_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_generation_js_hook_0 #fdd @@ -2252,6 +2287,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/duplicate-na object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_duplicate_name_js #def +tests_default_duplicate_name_js : id = "__tests__/default/duplicate-name.js" object "DescribeBlockMetadata" as tests_default_duplicate_name_js_describe_0 #ded tests_default_duplicate_name_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_duplicate_name_js_hook_0 #fdd @@ -2433,6 +2469,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/hook-afterAl object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_after_all_fail_js #def +tests_default_hook_after_all_fail_js : id = "__tests__/default/hook-afterAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_after_all_fail_js_describe_0 #ded tests_default_hook_after_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_after_all_fail_js_hook_0 #fdd @@ -2485,6 +2522,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/hook-beforeA object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_before_all_fail_js #def +tests_default_hook_before_all_fail_js : id = "__tests__/default/hook-beforeAll-fail.js" object "DescribeBlockMetadata" as tests_default_hook_before_all_fail_js_describe_0 #ded tests_default_hook_before_all_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_hook_before_all_fail_js_hook_0 #fdd @@ -2531,6 +2569,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/hook-nesting object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_hook_nesting_js #def +tests_default_hook_nesting_js : id = "__tests__/default/hook-nesting.js" object "DescribeBlockMetadata" as tests_default_hook_nesting_js_describe_0 #ded tests_default_hook_nesting_js_describe_0 : id = "describe_0" tests_default_hook_nesting_js_describe_0 : data = {\\n "vendor": {\\n "filename": "hook-nesting.js"\\n }\\n} @@ -2637,6 +2676,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-concurr object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_concurrent_js #def +tests_default_test_concurrent_js : id = "__tests__/default/test-concurrent.js" object "DescribeBlockMetadata" as tests_default_test_concurrent_js_describe_0 #ded tests_default_test_concurrent_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_concurrent_js_hook_0 #fdd @@ -2711,6 +2751,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-fail 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_fail_js #def +tests_default_test_fail_js : id = "__tests__/default/test-fail.js" object "DescribeBlockMetadata" as tests_default_test_fail_js_describe_0 #ded tests_default_test_fail_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_fail_js_hook_0 #fdd @@ -2744,6 +2785,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-pass 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_pass_js #def +tests_default_test_pass_js : id = "__tests__/default/test-pass.js" object "DescribeBlockMetadata" as tests_default_test_pass_js_describe_0 #ded tests_default_test_pass_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_pass_js_hook_0 #fdd @@ -2777,6 +2819,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-retry 1 object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_retry_js #def +tests_default_test_retry_js : id = "__tests__/default/test-retry.js" object "DescribeBlockMetadata" as tests_default_test_retry_js_describe_0 #ded tests_default_test_retry_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_retry_js_hook_0 #fdd @@ -2837,6 +2880,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-skip 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_skip_js #def +tests_default_test_skip_js : id = "__tests__/default/test-skip.js" object "DescribeBlockMetadata" as tests_default_test_skip_js_describe_0 #ded tests_default_test_skip_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_skip_js_hook_0 #fdd @@ -2884,6 +2928,7 @@ exports[`metadata - integration test: e2e/__fixtures__/29.x.x/env-N/test-todo 1` object "GlobalMetadata" as global_metadata #dff global_metadata : id = "globalMetadata" object "TestFileMetadata" as tests_default_test_todo_js #def +tests_default_test_todo_js : id = "__tests__/default/test-todo.js" object "DescribeBlockMetadata" as tests_default_test_todo_js_describe_0 #ded tests_default_test_todo_js_describe_0 : id = "describe_0" object "HookDefinitionMetadata" as tests_default_test_todo_js_hook_0 #fdd diff --git a/src/metadata/__tests__/integration.test.ts b/src/metadata/__tests__/integration.test.ts index 9810686..36d0c36 100644 --- a/src/metadata/__tests__/integration.test.ts +++ b/src/metadata/__tests__/integration.test.ts @@ -1,34 +1,12 @@ import fixtures from '../../../e2e'; -import { SerialEmitter } from '../../utils'; -import { PlantSerializer } from '../__utils__'; -import { - GlobalMetadataRegistry, - MetadataEventHandler, - MetadataFactoryImpl, - WriteMetadataEventEmitter, -} from '../index'; +import { visualize } from '../../debug'; describe('metadata - integration test:', () => { test.each(Object.values(fixtures.metadata))( `e2e/__fixtures__/%s`, - (_name: string, fixture: any[]) => { - const emitter: WriteMetadataEventEmitter = new SerialEmitter('set'); - const metadataRegistry = new GlobalMetadataRegistry(); - const metadataFactory = new MetadataFactoryImpl(metadataRegistry, emitter); - const globalMetadata = metadataFactory.createGlobalMetadata(); - const eventHandler = new MetadataEventHandler({ - globalMetadata, - metadataRegistry, - }); - - const serialized = () => PlantSerializer.serialize(metadataFactory.checker, metadataRegistry); - - for (const event of fixture) { - eventHandler.handle(event); - } - - expect(serialized()).toMatchSnapshot(); + async (_name: string, fixture: any[]) => { + await expect(visualize(fixture)).resolves.toMatchSnapshot(); }, ); }); diff --git a/src/metadata/__utils__/index.ts b/src/metadata/__utils__/index.ts deleted file mode 100644 index 8b22d1d..0000000 --- a/src/metadata/__utils__/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './plant'; -export * from './MetadataVisitor'; diff --git a/src/metadata/containers/BaseMetadata.ts b/src/metadata/containers/BaseMetadata.ts index 5b04408..7808ae9 100644 --- a/src/metadata/containers/BaseMetadata.ts +++ b/src/metadata/containers/BaseMetadata.ts @@ -1,13 +1,13 @@ /* eslint-disable unicorn/no-null */ import lodashMerge from 'lodash.merge'; -import { get as lodashGet, set as lodashSet, logger, optimizeTracing } from '../../utils'; +import { get as lodashGet, set as lodashSet, diagnostics, optimizeTracing } from '../../utils'; import type { AggregatedIdentifier } from '../ids'; import * as symbols from '../symbols'; import type { Data, Metadata } from '../types'; import type { MetadataContext } from './MetadataContext'; -const log = logger.child({ cat: 'metadata', tid: 'metadata' }); +const log = diagnostics.child({ cat: 'metadata', tid: 'jest-metadata' }); const __LOG_METADATA = optimizeTracing((metadata: BaseMetadata, id: AggregatedIdentifier) => { log.trace({ id }, metadata.constructor.name); @@ -126,6 +126,14 @@ export abstract class BaseMetadata implements Metadata { return this; } + toJSON() { + return { + id: this.id, + type: this.constructor.name, + data: this[symbols.data], + }; + } + #get(path?: string | readonly string[], fallbackValue?: unknown): Data | unknown { return path == null ? this[symbols.data] : lodashGet(this[symbols.data], path, fallbackValue); } diff --git a/src/metadata/dsl/MetadataDSL.ts b/src/metadata/dsl/MetadataDSL.ts index fd726c6..6b3de73 100644 --- a/src/metadata/dsl/MetadataDSL.ts +++ b/src/metadata/dsl/MetadataDSL.ts @@ -2,7 +2,7 @@ import { JestMetadataError } from '../../errors'; import { logger } from '../../utils'; import type { Data, Metadata, ReadonlyMetadataEventEmitter } from '../types'; -const log = logger.child({ cat: 'metadata', tid: 'metadata' }); +const log = logger.child({ cat: 'dsl', tid: 'jest-metadata' }); export class MetadataDSL { readonly #metadata: () => Metadata; diff --git a/src/realms/ParentProcessRealm.ts b/src/realms/ParentProcessRealm.ts index 001e649..bbd6100 100644 --- a/src/realms/ParentProcessRealm.ts +++ b/src/realms/ParentProcessRealm.ts @@ -21,6 +21,7 @@ export class ParentProcessRealm extends BaseRealm { associate: this.associate, fallbackAPI: this.fallbackAPI, ipc: this.ipc, + rootDir: process.cwd(), }); constructor() { diff --git a/src/utils/emitters/SerialEmitter.ts b/src/utils/emitters/SerialEmitter.ts index 3bda9e5..0c99dea 100644 --- a/src/utils/emitters/SerialEmitter.ts +++ b/src/utils/emitters/SerialEmitter.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-types */ import type { Emitter } from '../../types'; -import { logger, nologger, optimizeTracing } from '../logger'; +import { diagnostics, nologger, optimizeTracing } from '../logger'; //#region Optimized event helpers @@ -37,13 +37,16 @@ const ONCE: unique symbol = Symbol('ONCE'); * will be queued and emitted after the current event is finished. */ export class SerialEmitter implements Emitter { - protected readonly _log: typeof logger; + protected readonly _log: typeof diagnostics; protected readonly _listeners: Map = new Map(); #queue: Event[] = []; constructor(name?: string, shouldLog = true) { - this._log = (shouldLog ? logger : nologger).child({ cat: `emitter`, tid: `emitter-${name}` }); + this._log = (shouldLog ? diagnostics : nologger).child({ + cat: [`emitter`, `emitter-${name}`], + tid: `jest-metadata-emitter-${name}`, + }); this._listeners.set('*', []); } diff --git a/src/utils/index.ts b/src/utils/index.ts index 738e6bc..866c742 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,7 +1,7 @@ export * from './emitters'; export * as jestUtils from './jestUtils'; export { getVersion } from './getVersion'; -export { logger, optimizeTracing } from './logger'; +export { diagnostics, logger, nologger, optimizeTracing } from './logger'; export { get } from './get'; export { set } from './set'; export { makeDeferred, Deferred } from './makeDeferred'; diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 9bccdbf..6a30b73 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -1,18 +1,28 @@ -import { bunyamin, isDebug, threadGroups } from 'bunyamin'; - -threadGroups.add({ id: 'ipc-server', displayName: 'IPC Server (jest-metadata)' }); -threadGroups.add({ id: 'ipc-client', displayName: 'IPC Client (jest-metadata)' }); -threadGroups.add({ id: 'emitter-core', displayName: 'Core emitter (jest-metadata)' }); -threadGroups.add({ id: 'emitter-set', displayName: 'Set emitter (jest-metadata)' }); -threadGroups.add({ id: 'emitter-events', displayName: 'Events emitter (jest-metadata)' }); -threadGroups.add({ id: 'environment', displayName: 'Test Environment (jest-metadata)' }); -threadGroups.add({ id: 'metadata', displayName: 'Metadata (jest-metadata)' }); -threadGroups.add({ id: 'reporter', displayName: 'Reporter (jest-metadata)' }); +import { bunyamin, isDebug, nobunyamin, threadGroups } from 'bunyamin'; function isTraceEnabled(): boolean { return isDebug('jest-metadata'); } +threadGroups + .add({ id: 'jest-metadata', displayName: 'jest-metadata' }) + .add({ + id: 'jest-metadata-emitter-core', + displayName: 'jest-metadata (Core Emitter)', + }) + .add({ + id: 'jest-metadata-emitter-events', + displayName: 'jest-metadata (Events Emitter)', + }) + .add({ + id: 'jest-metadata-emitter-globalMetadataRegistry', + displayName: 'jest-metadata (Metadata Registry)', + }) + .add({ id: 'jest-metadata-emitter-set', displayName: 'jest-metadata (Set Emitter)' }) + .add({ id: 'jest-metadata-environment', displayName: 'jest-metadata (Environment)' }) + .add({ id: 'jest-metadata-ipc', displayName: 'jest-metadata (IPC)' }) + .add({ id: 'jest-metadata-reporter', displayName: 'jest-metadata (Reporter)' }); + const EMPTY = {}; const NOOP: any = () => EMPTY; @@ -20,4 +30,6 @@ export const optimizeTracing: (f: F) => F = isTraceEnabled() ? (f) => f : () export const logger = bunyamin.child({ cat: 'jest-metadata' }); +export const diagnostics = isTraceEnabled() ? logger : nobunyamin; + export { nobunyamin as nologger } from 'bunyamin';