@loykin/datasourcekit 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/registry.ts","../src/manager.ts","../src/plugin.ts"],"names":["items","options"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n DatasourceConfigEditorProps,\n DatasourcePluginDef,\n DatasourceQueryEditorProps,\n} from './plugin'\n\nexport interface DatasourceRegistry {\n register(plugin: DatasourcePluginDef): void\n get(type: string): DatasourcePluginDef | undefined\n has(type: string): boolean\n list(): DatasourcePluginDef[]\n getConfigEditor(\n type: string,\n ): ((props: DatasourceConfigEditorProps<unknown>) => unknown) | undefined\n getQueryEditor(\n type: string,\n ): ((props: DatasourceQueryEditorProps<unknown, unknown>) => unknown) | undefined\n}\n\nexport function createDatasourceRegistry(\n plugins: readonly DatasourcePluginDef[] = [],\n): DatasourceRegistry {\n const byType = new Map<string, DatasourcePluginDef>()\n\n const registry: DatasourceRegistry = {\n register(plugin) {\n byType.set(plugin.type, plugin)\n },\n\n get(type) {\n return byType.get(type)\n },\n\n has(type) {\n return byType.has(type)\n },\n\n list() {\n return [...byType.values()]\n },\n\n getConfigEditor(type) {\n return byType.get(type)?.configEditor as\n | ((props: DatasourceConfigEditorProps<unknown>) => unknown)\n | undefined\n },\n\n getQueryEditor(type) {\n return byType.get(type)?.queryEditor as\n | ((props: DatasourceQueryEditorProps<unknown, unknown>) => unknown)\n | undefined\n },\n }\n\n for (const plugin of plugins) registry.register(plugin)\n\n return registry\n}\n","import {\n DatasourceCapabilityError,\n DatasourceConflictError,\n DatasourceForbiddenError,\n DatasourceNotFoundError,\n DatasourceTransportError,\n DatasourceTypeNotRegisteredError,\n DatasourceUnauthorizedError,\n DatasourceValidationError,\n} from './errors'\nimport type { DatasourcePluginDef } from './plugin'\nimport { createDatasourceRegistry, type DatasourceRegistry } from './registry'\nimport type {\n BatchQueryResult,\n DataQuery,\n DatasourceContext,\n DatasourceCreateInput,\n DatasourceHealthResult,\n DatasourceInstance,\n DatasourceListOptions,\n DatasourceListResult,\n DatasourceSchemaField,\n DatasourceSchemaFieldRequest,\n DatasourceSchemaNamespace,\n DatasourceTypeInfo,\n DatasourceUpdateInput,\n DatasourceValidationResult,\n QueryResult,\n} from './types'\n\nexport interface QueryCallOptions {\n transform?: (result: QueryResult) => QueryResult | Promise<QueryResult>\n}\n\nexport interface DatasourceManagerTypes {\n list(context?: DatasourceContext): Promise<DatasourceTypeInfo[]>\n get(type: string, context?: DatasourceContext): Promise<DatasourceTypeInfo>\n install?(type: string, context?: DatasourceContext): Promise<void>\n uninstall?(type: string, context?: DatasourceContext): Promise<void>\n enable?(type: string, context?: DatasourceContext): Promise<void>\n disable?(type: string, context?: DatasourceContext): Promise<void>\n}\n\nexport interface DatasourceManagerInstances {\n list(options?: DatasourceListOptions, context?: DatasourceContext): Promise<DatasourceListResult>\n get(uid: string, context?: DatasourceContext): Promise<DatasourceInstance>\n create(\n input: DatasourceCreateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n update(\n uid: string,\n patch: DatasourceUpdateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n delete(uid: string, context?: DatasourceContext): Promise<void>\n query(\n request: DataQuery,\n context?: DatasourceContext,\n options?: QueryCallOptions,\n ): Promise<QueryResult>\n batchQuery(\n requests: DataQuery[],\n context?: DatasourceContext,\n options?: QueryCallOptions,\n ): Promise<BatchQueryResult>\n healthCheck(uid: string, type: string, context?: DatasourceContext): Promise<DatasourceHealthResult>\n validateQuery(\n uid: string,\n type: string,\n query: unknown,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces(\n uid: string,\n type: string,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaNamespace[]>\n listFields(\n uid: string,\n type: string,\n request: DatasourceSchemaFieldRequest,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface DatasourceManager {\n registerPlugin(plugin: DatasourcePluginDef): void\n registry: DatasourceRegistry\n types: DatasourceManagerTypes\n instances: DatasourceManagerInstances\n}\n\nexport interface DatasourceManagerBackend {\n types: {\n list(context?: DatasourceContext): Promise<DatasourceTypeInfo[]>\n get(type: string, context?: DatasourceContext): Promise<DatasourceTypeInfo>\n install?(type: string, context?: DatasourceContext): Promise<void>\n uninstall?(type: string, context?: DatasourceContext): Promise<void>\n enable?(type: string, context?: DatasourceContext): Promise<void>\n disable?(type: string, context?: DatasourceContext): Promise<void>\n }\n instances: {\n list(options?: DatasourceListOptions, context?: DatasourceContext): Promise<DatasourceListResult>\n get(uid: string, context?: DatasourceContext): Promise<DatasourceInstance>\n create(\n input: DatasourceCreateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n update(\n uid: string,\n patch: DatasourceUpdateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n delete(uid: string, context?: DatasourceContext): Promise<void>\n }\n query(request: DataQuery, context?: DatasourceContext): Promise<unknown>\n batchQuery?(requests: DataQuery[], context?: DatasourceContext): Promise<BatchQueryResult>\n healthCheck?(uid: string, context?: DatasourceContext): Promise<DatasourceHealthResult>\n validateQuery?(\n uid: string,\n query: unknown,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces?(uid: string, context?: DatasourceContext): Promise<DatasourceSchemaNamespace[]>\n listFields?(\n uid: string,\n request: DatasourceSchemaFieldRequest,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface CreateDatasourceManagerOptions {\n registry?: DatasourceRegistry\n plugins?: readonly DatasourcePluginDef[]\n backend: DatasourceManagerBackend\n}\n\nfunction getRequestType(request: DataQuery): string {\n if (!request.datasourceType) {\n throw new DatasourceValidationError('query request requires datasourceType', [\n 'datasourceType is required for plugin routing',\n ])\n }\n return request.datasourceType\n}\n\nfunction getPlugin(registry: DatasourceRegistry, type: string): DatasourcePluginDef {\n const plugin = registry.get(type)\n if (!plugin) throw new DatasourceTypeNotRegisteredError(type)\n return plugin\n}\n\nasync function normalizeQueryResult(\n raw: unknown,\n request: DataQuery,\n context: DatasourceContext | undefined,\n plugin: DatasourcePluginDef,\n options: QueryCallOptions | undefined,\n): Promise<QueryResult> {\n const normalized = plugin.backend?.transform\n ? await plugin.backend.transform(raw, request, context)\n : raw as QueryResult\n return options?.transform ? options.transform(normalized) : normalized\n}\n\nfunction typeInfoFromPlugin(plugin: DatasourcePluginDef): DatasourceTypeInfo {\n return {\n type: plugin.type,\n name: plugin.name,\n ...(plugin.description !== undefined ? { description: plugin.description } : {}),\n installed: false,\n enabled: false,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n ...(plugin.meta !== undefined ? { meta: plugin.meta } : {}),\n }\n}\n\nfunction mergeTypeInfo(\n backendTypes: DatasourceTypeInfo[],\n plugins: DatasourcePluginDef[],\n): DatasourceTypeInfo[] {\n const byType = new Map<string, DatasourceTypeInfo>()\n for (const typeInfo of backendTypes) byType.set(typeInfo.type, { ...typeInfo })\n\n for (const plugin of plugins) {\n const current = byType.get(plugin.type)\n if (current) {\n byType.set(plugin.type, {\n ...current,\n name: current.name || plugin.name,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n })\n } else {\n byType.set(plugin.type, typeInfoFromPlugin(plugin))\n }\n }\n\n return [...byType.values()]\n}\n\nasync function getInstanceOptions(\n backend: DatasourceManagerBackend,\n uid: string,\n context?: DatasourceContext,\n): Promise<unknown> {\n const instance = await backend.instances.get(uid, context)\n return instance.options ?? {}\n}\n\nfunction missingCapability(uid: string, capability: string): never {\n throw new DatasourceCapabilityError(uid, capability)\n}\n\nexport function createDatasourceManager(options: CreateDatasourceManagerOptions): DatasourceManager {\n const registry = options.registry ?? createDatasourceRegistry(options.plugins)\n\n if (options.registry && options.plugins) {\n for (const plugin of options.plugins) registry.register(plugin)\n }\n\n const manager: DatasourceManager = {\n registry,\n\n registerPlugin(plugin) {\n registry.register(plugin)\n },\n\n types: {\n async list(context) {\n const backendTypes = await options.backend.types.list(context)\n return mergeTypeInfo(backendTypes, registry.list())\n },\n\n async get(type, context) {\n const plugin = registry.get(type)\n let backendType: DatasourceTypeInfo | undefined\n try {\n backendType = await options.backend.types.get(type, context)\n } catch (error) {\n if (!(error instanceof DatasourceNotFoundError) || !plugin) throw error\n }\n if (!backendType) {\n if (!plugin) throw new DatasourceNotFoundError(type)\n return typeInfoFromPlugin(plugin)\n }\n if (!plugin) return backendType\n return {\n ...backendType,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n }\n },\n\n ...(options.backend.types.install\n ? { install: (type, context) => options.backend.types.install?.(type, context) ?? missingCapability(type, 'types.install') }\n : {}),\n ...(options.backend.types.uninstall\n ? { uninstall: (type, context) => options.backend.types.uninstall?.(type, context) ?? missingCapability(type, 'types.uninstall') }\n : {}),\n ...(options.backend.types.enable\n ? { enable: (type, context) => options.backend.types.enable?.(type, context) ?? missingCapability(type, 'types.enable') }\n : {}),\n ...(options.backend.types.disable\n ? { disable: (type, context) => options.backend.types.disable?.(type, context) ?? missingCapability(type, 'types.disable') }\n : {}),\n },\n\n instances: {\n list: (listOptions, context) => options.backend.instances.list(listOptions, context),\n get: (uid, context) => options.backend.instances.get(uid, context),\n create: (input, context) => options.backend.instances.create(input, context),\n update: (uid, patch, context) => options.backend.instances.update(uid, patch, context),\n delete: (uid, context) => options.backend.instances.delete(uid, context),\n\n async query(request, context, callOptions) {\n const type = getRequestType(request)\n const plugin = getPlugin(registry, type)\n const raw = plugin.backend?.query\n ? await plugin.backend.query(request, context)\n : await options.backend.query(request, context)\n return normalizeQueryResult(raw, request, context, plugin, callOptions)\n },\n\n async batchQuery(requests, context, callOptions) {\n if (options.backend.batchQuery) {\n const result = await options.backend.batchQuery(requests, context)\n if (!callOptions?.transform) return result\n const items = await Promise.all(result.items.map(async (item) => {\n if (item.error || !item.data) return item\n try {\n return { data: await callOptions.transform!(item.data) }\n } catch (error) {\n return { error: error instanceof Error ? error : new Error(String(error)) }\n }\n }))\n return { items }\n }\n\n const items = await Promise.all(requests.map(async (request) => {\n try {\n const data = await manager.instances.query(request, context, callOptions)\n return { data }\n } catch (error) {\n return { error: error instanceof Error ? error : new Error(String(error)) }\n }\n }))\n return { items }\n },\n\n async healthCheck(uid, type, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.healthCheck) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.healthCheck(uid, datasourceOptions, context)\n }\n return options.backend.healthCheck?.(uid, context) ?? missingCapability(uid, 'healthCheck')\n },\n\n async validateQuery(uid, type, query, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.validateQuery) {\n return plugin.backend.validateQuery(uid, query, context)\n }\n return options.backend.validateQuery?.(uid, query, context) ?? missingCapability(uid, 'validateQuery')\n },\n\n async listNamespaces(uid, type, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.listNamespaces) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.listNamespaces(uid, datasourceOptions, context)\n }\n return options.backend.listNamespaces?.(uid, context) ?? missingCapability(uid, 'listNamespaces')\n },\n\n async listFields(uid, type, request, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.listFields) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.listFields(uid, request, datasourceOptions, context)\n }\n return options.backend.listFields?.(uid, request, context) ?? missingCapability(uid, 'listFields')\n },\n },\n }\n\n return manager\n}\n\nexport interface CreateRestDatasourceManagerOptions {\n baseUrl: string\n fetch?: typeof fetch\n getHeaders?: (context?: DatasourceContext) => HeadersInit | Promise<HeadersInit>\n paths?: Partial<RestDatasourceManagerPaths>\n unwrap?<T>(body: unknown, response: Response): T\n createError?(response: Response, body: unknown): Error | undefined\n}\n\nexport interface RestDatasourceManagerPaths {\n typesList(): string\n typeGet(type: string): string\n typeAction(type: string, action: 'install' | 'uninstall' | 'enable' | 'disable'): string\n instancesList(queryString: string): string\n instanceGet(uid: string): string\n instanceCreate(): string\n instanceUpdate(uid: string): string\n instanceDelete(uid: string): string\n query(): string\n healthCheck(uid: string): string\n validateQuery(uid: string): string\n listNamespaces(uid: string): string\n listFields(uid: string): string\n}\n\nconst defaultRestPaths: RestDatasourceManagerPaths = {\n typesList: () => '/types',\n typeGet: (type) => `/types/${encodeURIComponent(type)}`,\n typeAction: (type, action) => `/types/${encodeURIComponent(type)}/${action}`,\n instancesList: (qs) => qs,\n instanceGet: (uid) => `/${encodeURIComponent(uid)}`,\n instanceCreate: () => '',\n instanceUpdate: (uid) => `/${encodeURIComponent(uid)}`,\n instanceDelete: (uid) => `/${encodeURIComponent(uid)}`,\n query: () => '/query',\n healthCheck: (uid) => `/${encodeURIComponent(uid)}/health`,\n validateQuery: (uid) => `/${encodeURIComponent(uid)}/validate-query`,\n listNamespaces: (uid) => `/${encodeURIComponent(uid)}/namespaces`,\n listFields: (uid) => `/${encodeURIComponent(uid)}/fields`,\n}\n\nfunction mergeRestPaths(paths?: Partial<RestDatasourceManagerPaths>): RestDatasourceManagerPaths {\n return { ...defaultRestPaths, ...paths }\n}\n\nasync function readJson(response: Response): Promise<unknown> {\n if (response.status === 204) return undefined\n try {\n return await response.json()\n } catch {\n return undefined\n }\n}\n\nasync function parseResponse<T>(\n response: Response,\n options: CreateRestDatasourceManagerOptions,\n): Promise<T> {\n const body = await readJson(response)\n\n if (response.ok) {\n return options.unwrap ? options.unwrap<T>(body, response) : body as T\n }\n\n const customError = options.createError?.(response, body)\n if (customError) throw customError\n\n const errorBody = body as { message?: string; errors?: string[] } | undefined\n const message = errorBody?.message\n if (response.status === 401) throw new DatasourceUnauthorizedError(message)\n if (response.status === 403) throw new DatasourceForbiddenError(message)\n if (response.status === 404) throw new DatasourceNotFoundError(message ?? 'unknown')\n if (response.status === 409) throw new DatasourceConflictError(message)\n if (response.status === 422) throw new DatasourceValidationError(message, errorBody?.errors)\n throw new DatasourceTransportError(message, response.status)\n}\n\nasync function requestHeaders(\n options: CreateRestDatasourceManagerOptions,\n context?: DatasourceContext,\n): Promise<HeadersInit> {\n return {\n 'content-type': 'application/json',\n ...(context?.authToken ? { authorization: `Bearer ${context.authToken}` } : {}),\n ...(context?.headers ?? {}),\n ...await options.getHeaders?.(context),\n }\n}\n\nfunction queryString(options?: DatasourceListOptions): string {\n const params = new URLSearchParams()\n if (options?.filter?.type !== undefined) {\n const types = Array.isArray(options.filter.type) ? options.filter.type : [options.filter.type]\n for (const type of types) params.append('type', type)\n }\n if (options?.filter?.enabled !== undefined) params.set('enabled', String(options.filter.enabled))\n if (options?.filter?.search !== undefined) params.set('search', options.filter.search)\n if (options?.page !== undefined) params.set('page', String(options.page))\n if (options?.pageSize !== undefined) params.set('pageSize', String(options.pageSize))\n if (options?.cursor !== undefined) params.set('cursor', options.cursor)\n const qs = params.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function createRestDatasourceManager(\n options: CreateRestDatasourceManagerOptions,\n): DatasourceManagerBackend {\n const fetchImpl = options.fetch ?? fetch\n const baseUrl = options.baseUrl.replace(/\\/$/, '')\n const paths = mergeRestPaths(options.paths)\n\n async function send<T>(\n path: string,\n init: RequestInit,\n context?: DatasourceContext,\n ): Promise<T> {\n const response = await fetchImpl(`${baseUrl}${path}`, {\n ...init,\n headers: await requestHeaders(options, context),\n ...(context?.signal ? { signal: context.signal } : {}),\n })\n return parseResponse<T>(response, options)\n }\n\n return {\n types: {\n list: (context) => send<DatasourceTypeInfo[]>(paths.typesList(), { method: 'GET' }, context),\n get: (type, context) => send<DatasourceTypeInfo>(paths.typeGet(type), { method: 'GET' }, context),\n install: (type, context) => send<void>(paths.typeAction(type, 'install'), { method: 'POST' }, context),\n uninstall: (type, context) => send<void>(paths.typeAction(type, 'uninstall'), { method: 'POST' }, context),\n enable: (type, context) => send<void>(paths.typeAction(type, 'enable'), { method: 'POST' }, context),\n disable: (type, context) => send<void>(paths.typeAction(type, 'disable'), { method: 'POST' }, context),\n },\n instances: {\n list: (options, context) => send<DatasourceListResult>(paths.instancesList(queryString(options)), { method: 'GET' }, context),\n get: (uid, context) => send<DatasourceInstance>(paths.instanceGet(uid), { method: 'GET' }, context),\n create: (input, context) => send<DatasourceInstance>(paths.instanceCreate(), {\n method: 'POST',\n body: JSON.stringify(input),\n }, context),\n update: (uid, patch, context) => send<DatasourceInstance>(paths.instanceUpdate(uid), {\n method: 'PATCH',\n body: JSON.stringify(patch),\n }, context),\n delete: (uid, context) => send<void>(paths.instanceDelete(uid), { method: 'DELETE' }, context),\n },\n query: (request, context) => send<unknown>(paths.query(), {\n method: 'POST',\n body: JSON.stringify(request),\n }, context),\n healthCheck: (uid, context) => send<DatasourceHealthResult>(paths.healthCheck(uid), { method: 'GET' }, context),\n validateQuery: (uid, query, context) => send<DatasourceValidationResult>(paths.validateQuery(uid), {\n method: 'POST',\n body: JSON.stringify(query),\n }, context),\n listNamespaces: (uid, context) => send<DatasourceSchemaNamespace[]>(paths.listNamespaces(uid), { method: 'GET' }, context),\n listFields: (uid, request, context) => send<DatasourceSchemaField[]>(paths.listFields(uid), {\n method: 'POST',\n body: JSON.stringify(request),\n }, context),\n }\n}\n","import type {\n DataQuery,\n DatasourceContext,\n DatasourceHealthResult,\n DatasourceInstance,\n DatasourceSchemaField,\n DatasourceSchemaFieldRequest,\n DatasourceSchemaNamespace,\n DatasourceValidationResult,\n QueryResult,\n} from './types'\n\nexport interface DatasourceConfigEditorProps<TOptions = unknown> {\n instance: DatasourceInstance<TOptions>\n options: TOptions\n onChange(options: TOptions): void\n onSave(): void\n}\n\nexport interface DatasourceQueryEditorProps<TOptions = unknown, TQuery = unknown> {\n instance: DatasourceInstance<TOptions>\n query: TQuery\n onChange(query: TQuery): void\n onRunQuery(): void\n}\n\nexport interface DatasourcePluginBackend<TOptions = unknown, TQuery = unknown> {\n query?(request: DataQuery<TQuery>, context?: DatasourceContext): Promise<unknown>\n transform?(\n raw: unknown,\n request: DataQuery<TQuery>,\n context?: DatasourceContext,\n ): QueryResult | Promise<QueryResult>\n healthCheck?(\n uid: string,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceHealthResult>\n validateQuery?(\n uid: string,\n query: TQuery,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces?(\n uid: string,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaNamespace[]>\n listFields?(\n uid: string,\n request: DatasourceSchemaFieldRequest,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface DatasourcePluginDef<TOptions = unknown, TQuery = unknown> {\n type: string\n name: string\n description?: string\n configEditor?(props: DatasourceConfigEditorProps<TOptions>): unknown\n queryEditor?(props: DatasourceQueryEditorProps<TOptions, TQuery>): unknown\n backend?: DatasourcePluginBackend<TOptions, TQuery>\n meta?: Record<string, unknown>\n}\n\nexport function defineDatasourcePlugin<TOptions = unknown, TQuery = unknown>(\n def: DatasourcePluginDef<TOptions, TQuery>,\n): DatasourcePluginDef<TOptions, TQuery> {\n return def\n}\n"]}
1
+ {"version":3,"sources":["../src/registry.ts","../src/manager.ts","../src/plugin.ts"],"names":["items","options"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n DatasourceConfigEditorProps,\n DatasourcePluginDef,\n DatasourceQueryEditorProps,\n} from './plugin'\n\nexport interface DatasourceRegistry {\n register(plugin: DatasourcePluginDef): void\n get(type: string): DatasourcePluginDef | undefined\n has(type: string): boolean\n list(): DatasourcePluginDef[]\n getConfigEditor(\n type: string,\n ): ((props: DatasourceConfigEditorProps<unknown>) => unknown) | undefined\n getQueryEditor(\n type: string,\n ): ((props: DatasourceQueryEditorProps<unknown, unknown>) => unknown) | undefined\n}\n\nexport function createDatasourceRegistry(\n plugins: readonly DatasourcePluginDef[] = [],\n): DatasourceRegistry {\n const byType = new Map<string, DatasourcePluginDef>()\n\n const registry: DatasourceRegistry = {\n register(plugin) {\n byType.set(plugin.type, plugin)\n },\n\n get(type) {\n return byType.get(type)\n },\n\n has(type) {\n return byType.has(type)\n },\n\n list() {\n return [...byType.values()]\n },\n\n getConfigEditor(type) {\n return byType.get(type)?.configEditor as\n | ((props: DatasourceConfigEditorProps<unknown>) => unknown)\n | undefined\n },\n\n getQueryEditor(type) {\n return byType.get(type)?.queryEditor as\n | ((props: DatasourceQueryEditorProps<unknown, unknown>) => unknown)\n | undefined\n },\n }\n\n for (const plugin of plugins) registry.register(plugin)\n\n return registry\n}\n","import {\n DatasourceCapabilityError,\n DatasourceConflictError,\n DatasourceForbiddenError,\n DatasourceNotFoundError,\n DatasourceTransportError,\n DatasourceTypeNotRegisteredError,\n DatasourceUnauthorizedError,\n DatasourceValidationError,\n} from './errors'\nimport type { DatasourcePluginDef } from './plugin'\nimport { createDatasourceRegistry, type DatasourceRegistry } from './registry'\nimport type {\n BatchQueryResult,\n BatchQueryResultItem,\n DataQuery,\n DatasourceContext,\n DatasourceCreateInput,\n DatasourceHealthResult,\n DatasourceInstance,\n DatasourceListOptions,\n DatasourceListResult,\n DatasourceSchemaField,\n DatasourceSchemaFieldRequest,\n DatasourceSchemaNamespace,\n DatasourceTypeInfo,\n DatasourceUpdateInput,\n DatasourceValidationResult,\n QueryResult,\n} from './types'\n\nexport interface QueryCallOptions {\n transform?: (result: QueryResult) => QueryResult | Promise<QueryResult>\n}\n\nexport interface DatasourceManagerTypes {\n list(context?: DatasourceContext): Promise<DatasourceTypeInfo[]>\n get(type: string, context?: DatasourceContext): Promise<DatasourceTypeInfo>\n install?(type: string, context?: DatasourceContext): Promise<void>\n uninstall?(type: string, context?: DatasourceContext): Promise<void>\n enable?(type: string, context?: DatasourceContext): Promise<void>\n disable?(type: string, context?: DatasourceContext): Promise<void>\n}\n\nexport interface DatasourceManagerInstances {\n list(options?: DatasourceListOptions, context?: DatasourceContext): Promise<DatasourceListResult>\n get(uid: string, context?: DatasourceContext): Promise<DatasourceInstance>\n create(\n input: DatasourceCreateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n update(\n uid: string,\n patch: DatasourceUpdateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n delete(uid: string, context?: DatasourceContext): Promise<void>\n query(\n request: DataQuery,\n context?: DatasourceContext,\n options?: QueryCallOptions,\n ): Promise<QueryResult>\n batchQuery(\n requests: DataQuery[],\n context?: DatasourceContext,\n options?: QueryCallOptions,\n ): Promise<BatchQueryResult>\n healthCheck(uid: string, type: string, context?: DatasourceContext): Promise<DatasourceHealthResult>\n validateQuery(\n uid: string,\n type: string,\n query: unknown,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces(\n uid: string,\n type: string,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaNamespace[]>\n listFields(\n uid: string,\n type: string,\n request: DatasourceSchemaFieldRequest,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface DatasourceManager {\n registerPlugin(plugin: DatasourcePluginDef): void\n registry: DatasourceRegistry\n types: DatasourceManagerTypes\n instances: DatasourceManagerInstances\n}\n\nexport interface DatasourceManagerBackend {\n types: {\n list(context?: DatasourceContext): Promise<DatasourceTypeInfo[]>\n get(type: string, context?: DatasourceContext): Promise<DatasourceTypeInfo>\n install?(type: string, context?: DatasourceContext): Promise<void>\n uninstall?(type: string, context?: DatasourceContext): Promise<void>\n enable?(type: string, context?: DatasourceContext): Promise<void>\n disable?(type: string, context?: DatasourceContext): Promise<void>\n }\n instances: {\n list(options?: DatasourceListOptions, context?: DatasourceContext): Promise<DatasourceListResult>\n get(uid: string, context?: DatasourceContext): Promise<DatasourceInstance>\n create(\n input: DatasourceCreateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n update(\n uid: string,\n patch: DatasourceUpdateInput,\n context?: DatasourceContext,\n ): Promise<DatasourceInstance>\n delete(uid: string, context?: DatasourceContext): Promise<void>\n }\n query(request: DataQuery, context?: DatasourceContext): Promise<unknown>\n batchQuery?(requests: DataQuery[], context?: DatasourceContext): Promise<BatchQueryResult>\n healthCheck?(uid: string, context?: DatasourceContext): Promise<DatasourceHealthResult>\n validateQuery?(\n uid: string,\n query: unknown,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces?(uid: string, context?: DatasourceContext): Promise<DatasourceSchemaNamespace[]>\n listFields?(\n uid: string,\n request: DatasourceSchemaFieldRequest,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface CreateDatasourceManagerOptions {\n registry?: DatasourceRegistry\n plugins?: readonly DatasourcePluginDef[]\n backend: DatasourceManagerBackend\n}\n\nfunction getRequestType(request: DataQuery): string {\n if (!request.datasourceType) {\n throw new DatasourceValidationError('query request requires datasourceType', [\n 'datasourceType is required for plugin routing',\n ])\n }\n return request.datasourceType\n}\n\nfunction getPlugin(registry: DatasourceRegistry, type: string): DatasourcePluginDef {\n const plugin = registry.get(type)\n if (!plugin) throw new DatasourceTypeNotRegisteredError(type)\n return plugin\n}\n\nasync function normalizeQueryResult(\n raw: unknown,\n request: DataQuery,\n context: DatasourceContext | undefined,\n plugin: DatasourcePluginDef,\n options: QueryCallOptions | undefined,\n): Promise<QueryResult> {\n const normalized = plugin.backend?.transform\n ? await plugin.backend.transform(raw, request, context)\n : raw as QueryResult\n return options?.transform ? options.transform(normalized) : normalized\n}\n\nfunction typeInfoFromPlugin(plugin: DatasourcePluginDef): DatasourceTypeInfo {\n return {\n type: plugin.type,\n name: plugin.name,\n ...(plugin.description !== undefined ? { description: plugin.description } : {}),\n installed: false,\n enabled: false,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n ...(plugin.meta !== undefined ? { meta: plugin.meta } : {}),\n }\n}\n\nfunction mergeTypeInfo(\n backendTypes: DatasourceTypeInfo[],\n plugins: DatasourcePluginDef[],\n): DatasourceTypeInfo[] {\n const byType = new Map<string, DatasourceTypeInfo>()\n for (const typeInfo of backendTypes) byType.set(typeInfo.type, { ...typeInfo })\n\n for (const plugin of plugins) {\n const current = byType.get(plugin.type)\n if (current) {\n byType.set(plugin.type, {\n ...current,\n name: current.name || plugin.name,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n })\n } else {\n byType.set(plugin.type, typeInfoFromPlugin(plugin))\n }\n }\n\n return [...byType.values()]\n}\n\nasync function getInstanceOptions(\n backend: DatasourceManagerBackend,\n uid: string,\n context?: DatasourceContext,\n): Promise<unknown> {\n const instance = await backend.instances.get(uid, context)\n return instance.options ?? {}\n}\n\nfunction missingCapability(uid: string, capability: string): never {\n throw new DatasourceCapabilityError(uid, capability)\n}\n\nfunction ensureBatchResultIds(result: BatchQueryResult): BatchQueryResult {\n return {\n items: result.items.map((item, index): BatchQueryResultItem => {\n if (item.id) return item\n throw new DatasourceValidationError('batch query result item is missing id', [\n `items[${index}].id is required`,\n ])\n }),\n }\n}\n\nexport function createDatasourceManager(options: CreateDatasourceManagerOptions): DatasourceManager {\n const registry = options.registry ?? createDatasourceRegistry(options.plugins)\n\n if (options.registry && options.plugins) {\n for (const plugin of options.plugins) registry.register(plugin)\n }\n\n const manager: DatasourceManager = {\n registry,\n\n registerPlugin(plugin) {\n registry.register(plugin)\n },\n\n types: {\n async list(context) {\n const backendTypes = await options.backend.types.list(context)\n return mergeTypeInfo(backendTypes, registry.list())\n },\n\n async get(type, context) {\n const plugin = registry.get(type)\n let backendType: DatasourceTypeInfo | undefined\n try {\n backendType = await options.backend.types.get(type, context)\n } catch (error) {\n if (!(error instanceof DatasourceNotFoundError) || !plugin) throw error\n }\n if (!backendType) {\n if (!plugin) throw new DatasourceNotFoundError(type)\n return typeInfoFromPlugin(plugin)\n }\n if (!plugin) return backendType\n return {\n ...backendType,\n hasConfigEditor: plugin.configEditor !== undefined,\n hasQueryEditor: plugin.queryEditor !== undefined,\n }\n },\n\n ...(options.backend.types.install\n ? { install: (type, context) => options.backend.types.install?.(type, context) ?? missingCapability(type, 'types.install') }\n : {}),\n ...(options.backend.types.uninstall\n ? { uninstall: (type, context) => options.backend.types.uninstall?.(type, context) ?? missingCapability(type, 'types.uninstall') }\n : {}),\n ...(options.backend.types.enable\n ? { enable: (type, context) => options.backend.types.enable?.(type, context) ?? missingCapability(type, 'types.enable') }\n : {}),\n ...(options.backend.types.disable\n ? { disable: (type, context) => options.backend.types.disable?.(type, context) ?? missingCapability(type, 'types.disable') }\n : {}),\n },\n\n instances: {\n list: (listOptions, context) => options.backend.instances.list(listOptions, context),\n get: (uid, context) => options.backend.instances.get(uid, context),\n create: (input, context) => options.backend.instances.create(input, context),\n update: (uid, patch, context) => options.backend.instances.update(uid, patch, context),\n delete: (uid, context) => options.backend.instances.delete(uid, context),\n\n async query(request, context, callOptions) {\n const type = getRequestType(request)\n const plugin = getPlugin(registry, type)\n const raw = plugin.backend?.query\n ? await plugin.backend.query(request, context)\n : await options.backend.query(request, context)\n return normalizeQueryResult(raw, request, context, plugin, callOptions)\n },\n\n async batchQuery(requests, context, callOptions) {\n if (options.backend.batchQuery) {\n const result = ensureBatchResultIds(await options.backend.batchQuery(requests, context))\n if (!callOptions?.transform) return result\n const items = await Promise.all(result.items.map(async (item) => {\n if (item.error || !item.data) return item\n try {\n return { id: item.id, data: await callOptions.transform!(item.data) }\n } catch (error) {\n return { id: item.id, error: error instanceof Error ? error : new Error(String(error)) }\n }\n }))\n return { items }\n }\n\n const items = await Promise.all(requests.map(async (request) => {\n try {\n const data = await manager.instances.query(request, context, callOptions)\n return { id: request.id, data }\n } catch (error) {\n return { id: request.id, error: error instanceof Error ? error : new Error(String(error)) }\n }\n }))\n return { items }\n },\n\n async healthCheck(uid, type, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.healthCheck) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.healthCheck(uid, datasourceOptions, context)\n }\n return options.backend.healthCheck?.(uid, context) ?? missingCapability(uid, 'healthCheck')\n },\n\n async validateQuery(uid, type, query, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.validateQuery) {\n return plugin.backend.validateQuery(uid, query, context)\n }\n return options.backend.validateQuery?.(uid, query, context) ?? missingCapability(uid, 'validateQuery')\n },\n\n async listNamespaces(uid, type, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.listNamespaces) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.listNamespaces(uid, datasourceOptions, context)\n }\n return options.backend.listNamespaces?.(uid, context) ?? missingCapability(uid, 'listNamespaces')\n },\n\n async listFields(uid, type, request, context) {\n const plugin = getPlugin(registry, type)\n if (plugin.backend?.listFields) {\n const datasourceOptions = await getInstanceOptions(options.backend, uid, context)\n return plugin.backend.listFields(uid, request, datasourceOptions, context)\n }\n return options.backend.listFields?.(uid, request, context) ?? missingCapability(uid, 'listFields')\n },\n },\n }\n\n return manager\n}\n\nexport interface CreateRestDatasourceManagerOptions {\n baseUrl: string\n fetch?: typeof fetch\n getHeaders?: (context?: DatasourceContext) => HeadersInit | Promise<HeadersInit>\n paths?: Partial<RestDatasourceManagerPaths>\n serializeQueryBody?(request: DataQuery, context?: DatasourceContext): unknown\n serializeBatchQueryBody?(requests: DataQuery[], context?: DatasourceContext): unknown\n unwrap?<T>(body: unknown, response: Response): T\n createError?(response: Response, body: unknown): Error | undefined\n}\n\nexport interface RestDatasourceManagerPaths {\n typesList(): string\n typeGet(type: string): string\n typeAction(type: string, action: 'install' | 'uninstall' | 'enable' | 'disable'): string\n instancesList(queryString: string): string\n instanceGet(uid: string): string\n instanceCreate(): string\n instanceUpdate(uid: string): string\n instanceDelete(uid: string): string\n query(): string\n batchQuery(): string\n healthCheck(uid: string): string\n validateQuery(uid: string): string\n listNamespaces(uid: string): string\n listFields(uid: string): string\n}\n\nconst defaultRestPaths: RestDatasourceManagerPaths = {\n typesList: () => '/types',\n typeGet: (type) => `/types/${encodeURIComponent(type)}`,\n typeAction: (type, action) => `/types/${encodeURIComponent(type)}/${action}`,\n instancesList: (qs) => qs,\n instanceGet: (uid) => `/${encodeURIComponent(uid)}`,\n instanceCreate: () => '',\n instanceUpdate: (uid) => `/${encodeURIComponent(uid)}`,\n instanceDelete: (uid) => `/${encodeURIComponent(uid)}`,\n query: () => '/query',\n batchQuery: () => '/batch-query',\n healthCheck: (uid) => `/${encodeURIComponent(uid)}/health`,\n validateQuery: (uid) => `/${encodeURIComponent(uid)}/validate-query`,\n listNamespaces: (uid) => `/${encodeURIComponent(uid)}/namespaces`,\n listFields: (uid) => `/${encodeURIComponent(uid)}/fields`,\n}\n\nfunction mergeRestPaths(paths?: Partial<RestDatasourceManagerPaths>): RestDatasourceManagerPaths {\n return { ...defaultRestPaths, ...paths }\n}\n\nasync function readJson(response: Response): Promise<unknown> {\n if (response.status === 204) return undefined\n try {\n return await response.json()\n } catch {\n return undefined\n }\n}\n\nasync function parseResponse<T>(\n response: Response,\n options: CreateRestDatasourceManagerOptions,\n): Promise<T> {\n const body = await readJson(response)\n\n if (response.ok) {\n return options.unwrap ? options.unwrap<T>(body, response) : body as T\n }\n\n const customError = options.createError?.(response, body)\n if (customError) throw customError\n\n const errorBody = body as { message?: string; errors?: string[] } | undefined\n const message = errorBody?.message\n if (response.status === 401) throw new DatasourceUnauthorizedError(message)\n if (response.status === 403) throw new DatasourceForbiddenError(message)\n if (response.status === 404) throw new DatasourceNotFoundError(message ?? 'unknown')\n if (response.status === 409) throw new DatasourceConflictError(message)\n if (response.status === 422) throw new DatasourceValidationError(message, errorBody?.errors)\n throw new DatasourceTransportError(message, response.status)\n}\n\nasync function requestHeaders(\n options: CreateRestDatasourceManagerOptions,\n context?: DatasourceContext,\n): Promise<HeadersInit> {\n return {\n 'content-type': 'application/json',\n ...(context?.authToken ? { authorization: `Bearer ${context.authToken}` } : {}),\n ...(context?.headers ?? {}),\n ...await options.getHeaders?.(context),\n }\n}\n\nfunction queryString(options?: DatasourceListOptions): string {\n const params = new URLSearchParams()\n if (options?.filter?.type !== undefined) {\n const types = Array.isArray(options.filter.type) ? options.filter.type : [options.filter.type]\n for (const type of types) params.append('type', type)\n }\n if (options?.filter?.enabled !== undefined) params.set('enabled', String(options.filter.enabled))\n if (options?.filter?.search !== undefined) params.set('search', options.filter.search)\n if (options?.page !== undefined) params.set('page', String(options.page))\n if (options?.pageSize !== undefined) params.set('pageSize', String(options.pageSize))\n if (options?.cursor !== undefined) params.set('cursor', options.cursor)\n const qs = params.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function createRestDatasourceManager(\n options: CreateRestDatasourceManagerOptions,\n): DatasourceManagerBackend {\n const fetchImpl = options.fetch ?? fetch\n const baseUrl = options.baseUrl.replace(/\\/$/, '')\n const paths = mergeRestPaths(options.paths)\n\n async function send<T>(\n path: string,\n init: RequestInit,\n context?: DatasourceContext,\n ): Promise<T> {\n const response = await fetchImpl(`${baseUrl}${path}`, {\n ...init,\n headers: await requestHeaders(options, context),\n ...(context?.signal ? { signal: context.signal } : {}),\n })\n return parseResponse<T>(response, options)\n }\n\n return {\n types: {\n list: (context) => send<DatasourceTypeInfo[]>(paths.typesList(), { method: 'GET' }, context),\n get: (type, context) => send<DatasourceTypeInfo>(paths.typeGet(type), { method: 'GET' }, context),\n install: (type, context) => send<void>(paths.typeAction(type, 'install'), { method: 'POST' }, context),\n uninstall: (type, context) => send<void>(paths.typeAction(type, 'uninstall'), { method: 'POST' }, context),\n enable: (type, context) => send<void>(paths.typeAction(type, 'enable'), { method: 'POST' }, context),\n disable: (type, context) => send<void>(paths.typeAction(type, 'disable'), { method: 'POST' }, context),\n },\n instances: {\n list: (options, context) => send<DatasourceListResult>(paths.instancesList(queryString(options)), { method: 'GET' }, context),\n get: (uid, context) => send<DatasourceInstance>(paths.instanceGet(uid), { method: 'GET' }, context),\n create: (input, context) => send<DatasourceInstance>(paths.instanceCreate(), {\n method: 'POST',\n body: JSON.stringify(input),\n }, context),\n update: (uid, patch, context) => send<DatasourceInstance>(paths.instanceUpdate(uid), {\n method: 'PATCH',\n body: JSON.stringify(patch),\n }, context),\n delete: (uid, context) => send<void>(paths.instanceDelete(uid), { method: 'DELETE' }, context),\n },\n query: (request, context) => send<unknown>(paths.query(), {\n method: 'POST',\n body: JSON.stringify(options.serializeQueryBody?.(request, context) ?? request),\n }, context),\n batchQuery: (requests, context) => send<BatchQueryResult>(paths.batchQuery(), {\n method: 'POST',\n body: JSON.stringify(options.serializeBatchQueryBody?.(requests, context) ?? requests),\n }, context),\n healthCheck: (uid, context) => send<DatasourceHealthResult>(paths.healthCheck(uid), { method: 'GET' }, context),\n validateQuery: (uid, query, context) => send<DatasourceValidationResult>(paths.validateQuery(uid), {\n method: 'POST',\n body: JSON.stringify(query),\n }, context),\n listNamespaces: (uid, context) => send<DatasourceSchemaNamespace[]>(paths.listNamespaces(uid), { method: 'GET' }, context),\n listFields: (uid, request, context) => send<DatasourceSchemaField[]>(paths.listFields(uid), {\n method: 'POST',\n body: JSON.stringify(request),\n }, context),\n }\n}\n","import type {\n DataQuery,\n DatasourceContext,\n DatasourceHealthResult,\n DatasourceInstance,\n DatasourceSchemaField,\n DatasourceSchemaFieldRequest,\n DatasourceSchemaNamespace,\n DatasourceValidationResult,\n QueryResult,\n} from './types'\n\nexport interface DatasourceConfigEditorProps<TOptions = unknown> {\n instance: DatasourceInstance<TOptions>\n options: TOptions\n onChange(options: TOptions): void\n onSave(): void\n}\n\nexport interface DatasourceQueryEditorProps<TOptions = unknown, TQuery = unknown> {\n instance: DatasourceInstance<TOptions>\n query: TQuery\n onChange(query: TQuery): void\n onRunQuery(): void\n}\n\nexport interface DatasourcePluginBackend<TOptions = unknown, TQuery = unknown> {\n query?(request: DataQuery<TQuery>, context?: DatasourceContext): Promise<unknown>\n transform?(\n raw: unknown,\n request: DataQuery<TQuery>,\n context?: DatasourceContext,\n ): QueryResult | Promise<QueryResult>\n healthCheck?(\n uid: string,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceHealthResult>\n validateQuery?(\n uid: string,\n query: TQuery,\n context?: DatasourceContext,\n ): Promise<DatasourceValidationResult>\n listNamespaces?(\n uid: string,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaNamespace[]>\n listFields?(\n uid: string,\n request: DatasourceSchemaFieldRequest,\n options: TOptions,\n context?: DatasourceContext,\n ): Promise<DatasourceSchemaField[]>\n}\n\nexport interface DatasourcePluginDef<TOptions = unknown, TQuery = unknown> {\n type: string\n name: string\n description?: string\n configEditor?(props: DatasourceConfigEditorProps<TOptions>): unknown\n queryEditor?(props: DatasourceQueryEditorProps<TOptions, TQuery>): unknown\n backend?: DatasourcePluginBackend<TOptions, TQuery>\n meta?: Record<string, unknown>\n}\n\nexport function defineDatasourcePlugin<TOptions = unknown, TQuery = unknown>(\n def: DatasourcePluginDef<TOptions, TQuery>,\n): DatasourcePluginDef<TOptions, TQuery> {\n return def\n}\n"]}
@@ -96,16 +96,60 @@ interface DatasourceListResult {
96
96
  total?: number;
97
97
  nextCursor?: string;
98
98
  }
99
+ type DatasourceFrameType = string;
100
+ type DatasourceFieldKind = string;
101
+ interface DatasourceField {
102
+ name: string;
103
+ kind?: DatasourceFieldKind;
104
+ type?: string;
105
+ labels?: Record<string, string>;
106
+ values: unknown[];
107
+ meta?: Record<string, unknown>;
108
+ }
109
+ interface DatasourceFrame {
110
+ name?: string;
111
+ frameType: DatasourceFrameType;
112
+ fields: DatasourceField[];
113
+ meta?: Record<string, unknown>;
114
+ }
115
+ interface QueryStats {
116
+ executionTimeMs?: number;
117
+ rowsReturned?: number;
118
+ bytesRead?: number;
119
+ meta?: Record<string, unknown>;
120
+ }
121
+ interface QueryInspect {
122
+ rawQuery?: string;
123
+ executedQuery?: string;
124
+ meta?: Record<string, unknown>;
125
+ }
99
126
  interface QueryResult {
127
+ frames: DatasourceFrame[];
128
+ stats?: QueryStats;
129
+ inspect?: QueryInspect;
130
+ requestId?: string;
131
+ meta?: Record<string, unknown>;
132
+ }
133
+ interface TableRowsInput {
100
134
  columns: Array<{
101
135
  name: string;
102
- type: string;
136
+ type?: string;
103
137
  meta?: Record<string, unknown>;
104
138
  }>;
105
139
  rows: unknown[][];
106
- requestId?: string;
140
+ name?: string;
107
141
  meta?: Record<string, unknown>;
108
142
  }
143
+ interface TableRowsOutput {
144
+ columns: Array<{
145
+ name: string;
146
+ type?: string;
147
+ meta?: Record<string, unknown>;
148
+ }>;
149
+ rows: unknown[][];
150
+ }
151
+ declare function tableRowsToFrame(input: TableRowsInput): DatasourceFrame;
152
+ declare function tableFrameToRows(frame: DatasourceFrame): TableRowsOutput;
109
153
  interface VariableOption {
110
154
  label: string;
111
155
  value: string;
@@ -119,11 +163,13 @@ interface DatasourceHealthResult {
119
163
  message?: string;
120
164
  details?: Record<string, unknown>;
121
165
  }
166
+ type DatasourceSchemaKind = string;
122
167
  interface DatasourceSchemaNamespace {
123
168
  id: string;
124
169
  name: string;
125
- kind?: 'database' | 'schema' | 'table' | 'metric' | 'bucket' | 'index' | string;
170
+ kind?: DatasourceSchemaKind;
126
171
  parentId?: string;
172
+ hasChildren?: boolean;
127
173
  meta?: Record<string, unknown>;
128
174
  }
129
175
  interface DatasourceSchemaFieldRequest {
@@ -132,8 +178,10 @@ interface DatasourceSchemaFieldRequest {
132
178
  interface DatasourceSchemaField {
133
179
  name: string;
134
180
  type?: string;
181
+ kind?: DatasourceFieldKind;
182
+ nullable?: boolean;
135
183
  label?: string;
136
- description?: string;
184
+ insertText?: string;
137
185
  meta?: Record<string, unknown>;
138
186
  }
139
187
  interface AnnotationQuery<TQuery = unknown> {
@@ -146,9 +194,11 @@ interface AnnotationQuery<TQuery = unknown> {
146
194
  color?: string;
147
195
  }
148
196
  type BatchQueryResultItem = {
197
+ id: string;
149
198
  data: QueryResult;
150
199
  error?: never;
151
200
  } | {
201
+ id: string;
152
202
  data?: never;
153
203
  error: Error;
154
204
  };
@@ -272,6 +322,8 @@ interface CreateRestDatasourceManagerOptions {
272
322
  fetch?: typeof fetch;
273
323
  getHeaders?: (context?: DatasourceContext) => HeadersInit | Promise<HeadersInit>;
274
324
  paths?: Partial<RestDatasourceManagerPaths>;
325
+ serializeQueryBody?(request: DataQuery, context?: DatasourceContext): unknown;
326
+ serializeBatchQueryBody?(requests: DataQuery[], context?: DatasourceContext): unknown;
275
327
  unwrap?<T>(body: unknown, response: Response): T;
276
328
  createError?(response: Response, body: unknown): Error | undefined;
277
329
  }
@@ -285,6 +337,7 @@ interface RestDatasourceManagerPaths {
285
337
  instanceUpdate(uid: string): string;
286
338
  instanceDelete(uid: string): string;
287
339
  query(): string;
340
+ batchQuery(): string;
288
341
  healthCheck(uid: string): string;
289
342
  validateQuery(uid: string): string;
290
343
  listNamespaces(uid: string): string;
@@ -292,4 +345,4 @@ interface RestDatasourceManagerPaths {
292
345
  }
293
346
  declare function createRestDatasourceManager(options: CreateRestDatasourceManagerOptions): DatasourceManagerBackend;
294
347
 
295
- export { type Annotation as A, type BatchQueryResult as B, type CreateDatasourceManagerOptions as C, type DataQuery as D, type DatasourceUpdateInput as E, type DatasourceValidationResult as F, type QueryResult as G, createDatasourceManager as H, createDatasourceRegistry as I, createRestDatasourceManager as J, defineDatasourcePlugin as K, type QueryCallOptions as Q, type RestDatasourceManagerPaths as R, type VariableOption as V, type AnnotationQuery as a, type AuthContext as b, type AuthSubject as c, type BatchQueryResultItem as d, type CreateRestDatasourceManagerOptions as e, type DatasourceConfigEditorProps as f, type DatasourceContext as g, type DatasourceCreateInput as h, type DatasourceHealthResult as i, type DatasourceInstance as j, type DatasourceListFilter as k, type DatasourceListOptions as l, type DatasourceListResult as m, type DatasourceManager as n, type DatasourceManagerBackend as o, type DatasourceManagerInstances as p, type DatasourceManagerTypes as q, type DatasourcePermissionHint as r, type DatasourcePluginBackend as s, type DatasourcePluginDef as t, type DatasourceQueryEditorProps as u, type DatasourceRegistry as v, type DatasourceSchemaField as w, type DatasourceSchemaFieldRequest as x, type DatasourceSchemaNamespace as y, type DatasourceTypeInfo as z };
348
+ export { type Annotation as A, type BatchQueryResult as B, type CreateDatasourceManagerOptions as C, type DataQuery as D, type DatasourceSchemaField as E, type DatasourceSchemaFieldRequest as F, type DatasourceSchemaKind as G, type DatasourceSchemaNamespace as H, type DatasourceTypeInfo as I, type DatasourceUpdateInput as J, type DatasourceValidationResult as K, type QueryInspect as L, type QueryResult as M, type QueryStats as N, type TableRowsOutput as O, createDatasourceManager as P, type QueryCallOptions as Q, type RestDatasourceManagerPaths as R, createDatasourceRegistry as S, type TableRowsInput as T, createRestDatasourceManager as U, type VariableOption as V, defineDatasourcePlugin as W, tableFrameToRows as X, tableRowsToFrame as Y, type AnnotationQuery as a, type AuthContext as b, type AuthSubject as c, type BatchQueryResultItem as d, type CreateRestDatasourceManagerOptions as e, type DatasourceConfigEditorProps as f, type DatasourceContext as g, type DatasourceCreateInput as h, type DatasourceField as i, type DatasourceFieldKind as j, type DatasourceFrame as k, type DatasourceFrameType as l, type DatasourceHealthResult as m, type DatasourceInstance as n, type DatasourceListFilter as o, type DatasourceListOptions as p, type DatasourceListResult as q, type DatasourceManager as r, type DatasourceManagerBackend as s, type DatasourceManagerInstances as t, type DatasourceManagerTypes as u, type DatasourcePermissionHint as v, type DatasourcePluginBackend as w, type DatasourcePluginDef as x, type DatasourceQueryEditorProps as y, type DatasourceRegistry as z };
@@ -96,16 +96,60 @@ interface DatasourceListResult {
96
96
  total?: number;
97
97
  nextCursor?: string;
98
98
  }
99
+ type DatasourceFrameType = string;
100
+ type DatasourceFieldKind = string;
101
+ interface DatasourceField {
102
+ name: string;
103
+ kind?: DatasourceFieldKind;
104
+ type?: string;
105
+ labels?: Record<string, string>;
106
+ values: unknown[];
107
+ meta?: Record<string, unknown>;
108
+ }
109
+ interface DatasourceFrame {
110
+ name?: string;
111
+ frameType: DatasourceFrameType;
112
+ fields: DatasourceField[];
113
+ meta?: Record<string, unknown>;
114
+ }
115
+ interface QueryStats {
116
+ executionTimeMs?: number;
117
+ rowsReturned?: number;
118
+ bytesRead?: number;
119
+ meta?: Record<string, unknown>;
120
+ }
121
+ interface QueryInspect {
122
+ rawQuery?: string;
123
+ executedQuery?: string;
124
+ meta?: Record<string, unknown>;
125
+ }
99
126
  interface QueryResult {
127
+ frames: DatasourceFrame[];
128
+ stats?: QueryStats;
129
+ inspect?: QueryInspect;
130
+ requestId?: string;
131
+ meta?: Record<string, unknown>;
132
+ }
133
+ interface TableRowsInput {
100
134
  columns: Array<{
101
135
  name: string;
102
- type: string;
136
+ type?: string;
103
137
  meta?: Record<string, unknown>;
104
138
  }>;
105
139
  rows: unknown[][];
106
- requestId?: string;
140
+ name?: string;
107
141
  meta?: Record<string, unknown>;
108
142
  }
143
+ interface TableRowsOutput {
144
+ columns: Array<{
145
+ name: string;
146
+ type?: string;
147
+ meta?: Record<string, unknown>;
148
+ }>;
149
+ rows: unknown[][];
150
+ }
151
+ declare function tableRowsToFrame(input: TableRowsInput): DatasourceFrame;
152
+ declare function tableFrameToRows(frame: DatasourceFrame): TableRowsOutput;
109
153
  interface VariableOption {
110
154
  label: string;
111
155
  value: string;
@@ -119,11 +163,13 @@ interface DatasourceHealthResult {
119
163
  message?: string;
120
164
  details?: Record<string, unknown>;
121
165
  }
166
+ type DatasourceSchemaKind = string;
122
167
  interface DatasourceSchemaNamespace {
123
168
  id: string;
124
169
  name: string;
125
- kind?: 'database' | 'schema' | 'table' | 'metric' | 'bucket' | 'index' | string;
170
+ kind?: DatasourceSchemaKind;
126
171
  parentId?: string;
172
+ hasChildren?: boolean;
127
173
  meta?: Record<string, unknown>;
128
174
  }
129
175
  interface DatasourceSchemaFieldRequest {
@@ -132,8 +178,10 @@ interface DatasourceSchemaFieldRequest {
132
178
  interface DatasourceSchemaField {
133
179
  name: string;
134
180
  type?: string;
181
+ kind?: DatasourceFieldKind;
182
+ nullable?: boolean;
135
183
  label?: string;
136
- description?: string;
184
+ insertText?: string;
137
185
  meta?: Record<string, unknown>;
138
186
  }
139
187
  interface AnnotationQuery<TQuery = unknown> {
@@ -146,9 +194,11 @@ interface AnnotationQuery<TQuery = unknown> {
146
194
  color?: string;
147
195
  }
148
196
  type BatchQueryResultItem = {
197
+ id: string;
149
198
  data: QueryResult;
150
199
  error?: never;
151
200
  } | {
201
+ id: string;
152
202
  data?: never;
153
203
  error: Error;
154
204
  };
@@ -272,6 +322,8 @@ interface CreateRestDatasourceManagerOptions {
272
322
  fetch?: typeof fetch;
273
323
  getHeaders?: (context?: DatasourceContext) => HeadersInit | Promise<HeadersInit>;
274
324
  paths?: Partial<RestDatasourceManagerPaths>;
325
+ serializeQueryBody?(request: DataQuery, context?: DatasourceContext): unknown;
326
+ serializeBatchQueryBody?(requests: DataQuery[], context?: DatasourceContext): unknown;
275
327
  unwrap?<T>(body: unknown, response: Response): T;
276
328
  createError?(response: Response, body: unknown): Error | undefined;
277
329
  }
@@ -285,6 +337,7 @@ interface RestDatasourceManagerPaths {
285
337
  instanceUpdate(uid: string): string;
286
338
  instanceDelete(uid: string): string;
287
339
  query(): string;
340
+ batchQuery(): string;
288
341
  healthCheck(uid: string): string;
289
342
  validateQuery(uid: string): string;
290
343
  listNamespaces(uid: string): string;
@@ -292,4 +345,4 @@ interface RestDatasourceManagerPaths {
292
345
  }
293
346
  declare function createRestDatasourceManager(options: CreateRestDatasourceManagerOptions): DatasourceManagerBackend;
294
347
 
295
- export { type Annotation as A, type BatchQueryResult as B, type CreateDatasourceManagerOptions as C, type DataQuery as D, type DatasourceUpdateInput as E, type DatasourceValidationResult as F, type QueryResult as G, createDatasourceManager as H, createDatasourceRegistry as I, createRestDatasourceManager as J, defineDatasourcePlugin as K, type QueryCallOptions as Q, type RestDatasourceManagerPaths as R, type VariableOption as V, type AnnotationQuery as a, type AuthContext as b, type AuthSubject as c, type BatchQueryResultItem as d, type CreateRestDatasourceManagerOptions as e, type DatasourceConfigEditorProps as f, type DatasourceContext as g, type DatasourceCreateInput as h, type DatasourceHealthResult as i, type DatasourceInstance as j, type DatasourceListFilter as k, type DatasourceListOptions as l, type DatasourceListResult as m, type DatasourceManager as n, type DatasourceManagerBackend as o, type DatasourceManagerInstances as p, type DatasourceManagerTypes as q, type DatasourcePermissionHint as r, type DatasourcePluginBackend as s, type DatasourcePluginDef as t, type DatasourceQueryEditorProps as u, type DatasourceRegistry as v, type DatasourceSchemaField as w, type DatasourceSchemaFieldRequest as x, type DatasourceSchemaNamespace as y, type DatasourceTypeInfo as z };
348
+ export { type Annotation as A, type BatchQueryResult as B, type CreateDatasourceManagerOptions as C, type DataQuery as D, type DatasourceSchemaField as E, type DatasourceSchemaFieldRequest as F, type DatasourceSchemaKind as G, type DatasourceSchemaNamespace as H, type DatasourceTypeInfo as I, type DatasourceUpdateInput as J, type DatasourceValidationResult as K, type QueryInspect as L, type QueryResult as M, type QueryStats as N, type TableRowsOutput as O, createDatasourceManager as P, type QueryCallOptions as Q, type RestDatasourceManagerPaths as R, createDatasourceRegistry as S, type TableRowsInput as T, createRestDatasourceManager as U, type VariableOption as V, defineDatasourcePlugin as W, tableFrameToRows as X, tableRowsToFrame as Y, type AnnotationQuery as a, type AuthContext as b, type AuthSubject as c, type BatchQueryResultItem as d, type CreateRestDatasourceManagerOptions as e, type DatasourceConfigEditorProps as f, type DatasourceContext as g, type DatasourceCreateInput as h, type DatasourceField as i, type DatasourceFieldKind as j, type DatasourceFrame as k, type DatasourceFrameType as l, type DatasourceHealthResult as m, type DatasourceInstance as n, type DatasourceListFilter as o, type DatasourceListOptions as p, type DatasourceListResult as q, type DatasourceManager as r, type DatasourceManagerBackend as s, type DatasourceManagerInstances as t, type DatasourceManagerTypes as u, type DatasourcePermissionHint as v, type DatasourcePluginBackend as w, type DatasourcePluginDef as x, type DatasourceQueryEditorProps as y, type DatasourceRegistry as z };
package/dist/testing.cjs CHANGED
@@ -14,6 +14,21 @@ var DatasourceConflictError = class extends Error {
14
14
  }
15
15
  };
16
16
 
17
+ // src/types.ts
18
+ function tableRowsToFrame(input) {
19
+ return {
20
+ ...input.name !== void 0 ? { name: input.name } : {},
21
+ frameType: "table",
22
+ fields: input.columns.map((column, columnIndex) => ({
23
+ name: column.name,
24
+ ...column.type !== void 0 ? { type: column.type } : {},
25
+ values: input.rows.map((row) => row[columnIndex]),
26
+ ...column.meta !== void 0 ? { meta: column.meta } : {}
27
+ })),
28
+ ...input.meta !== void 0 ? { meta: input.meta } : {}
29
+ };
30
+ }
31
+
17
32
  // src/testing.ts
18
33
  function nextVersion(current) {
19
34
  return String(Number(current ?? "0") + 1);
@@ -147,15 +162,19 @@ function createMemoryDatasourceBackend(options = {}) {
147
162
  store = store.filter((d) => d.uid !== uid);
148
163
  }
149
164
  },
150
- async query(request) {
165
+ async query(request, _context) {
151
166
  const ds = findInstance(request.datasourceUid);
152
167
  return {
153
- columns: [
154
- { name: "name", type: "string" },
155
- { name: "type", type: "string" },
156
- { name: "version", type: "string" }
168
+ frames: [
169
+ tableRowsToFrame({
170
+ columns: [
171
+ { name: "name", type: "string" },
172
+ { name: "type", type: "string" },
173
+ { name: "version", type: "string" }
174
+ ],
175
+ rows: [[ds.name, ds.type, ds.version ?? ""]]
176
+ })
157
177
  ],
158
- rows: [[ds.name, ds.type, ds.version ?? ""]],
159
178
  requestId: request.id,
160
179
  meta: { datasourceUid: ds.uid }
161
180
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/testing.ts"],"names":[],"mappings":"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","file":"testing.cjs","sourcesContent":["export class DatasourceNotFoundError extends Error {\n constructor(uid: string) {\n super(`datasource \"${uid}\" not found`)\n this.name = 'DatasourceNotFoundError'\n }\n}\n\nexport class DatasourceCapabilityError extends Error {\n constructor(uid: string, capability: string) {\n super(`datasource \"${uid}\" does not support ${capability}`)\n this.name = 'DatasourceCapabilityError'\n }\n}\n\nexport class DatasourceTypeNotRegisteredError extends Error {\n constructor(type: string) {\n super(`datasource type \"${type}\" is not registered`)\n this.name = 'DatasourceTypeNotRegisteredError'\n }\n}\n\nexport class DatasourceUnauthorizedError extends Error {\n constructor(message = 'datasource request is not authenticated') {\n super(message)\n this.name = 'DatasourceUnauthorizedError'\n }\n}\n\nexport class DatasourceForbiddenError extends Error {\n constructor(message = 'datasource request is not allowed') {\n super(message)\n this.name = 'DatasourceForbiddenError'\n }\n}\n\nexport class DatasourceConflictError extends Error {\n constructor(message = 'datasource was modified by another actor') {\n super(message)\n this.name = 'DatasourceConflictError'\n }\n}\n\nexport class DatasourceValidationError extends Error {\n constructor(\n message = 'datasource validation failed',\n readonly errors?: string[],\n ) {\n super(message)\n this.name = 'DatasourceValidationError'\n }\n}\n\nexport class DatasourceTransportError extends Error {\n constructor(\n message = 'datasource backend request failed',\n readonly status?: number,\n ) {\n super(message)\n this.name = 'DatasourceTransportError'\n }\n}\n","import { DatasourceConflictError, DatasourceNotFoundError } from './errors'\nimport type { DatasourceManagerBackend } from './manager'\nimport type {\n DataQuery,\n DatasourceCreateInput,\n DatasourceInstance,\n DatasourceListOptions,\n DatasourceListResult,\n DatasourceTypeInfo,\n DatasourceUpdateInput,\n QueryResult,\n} from './types'\n\nfunction nextVersion(current?: string): string {\n return String(Number(current ?? '0') + 1)\n}\n\nfunction defaultTypes(seed: DatasourceInstance[]): DatasourceTypeInfo[] {\n const seen = new Set<string>()\n const types: DatasourceTypeInfo[] = []\n for (const instance of seed) {\n if (seen.has(instance.type)) continue\n seen.add(instance.type)\n types.push({\n type: instance.type,\n name: instance.type,\n enabled: true,\n installed: true,\n })\n }\n return types\n}\n\nexport interface CreateMemoryDatasourceBackendOptions {\n instances?: DatasourceInstance[]\n types?: DatasourceTypeInfo[]\n}\n\nexport function createMemoryDatasourceBackend(\n options: CreateMemoryDatasourceBackendOptions = {},\n): DatasourceManagerBackend {\n let store: DatasourceInstance[] = (options.instances ?? []).map((d) => ({ ...d }))\n let types: DatasourceTypeInfo[] = (options.types ?? defaultTypes(store)).map((t) => ({ ...t }))\n\n function findType(type: string): DatasourceTypeInfo {\n const info = types.find((t) => t.type === type)\n if (!info) throw new DatasourceNotFoundError(type)\n return info\n }\n\n function findInstance(uid: string): DatasourceInstance {\n const ds = store.find((d) => d.uid === uid)\n if (!ds) throw new DatasourceNotFoundError(uid)\n return ds\n }\n\n return {\n types: {\n async list() {\n return types.map((t) => ({ ...t }))\n },\n\n async get(type) {\n return { ...findType(type) }\n },\n\n async install(type) {\n if (!types.some((t) => t.type === type)) {\n types = [...types, { type, name: type, installed: true, enabled: false }]\n }\n },\n\n async uninstall(type) {\n findType(type)\n types = types.filter((t) => t.type !== type)\n },\n\n async enable(type) {\n const current = findType(type)\n types = types.map((t) => t.type === type ? { ...current, enabled: true } : t)\n },\n\n async disable(type) {\n const current = findType(type)\n types = types.map((t) => t.type === type ? { ...current, enabled: false } : t)\n },\n },\n\n instances: {\n async list(listOptions?: DatasourceListOptions): Promise<DatasourceListResult> {\n let items = [...store]\n const filter = listOptions?.filter\n if (filter?.type !== undefined) {\n const filterTypes = Array.isArray(filter.type) ? filter.type : [filter.type]\n items = items.filter((d) => filterTypes.includes(d.type))\n }\n if (filter?.enabled !== undefined) {\n items = items.filter((d) => (d.enabled ?? true) === filter.enabled)\n }\n if (filter?.search !== undefined) {\n const query = filter.search.toLowerCase()\n items = items.filter(\n (d) => d.name.toLowerCase().includes(query) || d.uid.toLowerCase().includes(query),\n )\n }\n const total = items.length\n if (listOptions?.page !== undefined && listOptions?.pageSize !== undefined) {\n const start = listOptions.page * listOptions.pageSize\n items = items.slice(start, start + listOptions.pageSize)\n } else if (listOptions?.pageSize !== undefined) {\n items = items.slice(0, listOptions.pageSize)\n }\n return { items: items.map((d) => ({ ...d })), total }\n },\n\n async get(uid) {\n return { ...findInstance(uid) }\n },\n\n async create(input: DatasourceCreateInput) {\n const now = new Date().toISOString()\n const uid = input.uid ?? `ds-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\n const ds: DatasourceInstance = {\n uid,\n type: input.type,\n name: input.name,\n ...(input.options !== undefined ? { options: input.options } : {}),\n enabled: input.enabled ?? true,\n ...(input.meta !== undefined ? { meta: input.meta } : {}),\n version: '1',\n createdAt: now,\n updatedAt: now,\n }\n store = [...store, ds]\n if (!types.some((t) => t.type === input.type)) {\n types = [...types, { type: input.type, name: input.type, installed: true, enabled: true }]\n }\n return { ...ds }\n },\n\n async update(uid, patch: DatasourceUpdateInput) {\n const idx = store.findIndex((d) => d.uid === uid)\n if (idx === -1) throw new DatasourceNotFoundError(uid)\n const ds = store[idx]\n if (patch.version !== undefined && ds.version !== patch.version) {\n throw new DatasourceConflictError(\n `\"${uid}\" version conflict: expected ${patch.version}, got ${ds.version}`,\n )\n }\n const updated: DatasourceInstance = {\n ...ds,\n ...(patch.name !== undefined ? { name: patch.name } : {}),\n ...(patch.options !== undefined ? { options: patch.options } : {}),\n ...(patch.enabled !== undefined ? { enabled: patch.enabled } : {}),\n ...(patch.meta !== undefined ? { meta: patch.meta } : {}),\n version: nextVersion(ds.version),\n updatedAt: new Date().toISOString(),\n }\n store = [...store.slice(0, idx), updated, ...store.slice(idx + 1)]\n return { ...updated }\n },\n\n async delete(uid) {\n findInstance(uid)\n store = store.filter((d) => d.uid !== uid)\n },\n },\n\n async query(request: DataQuery): Promise<QueryResult> {\n const ds = findInstance(request.datasourceUid)\n return {\n columns: [\n { name: 'name', type: 'string' },\n { name: 'type', type: 'string' },\n { name: 'version', type: 'string' },\n ],\n rows: [[ds.name, ds.type, ds.version ?? '']],\n requestId: request.id,\n meta: { datasourceUid: ds.uid },\n }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/types.ts","../src/testing.ts"],"names":[],"mappings":"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","file":"testing.cjs","sourcesContent":["export class DatasourceNotFoundError extends Error {\n constructor(uid: string) {\n super(`datasource \"${uid}\" not found`)\n this.name = 'DatasourceNotFoundError'\n }\n}\n\nexport class DatasourceCapabilityError extends Error {\n constructor(uid: string, capability: string) {\n super(`datasource \"${uid}\" does not support ${capability}`)\n this.name = 'DatasourceCapabilityError'\n }\n}\n\nexport class DatasourceTypeNotRegisteredError extends Error {\n constructor(type: string) {\n super(`datasource type \"${type}\" is not registered`)\n this.name = 'DatasourceTypeNotRegisteredError'\n }\n}\n\nexport class DatasourceUnauthorizedError extends Error {\n constructor(message = 'datasource request is not authenticated') {\n super(message)\n this.name = 'DatasourceUnauthorizedError'\n }\n}\n\nexport class DatasourceForbiddenError extends Error {\n constructor(message = 'datasource request is not allowed') {\n super(message)\n this.name = 'DatasourceForbiddenError'\n }\n}\n\nexport class DatasourceConflictError extends Error {\n constructor(message = 'datasource was modified by another actor') {\n super(message)\n this.name = 'DatasourceConflictError'\n }\n}\n\nexport class DatasourceValidationError extends Error {\n constructor(\n message = 'datasource validation failed',\n readonly errors?: string[],\n ) {\n super(message)\n this.name = 'DatasourceValidationError'\n }\n}\n\nexport class DatasourceTransportError extends Error {\n constructor(\n message = 'datasource backend request failed',\n readonly status?: number,\n ) {\n super(message)\n this.name = 'DatasourceTransportError'\n }\n}\n","export interface AuthSubject {\n id: string\n roles?: string[]\n groups?: string[]\n attributes?: Record<string, unknown>\n}\n\nexport interface AuthContext {\n subject?: AuthSubject\n tenantId?: string\n attributes?: Record<string, unknown>\n}\n\nexport interface DataQuery<TQuery = unknown> {\n id: string\n datasourceUid: string\n datasourceType?: string\n query?: TQuery\n options?: Record<string, unknown>\n cacheTtlMs?: number\n staleWhileRevalidate?: boolean\n permissions?: unknown[]\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourceContext {\n authToken?: string\n headers?: Record<string, string>\n signal?: AbortSignal\n variables?: Record<string, string | string[]>\n timeRange?: { from: string; to: string; raw?: { from: string; to: string } }\n authContext?: AuthContext\n builtins?: Record<string, string>\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourcePermissionHint {\n canRead?: boolean\n canCreate?: boolean\n canUpdate?: boolean\n canDelete?: boolean\n canQuery?: boolean\n canManage?: boolean\n reason?: string\n}\n\nexport interface DatasourceTypeInfo {\n type: string\n name: string\n description?: string\n enabled?: boolean\n installed?: boolean\n permissions?: DatasourcePermissionHint\n hasConfigEditor?: boolean\n hasQueryEditor?: boolean\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourceInstance<TOptions = unknown> {\n uid: string\n type: string\n name: string\n options?: TOptions\n enabled?: boolean\n version?: string\n createdAt?: string\n updatedAt?: string\n permissions?: DatasourcePermissionHint\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourceCreateInput<TOptions = unknown> {\n uid?: string\n type: string\n name: string\n options?: TOptions\n enabled?: boolean\n meta?: Record<string, unknown>\n}\n\nexport type DatasourceUpdateInput<TOptions = unknown> =\n Partial<Omit<DatasourceCreateInput<TOptions>, 'uid' | 'type'>> & {\n version?: string\n }\n\nexport interface DatasourceListFilter {\n type?: string | string[]\n enabled?: boolean\n search?: string\n}\n\nexport interface DatasourceListOptions {\n filter?: DatasourceListFilter\n page?: number\n pageSize?: number\n cursor?: string\n}\n\nexport interface DatasourceListResult {\n items: DatasourceInstance[]\n total?: number\n nextCursor?: string\n}\n\nexport type DatasourceFrameType = string\nexport type DatasourceFieldKind = string\n\nexport interface DatasourceField {\n name: string\n kind?: DatasourceFieldKind\n type?: string\n labels?: Record<string, string>\n values: unknown[]\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourceFrame {\n name?: string\n frameType: DatasourceFrameType\n fields: DatasourceField[]\n meta?: Record<string, unknown>\n}\n\nexport interface QueryStats {\n executionTimeMs?: number\n rowsReturned?: number\n bytesRead?: number\n meta?: Record<string, unknown>\n}\n\nexport interface QueryInspect {\n rawQuery?: string\n executedQuery?: string\n meta?: Record<string, unknown>\n}\n\nexport interface QueryResult {\n frames: DatasourceFrame[]\n stats?: QueryStats\n inspect?: QueryInspect\n requestId?: string\n meta?: Record<string, unknown>\n}\n\nexport interface TableRowsInput {\n columns: Array<{ name: string; type?: string; meta?: Record<string, unknown> }>\n rows: unknown[][]\n name?: string\n meta?: Record<string, unknown>\n}\n\nexport interface TableRowsOutput {\n columns: Array<{ name: string; type?: string; meta?: Record<string, unknown> }>\n rows: unknown[][]\n}\n\nexport function tableRowsToFrame(input: TableRowsInput): DatasourceFrame {\n return {\n ...(input.name !== undefined ? { name: input.name } : {}),\n frameType: 'table',\n fields: input.columns.map((column, columnIndex) => ({\n name: column.name,\n ...(column.type !== undefined ? { type: column.type } : {}),\n values: input.rows.map((row) => row[columnIndex]),\n ...(column.meta !== undefined ? { meta: column.meta } : {}),\n })),\n ...(input.meta !== undefined ? { meta: input.meta } : {}),\n }\n}\n\nexport function tableFrameToRows(frame: DatasourceFrame): TableRowsOutput {\n const rowCount = frame.fields.reduce((max, field) => Math.max(max, field.values.length), 0)\n return {\n columns: frame.fields.map((field) => ({\n name: field.name,\n ...(field.type !== undefined ? { type: field.type } : {}),\n ...(field.meta !== undefined ? { meta: field.meta } : {}),\n })),\n rows: Array.from({ length: rowCount }, (_, rowIndex) =>\n frame.fields.map((field) => field.values[rowIndex]),\n ),\n }\n}\n\nexport interface VariableOption {\n label: string\n value: string\n}\n\nexport interface DatasourceValidationResult {\n valid: boolean\n errors?: string[]\n}\n\nexport interface DatasourceHealthResult {\n ok: boolean\n message?: string\n details?: Record<string, unknown>\n}\n\nexport type DatasourceSchemaKind = string\n\nexport interface DatasourceSchemaNamespace {\n id: string\n name: string\n kind?: DatasourceSchemaKind\n parentId?: string\n hasChildren?: boolean\n meta?: Record<string, unknown>\n}\n\nexport interface DatasourceSchemaFieldRequest {\n namespaceId: string\n}\n\nexport interface DatasourceSchemaField {\n name: string\n type?: string\n kind?: DatasourceFieldKind\n nullable?: boolean\n label?: string\n insertText?: string\n meta?: Record<string, unknown>\n}\n\nexport interface AnnotationQuery<TQuery = unknown> {\n id: string\n datasourceUid: string\n name?: string\n query?: TQuery\n options?: Record<string, unknown>\n hide?: boolean\n color?: string\n}\n\nexport type BatchQueryResultItem =\n | { id: string; data: QueryResult; error?: never }\n | { id: string; data?: never; error: Error }\n\nexport interface BatchQueryResult {\n items: BatchQueryResultItem[]\n}\n\nexport interface Annotation {\n id?: string\n time: number\n timeEnd?: number\n title?: string\n text?: string\n tags?: string[]\n color?: string\n source?: AnnotationQuery\n meta?: Record<string, unknown>\n}\n","import { DatasourceConflictError, DatasourceNotFoundError } from './errors'\nimport type { DatasourceManagerBackend } from './manager'\nimport { tableRowsToFrame } from './types'\nimport type {\n DataQuery,\n DatasourceContext,\n DatasourceCreateInput,\n DatasourceInstance,\n DatasourceListOptions,\n DatasourceListResult,\n DatasourceTypeInfo,\n DatasourceUpdateInput,\n QueryResult,\n} from './types'\n\nfunction nextVersion(current?: string): string {\n return String(Number(current ?? '0') + 1)\n}\n\nfunction defaultTypes(seed: DatasourceInstance[]): DatasourceTypeInfo[] {\n const seen = new Set<string>()\n const types: DatasourceTypeInfo[] = []\n for (const instance of seed) {\n if (seen.has(instance.type)) continue\n seen.add(instance.type)\n types.push({\n type: instance.type,\n name: instance.type,\n enabled: true,\n installed: true,\n })\n }\n return types\n}\n\nexport interface CreateMemoryDatasourceBackendOptions {\n instances?: DatasourceInstance[]\n types?: DatasourceTypeInfo[]\n}\n\nexport function createMemoryDatasourceBackend(\n options: CreateMemoryDatasourceBackendOptions = {},\n): DatasourceManagerBackend {\n let store: DatasourceInstance[] = (options.instances ?? []).map((d) => ({ ...d }))\n let types: DatasourceTypeInfo[] = (options.types ?? defaultTypes(store)).map((t) => ({ ...t }))\n\n function findType(type: string): DatasourceTypeInfo {\n const info = types.find((t) => t.type === type)\n if (!info) throw new DatasourceNotFoundError(type)\n return info\n }\n\n function findInstance(uid: string): DatasourceInstance {\n const ds = store.find((d) => d.uid === uid)\n if (!ds) throw new DatasourceNotFoundError(uid)\n return ds\n }\n\n return {\n types: {\n async list() {\n return types.map((t) => ({ ...t }))\n },\n\n async get(type) {\n return { ...findType(type) }\n },\n\n async install(type) {\n if (!types.some((t) => t.type === type)) {\n types = [...types, { type, name: type, installed: true, enabled: false }]\n }\n },\n\n async uninstall(type) {\n findType(type)\n types = types.filter((t) => t.type !== type)\n },\n\n async enable(type) {\n const current = findType(type)\n types = types.map((t) => t.type === type ? { ...current, enabled: true } : t)\n },\n\n async disable(type) {\n const current = findType(type)\n types = types.map((t) => t.type === type ? { ...current, enabled: false } : t)\n },\n },\n\n instances: {\n async list(listOptions?: DatasourceListOptions): Promise<DatasourceListResult> {\n let items = [...store]\n const filter = listOptions?.filter\n if (filter?.type !== undefined) {\n const filterTypes = Array.isArray(filter.type) ? filter.type : [filter.type]\n items = items.filter((d) => filterTypes.includes(d.type))\n }\n if (filter?.enabled !== undefined) {\n items = items.filter((d) => (d.enabled ?? true) === filter.enabled)\n }\n if (filter?.search !== undefined) {\n const query = filter.search.toLowerCase()\n items = items.filter(\n (d) => d.name.toLowerCase().includes(query) || d.uid.toLowerCase().includes(query),\n )\n }\n const total = items.length\n if (listOptions?.page !== undefined && listOptions?.pageSize !== undefined) {\n const start = listOptions.page * listOptions.pageSize\n items = items.slice(start, start + listOptions.pageSize)\n } else if (listOptions?.pageSize !== undefined) {\n items = items.slice(0, listOptions.pageSize)\n }\n return { items: items.map((d) => ({ ...d })), total }\n },\n\n async get(uid) {\n return { ...findInstance(uid) }\n },\n\n async create(input: DatasourceCreateInput) {\n const now = new Date().toISOString()\n const uid = input.uid ?? `ds-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\n const ds: DatasourceInstance = {\n uid,\n type: input.type,\n name: input.name,\n ...(input.options !== undefined ? { options: input.options } : {}),\n enabled: input.enabled ?? true,\n ...(input.meta !== undefined ? { meta: input.meta } : {}),\n version: '1',\n createdAt: now,\n updatedAt: now,\n }\n store = [...store, ds]\n if (!types.some((t) => t.type === input.type)) {\n types = [...types, { type: input.type, name: input.type, installed: true, enabled: true }]\n }\n return { ...ds }\n },\n\n async update(uid, patch: DatasourceUpdateInput) {\n const idx = store.findIndex((d) => d.uid === uid)\n if (idx === -1) throw new DatasourceNotFoundError(uid)\n const ds = store[idx]\n if (patch.version !== undefined && ds.version !== patch.version) {\n throw new DatasourceConflictError(\n `\"${uid}\" version conflict: expected ${patch.version}, got ${ds.version}`,\n )\n }\n const updated: DatasourceInstance = {\n ...ds,\n ...(patch.name !== undefined ? { name: patch.name } : {}),\n ...(patch.options !== undefined ? { options: patch.options } : {}),\n ...(patch.enabled !== undefined ? { enabled: patch.enabled } : {}),\n ...(patch.meta !== undefined ? { meta: patch.meta } : {}),\n version: nextVersion(ds.version),\n updatedAt: new Date().toISOString(),\n }\n store = [...store.slice(0, idx), updated, ...store.slice(idx + 1)]\n return { ...updated }\n },\n\n async delete(uid) {\n findInstance(uid)\n store = store.filter((d) => d.uid !== uid)\n },\n },\n\n async query(request: DataQuery, _context?: DatasourceContext): Promise<QueryResult> {\n const ds = findInstance(request.datasourceUid)\n return {\n frames: [\n tableRowsToFrame({\n columns: [\n { name: 'name', type: 'string' },\n { name: 'type', type: 'string' },\n { name: 'version', type: 'string' },\n ],\n rows: [[ds.name, ds.type, ds.version ?? '']],\n }),\n ],\n requestId: request.id,\n meta: { datasourceUid: ds.uid },\n }\n },\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { j as DatasourceInstance, z as DatasourceTypeInfo, o as DatasourceManagerBackend } from './manager-C5PgvWNH.cjs';
1
+ import { n as DatasourceInstance, I as DatasourceTypeInfo, s as DatasourceManagerBackend } from './manager-DOC7PPiJ.cjs';
2
2
 
3
3
  interface CreateMemoryDatasourceBackendOptions {
4
4
  instances?: DatasourceInstance[];
package/dist/testing.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { j as DatasourceInstance, z as DatasourceTypeInfo, o as DatasourceManagerBackend } from './manager-C5PgvWNH.js';
1
+ import { n as DatasourceInstance, I as DatasourceTypeInfo, s as DatasourceManagerBackend } from './manager-DOC7PPiJ.js';
2
2
 
3
3
  interface CreateMemoryDatasourceBackendOptions {
4
4
  instances?: DatasourceInstance[];
package/dist/testing.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DatasourceNotFoundError, DatasourceConflictError } from './chunk-Z2DGIUJ2.js';
1
+ import { tableRowsToFrame, DatasourceNotFoundError, DatasourceConflictError } from './chunk-NSZRSVET.js';
2
2
 
3
3
  // src/testing.ts
4
4
  function nextVersion(current) {
@@ -133,15 +133,19 @@ function createMemoryDatasourceBackend(options = {}) {
133
133
  store = store.filter((d) => d.uid !== uid);
134
134
  }
135
135
  },
136
- async query(request) {
136
+ async query(request, _context) {
137
137
  const ds = findInstance(request.datasourceUid);
138
138
  return {
139
- columns: [
140
- { name: "name", type: "string" },
141
- { name: "type", type: "string" },
142
- { name: "version", type: "string" }
139
+ frames: [
140
+ tableRowsToFrame({
141
+ columns: [
142
+ { name: "name", type: "string" },
143
+ { name: "type", type: "string" },
144
+ { name: "version", type: "string" }
145
+ ],
146
+ rows: [[ds.name, ds.type, ds.version ?? ""]]
147
+ })
143
148
  ],
144
- rows: [[ds.name, ds.type, ds.version ?? ""]],
145
149
  requestId: request.id,
146
150
  meta: { datasourceUid: ds.uid }
147
151
  };