diff --git a/packages/cli/src/context/connections/drivers.ts b/packages/cli/src/context/connections/drivers.ts index be4f30f3..1b87984b 100644 --- a/packages/cli/src/context/connections/drivers.ts +++ b/packages/cli/src/context/connections/drivers.ts @@ -1,8 +1,10 @@ import type { KtxConnectionDriver, KtxScanConnector } from '../scan/types.js'; -type KtxScopeConfigKey = 'dataset_ids' | 'databases' | 'schemas' | 'schema_names'; +/** @internal */ +export type KtxScopeConfigKey = 'dataset_ids' | 'databases' | 'schemas' | 'schema_names'; -interface KtxDriverConnectorModule { +/** @internal */ +export interface KtxDriverConnectorModule { isConnectionConfig(connection: unknown): boolean; createScanConnector(args: { connectionId: string; @@ -181,15 +183,7 @@ export const driverRegistrations: Record Record; @@ -66,6 +70,16 @@ const allowedScopeKeys = new Set(['dataset_ids', 'databases', 'schemas', 'schema const historicSqlReaderDrivers = new Set(['postgres', 'bigquery', 'snowflake']); const localExecutorDrivers = new Set(['postgres', 'sqlite']); +function assertExportedRegistryBoundaryTypes(input: { + scopeConfigKey: KtxScopeConfigKey; + connectorModule: KtxDriverConnectorModule; +}): { + scopeConfigKey: KtxScopeConfigKey; + connectorModule: KtxDriverConnectorModule; +} { + return input; +} + describe('driverRegistrations', () => { let projectDir: string; @@ -78,13 +92,15 @@ describe('driverRegistrations', () => { }); it('lists every supported warehouse driver', () => { + const registryDrivers = Object.keys(driverRegistrations).sort(); + expect(listSupportedDrivers()).toEqual(registryDrivers); expect(listSupportedDrivers()).toEqual([ 'bigquery', 'clickhouse', 'mysql', 'postgres', - 'sqlite', 'snowflake', + 'sqlite', 'sqlserver', ]); }); @@ -97,6 +113,11 @@ describe('driverRegistrations', () => { it.each(Object.values(driverRegistrations))('adapts $driver connector exports', async (registration) => { const connectorModule = await registration.load(); const connection = connectionFixtures[registration.driver](projectDir); + const exportedBoundary = assertExportedRegistryBoundaryTypes({ + scopeConfigKey: registration.scopeConfigKey ?? 'schemas', + connectorModule, + }); + expect(exportedBoundary.connectorModule.createScanConnector).toEqual(expect.any(Function)); expect(connectorModule.isConnectionConfig(connection)).toBe(true); expect(connectorModule.isConnectionConfig({})).toBe(false);