// Generated by nautilus-codegen. Do not edit manually.

import type { NautilusClient, NautilusClientOptions, TransactionBatchOperation } from './_internal/_client.js';
import type { EnginePoolOptions } from './_internal/_engine.js';
import { IsolationLevel } from './_internal/_transaction.js';
import type { TransactionClient } from './_internal/_transaction.js';
{%- for model in models %}
import type { {{ model.delegate_name }} } from './models/{{ model.snake_name }}.js';
{%- endfor %}

export declare class Nautilus extends NautilusClient {
{%- for model in models %}
  readonly {{ model.camel_name }}: {{ model.delegate_name }};
{%- endfor %}

  constructor(options?: NautilusClientOptions);

  $transaction<T>(
    fn:       (tx: TransactionClient) => Promise<T>,
    options?: { timeout?: number; isolationLevel?: IsolationLevel },
  ): Promise<T>;

  $transactionBatch(
    operations: TransactionBatchOperation[],
    options?: { timeout?: number; isolationLevel?: IsolationLevel },
  ): Promise<unknown[]>;
}

export { IsolationLevel };
export type { EnginePoolOptions, NautilusClientOptions, TransactionBatchOperation, TransactionClient };
