import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
import { Context } from "@opentelemetry/api";

//#region src/span-name-normalizer.d.ts
/**
 * Function to normalize a span name
 * @param name - The original span name
 * @returns The normalized span name
 */
type SpanNameNormalizerFn = (name: string) => string;
/**
 * Built-in normalizer preset names
 */
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
/**
 * Normalizer config - either a function or a preset name
 */
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
interface SpanNameNormalizingProcessorOptions {
  /**
   * Normalizer function or preset name
   */
  normalizer: SpanNameNormalizerConfig;
}
/**
 * Built-in normalizer patterns
 */
declare const NORMALIZER_PATTERNS: {
  readonly numericId: RegExp;
  readonly uuid: RegExp;
  readonly shortUuid: RegExp;
  readonly objectId: RegExp;
  readonly hash: RegExp;
  readonly isoDate: RegExp;
  readonly timestamp: RegExp;
  readonly email: RegExp;
};
/**
 * Built-in normalizer presets
 */
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
/**
 * Span processor that normalizes span names to reduce cardinality.
 *
 * Normalization happens in onStart() when we have access to the mutable Span.
 * This allows us to call span.updateName() before the span is finalized.
 *
 * Common use cases:
 * - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
 * - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
 * - Dates: /logs/2024-01-15 → /logs/:date
 */
declare class SpanNameNormalizingProcessor implements SpanProcessor {
  private readonly wrappedProcessor;
  private readonly normalizer;
  constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
  /**
   * Normalize span name on start (when Span is mutable)
   */
  onStart(span: Span, parentContext: Context): void;
  /**
   * Pass through onEnd unchanged
   */
  onEnd(span: ReadableSpan): void;
  forceFlush(): Promise<void>;
  shutdown(): Promise<void>;
}
//#endregion
export { SpanNameNormalizerPreset as a, SpanNameNormalizerFn as i, NORMALIZER_PRESETS as n, SpanNameNormalizingProcessor as o, SpanNameNormalizerConfig as r, SpanNameNormalizingProcessorOptions as s, NORMALIZER_PATTERNS as t };
//# sourceMappingURL=span-name-normalizer-8ZOGJuwv.d.ts.map