{"version":3,"sources":["../src/lib/logger.ts","../src/lib/types.ts","../src/lib/retry.ts","../src/lib/wrap-function.ts","../src/lib/wrap-class.ts"],"names":["args"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Logger } from './types';\n\n// Basic console logger implementation\nexport const consoleLogger: Logger = {\n  debug: (obj, msg) => console.debug(`[DEBUG] ${msg}`, obj),\n  info: (obj, msg) => console.log(`[INFO] ${msg}`, obj),\n  warn: (obj, msg) => console.warn(`[WARN] ${msg}`, obj),\n  error: (obj, msg) => console.error(`[ERROR] ${msg}`, obj),\n  fatal: (obj, msg) => console.error(`[FATAL] ${msg}`, obj),\n  trace: (obj, msg) => console.debug(`[TRACE] ${msg}`, obj),\n};\n\n// Default logger\nexport const defaultLogger = consoleLogger; ","// Type definitions for Aspect Wrap\n\n// Logger interface matching Pino's structured logging style\nexport interface Logger {\n  debug: (obj: Record<string, unknown>, msg?: string) => void;\n  info: (obj: Record<string, unknown>, msg?: string) => void;\n  warn: (obj: Record<string, unknown>, msg?: string) => void;\n  error: (obj: Record<string, unknown>, msg?: string) => void;\n  fatal: (obj: Record<string, unknown>, msg?: string) => void;\n  trace: (obj: Record<string, unknown>, msg?: string) => void;\n}\n\n// Generic type for class constructors\nexport type Constructor<T = object> = new (...args: unknown[]) => T;\n\n// Base error interface\nexport interface BaseError {\n  status?: number;\n  message: string;\n}\n\n// Base method type\nexport type Method = (...args: unknown[]) => unknown;\n\n// Type for objects with string-indexed methods\nexport interface MethodContainer {\n  [key: string]: Method | unknown;\n}\n\n// Log levels\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\n// Retry options\nexport interface RetryOptions {\n  attempts?: number;\n  delay?: number;\n  factor?: number;\n  maxDelay?: number;\n  jitter?: boolean;\n  shouldRetry?: (error: BaseError) => boolean;\n  logger?: Logger;\n  name?: string;\n}\n\n// Hook context\nexport interface HookContext {\n  name: string;\n  startTime: number;\n  duration?: number;\n  error?: Error;\n}\n\n// Base wrapper options\nexport interface BaseWrapperOptions {\n  before?: (name: string, args: unknown[], context: HookContext) => void | Promise<void>;\n  after?: (name: string, result: unknown, context: HookContext) => void | Promise<void>;\n  onError?: (name: string, error: Error, context: HookContext) => void | Promise<void>;\n  finally?: (name: string, context: HookContext) => void | Promise<void>;\n  logger?: Logger;\n  logLevel?: LogLevel;\n  retry?: RetryOptions;\n}\n\n// Method filter type\nexport type MethodFilter = ((methodName: string) => boolean) | string[];\n\n// Class wrapping options\nexport interface WrapClassOptions extends BaseWrapperOptions {\n  methodFilter?: MethodFilter;\n  includeStatic?: boolean;\n  includeInherited?: boolean;\n  includePrivate?: boolean;\n  includeAccessors?: boolean;\n}\n\n// Function wrapping options\nexport interface WrapFunctionOptions extends BaseWrapperOptions {\n  name?: string;\n  preserveName?: boolean;\n  preserveContext?: boolean;\n}\n\n// Default retry configuration\nexport const DEFAULT_RETRY = {\n  attempts: 3,\n  delay: 100,\n  factor: 2,\n  maxDelay: 30_000,\n  jitter: true,\n} as const; ","import type { BaseError, RetryOptions } from './types';\nimport { DEFAULT_RETRY } from './types';\n\n// Default retry predicate - retry on HTTP 429 and 503\nexport function defaultShouldRetry(error: BaseError): boolean {\n  if (error && typeof error.status === 'number') {\n    return error.status === 429 || error.status === 503;\n  }\n  return true;\n}\n\n// Execute a function with retry logic\nexport async function executeWithRetry(\n  fn: () => unknown,\n  retry?: RetryOptions,\n): Promise<unknown> {\n  const config = retry ?? {};\n  const attempts = config.attempts ?? DEFAULT_RETRY.attempts;\n  const delay = config.delay ?? DEFAULT_RETRY.delay;\n  const factor = config.factor ?? DEFAULT_RETRY.factor;\n  const maxDelay = config.maxDelay ?? DEFAULT_RETRY.maxDelay;\n  const jitter = config.jitter ?? DEFAULT_RETRY.jitter;\n  const shouldRetry = config.shouldRetry ?? defaultShouldRetry;\n  const { logger, name } = config;\n\n  let remaining = attempts;\n  let currentDelay = delay;\n\n  while (true) {\n    try {\n      const result = fn();\n      return result instanceof Promise ? await result : result;\n    } catch (error) {\n      const baseError = error as BaseError;\n      if (!shouldRetry(baseError)) throw error;\n      if (--remaining <= 0) throw error;\n      \n      if (logger && name) {\n        logger.error(\n          { error: baseError, remainingAttempts: remaining },\n          `Error in ${name}, retrying...`,\n        );\n      }\n\n      // Apply jitter to avoid thundering herd\n      const finalDelay = jitter\n        ? currentDelay * (0.5 + Math.random())\n        : currentDelay;\n\n      await new Promise((res) => setTimeout(res, Math.min(finalDelay, maxDelay)));\n      currentDelay *= factor;\n    }\n  }\n} ","import type { HookContext, WrapFunctionOptions } from './types';\nimport { defaultLogger } from './logger';\nimport { executeWithRetry } from './retry';\n\n// Wrap a function with additional behavior\nexport function wrapFunction<Args extends unknown[], Result>(\n  fn: (...args: Args) => Result,\n  options?: WrapFunctionOptions,\n): (...args: Args) => Promise<Result> {\n  const logger = options?.logger ?? defaultLogger;\n  const name = options?.name ?? (fn.name || 'anonymous');\n  const defaultOptions: WrapFunctionOptions = {\n    preserveName: true,\n    preserveContext: true,\n    ...options,\n  };\n\n  const wrapped = function (this: unknown, ...args: Args): Promise<Result> {\n    const context: HookContext = {\n      name,\n      startTime: Date.now(),\n    };\n\n    const handleError = (error: Error) => {\n      context.error = error;\n      context.duration = Date.now() - context.startTime;\n      defaultOptions.onError?.(name, error, context);\n      logger.error(\n        { error },\n        `Error in function ${name}`,\n      );\n      throw error;\n    };\n\n    try {\n      defaultOptions.before?.(name, args, context);\n      logger.info({ args }, `Entering function ${name}`);\n\n      const exec = () =>\n        defaultOptions.preserveContext ? fn.apply(this, args) : fn(...args);\n\n      return executeWithRetry(exec, {\n        ...defaultOptions.retry,\n        logger,\n        name: `function ${name}`,\n      })\n        .then((result) => {\n          context.duration = Date.now() - context.startTime;\n          \n          const logObj: Record<string, unknown> = {};\n          \n          if (result !== undefined) {\n            logObj.result = result;\n          }\n          \n          logger.info(logObj, `Exiting function ${name}`);\n          defaultOptions.after?.(name, result, context);\n          return result as Result;\n        })\n        .catch(handleError)\n        .finally(() => {\n          defaultOptions.finally?.(name, context);\n        });\n    } catch (error) {\n      return Promise.reject(handleError(error as Error));\n    }\n  };\n\n  // Preserve the original function name if requested\n  if (defaultOptions.preserveName) {\n    Object.defineProperty(wrapped, 'name', { value: name });\n  }\n\n  return wrapped;\n} ","import type { Constructor, HookContext, MethodContainer, MethodFilter, WrapClassOptions, Method } from './types';\nimport { defaultLogger } from './logger';\nimport { executeWithRetry } from './retry';\n\n// Helper function to check if a method should be wrapped\nfunction shouldWrapMethod(\n  name: string,\n  filter: MethodFilter | undefined,\n  options: WrapClassOptions,\n  isInherited = false,\n): boolean {\n  // Skip if no filter or options\n  if (!filter && !options) return true;\n\n  // Skip inherited methods if not enabled\n  if (isInherited && !options.includeInherited) return false;\n\n  // Check if method should be included based on naming conventions\n  if (!options.includePrivate && name.startsWith('_')) return false;\n  if (name === 'constructor') return false;\n\n  // Apply method filter if provided\n  if (filter) {\n    if (Array.isArray(filter)) {\n      return filter.includes(name);\n    }\n    return filter(name);\n  }\n\n  return true;\n}\n\n// Wrap a class with additional behavior\nexport function wrapClass<T extends Constructor>(\n  BaseClass: T,\n  options?: WrapClassOptions,\n): T {\n  const logger = options?.logger ?? defaultLogger;\n  const defaultOptions: WrapClassOptions = {\n    includeStatic: true,\n    includeInherited: false,\n    includePrivate: false,\n    includeAccessors: false,\n    ...options,\n  };\n\n  // Create a wrapped class using a function to avoid TypeScript mixin constraints\n  const Wrapped = function (this: InstanceType<T>, ...args: unknown[]) {\n    // Call the original constructor\n    const instance = new BaseClass(...args);\n    Object.setPrototypeOf(this, Object.getPrototypeOf(instance));\n    \n    // Copy instance properties\n    Object.assign(this, instance);\n\n    // Get all instance methods to wrap\n    const methodNames = Object.getOwnPropertyNames(\n      BaseClass.prototype,\n    ).filter((name) =>\n      shouldWrapMethod(\n        name,\n        defaultOptions.methodFilter,\n        defaultOptions,\n        false,\n      ),\n    );\n\n    // Add inherited methods if requested\n    if (defaultOptions.includeInherited) {\n      let proto = Object.getPrototypeOf(BaseClass.prototype);\n      while (proto && proto !== Object.prototype) {\n        methodNames.push(\n          ...Object.getOwnPropertyNames(proto).filter((name) =>\n            shouldWrapMethod(\n              name,\n              defaultOptions.methodFilter,\n              defaultOptions,\n              true,\n            ),\n          ),\n        );\n        proto = Object.getPrototypeOf(proto);\n      }\n    }\n\n    for (const name of methodNames) {\n      const original = (this as unknown as MethodContainer)[name] as Method;\n      if (typeof original !== 'function') continue;\n      \n      (this as unknown as MethodContainer)[name] = function (\n        this: unknown,\n        ...args: unknown[]\n      ) {\n        const context: HookContext = {\n          name,\n          startTime: Date.now(),\n        };\n\n        const handleError = (error: Error) => {\n          context.error = error;\n          context.duration = Date.now() - context.startTime;\n          defaultOptions.onError?.(name, error, context);\n          logger.error(\n            { method: name, error },\n            `Error in ${name}`,\n          );\n          throw error;\n        };\n\n        try {\n          defaultOptions.before?.(name, args, context);\n          logger.info({ method: name, args }, `Entering ${name}`);\n\n          const exec = () => original.apply(this, args);\n          return executeWithRetry(exec, {\n            ...defaultOptions.retry,\n            logger,\n            name,\n          })\n            .then((result) => {\n              // Calculate duration for backward compatibility with tests\n              context.duration = Date.now() - context.startTime;\n              \n              const logObj: Record<string, unknown> = { method: name };\n              \n              if (result !== undefined) {\n                logObj.result = result;\n              }\n              \n              logger.info(logObj, `Exiting ${name}`);\n              defaultOptions.after?.(name, result, context);\n              return result;\n            })\n            .catch(handleError)\n            .finally(() => {\n              defaultOptions.finally?.(name, context);\n            });\n        } catch (error) {\n          return Promise.reject(handleError(error as Error));\n        }\n      };\n    }\n  } as unknown as T;\n\n  // Set up the prototype chain correctly\n  Wrapped.prototype = Object.create(BaseClass.prototype);\n  Wrapped.prototype.constructor = Wrapped;\n\n  // Create a non-generic type for static methods\n  const BaseClassWithMethods = BaseClass as unknown as MethodContainer;\n  const WrappedWithMethods = Wrapped as unknown as MethodContainer;\n\n  // Copy static properties\n  for (const prop of Object.getOwnPropertyNames(BaseClass)) {\n    if (prop !== 'prototype' && prop !== 'name' && prop !== 'length') {\n      Object.defineProperty(\n        Wrapped,\n        prop,\n        Object.getOwnPropertyDescriptor(BaseClass, prop) || Object.create(null)\n      );\n    }\n  }\n\n  // Wrap static methods if enabled\n  if (defaultOptions.includeStatic) {\n    const staticNames = Object.getOwnPropertyNames(BaseClass).filter(\n      (name) =>\n        !['prototype', 'name', 'length'].includes(name) &&\n        typeof BaseClassWithMethods[name] === 'function' &&\n        shouldWrapMethod(\n          name,\n          defaultOptions.methodFilter,\n          defaultOptions,\n          false,\n        ),\n    );\n\n    for (const name of staticNames) {\n      const originalStatic = BaseClassWithMethods[name] as Method;\n      WrappedWithMethods[name] = function (...args: unknown[]) {\n        const context: HookContext = {\n          name: `static ${name}`,\n          startTime: Date.now(),\n        };\n\n        const handleError = (error: Error) => {\n          context.error = error;\n          context.duration = Date.now() - context.startTime;\n          defaultOptions.onError?.(name, error, context);\n          logger.error(\n            { method: name, error },\n            `Error in static ${name}`,\n          );\n          throw error;\n        };\n\n        try {\n          defaultOptions.before?.(name, args, context);\n          logger.info({ method: name, args }, `Entering static ${name}`);\n\n          const exec = () => originalStatic.apply(BaseClass, args);\n          return executeWithRetry(exec, {\n            ...defaultOptions.retry,\n            logger,\n            name,\n          })\n            .then((result) => {\n              context.duration = Date.now() - context.startTime;\n              \n              const logObj: Record<string, unknown> = { method: name };\n              \n              if (result !== undefined) {\n                logObj.result = result;\n              }\n              \n              logger.info(logObj, `Exiting static ${name}`);\n              defaultOptions.after?.(name, result, context);\n              return result;\n            })\n            .catch(handleError)\n            .finally(() => {\n              defaultOptions.finally?.(name, context);\n            });\n        } catch (error) {\n          return Promise.reject(handleError(error as Error));\n        }\n      };\n    }\n  }\n\n  return Wrapped;\n} "]}