import { RhizomeNode } from '@src'; import { Lossless } from '@src/views/lossless'; import { Delta } from '@src/core/delta'; import { createDelta } from '@src/core/delta-builder'; import { CustomResolver } from '@src/views/resolvers/custom-resolvers'; import { ResolverPlugin } from '@src/views/resolvers/custom-resolvers/plugin'; // Define a test plugin map that enforces string dependencies type TestPluginMap = { [key: string]: ResolverPlugin; }; interface TestHelperOptions { entityId?: string; plugins: T; deltas: Delta[]; } export async function testResolverWithPlugins( options: TestHelperOptions ) { const { entityId = 'test-entity', plugins, deltas, } = options; // Setup test environment const node = new RhizomeNode(); const lossless = new Lossless(node); const view = new CustomResolver(lossless, plugins); // Ingest all deltas through the lossless instance for (const delta of deltas) { lossless.ingestDelta(delta); } // Get the resolved view const resolvedView = view.resolve([entityId]); if (!resolvedView) throw new Error(`Resolved view for entity ${entityId} is undefined`); return resolvedView[entityId]; } /** * Helper to create a test delta with proper typing * @param creator The creator of the delta * @param host The host of the delta * @returns A test delta */ export function createTestDelta(creator = 'user1', host = 'host1') { return createDelta(creator, host); }