{"version":3,"sources":["/Users/jeff/code/oss/logsdx/dist/index.cjs","../src/parsers/regex/rules.ts","../src/parsers/regex/index.ts","../src/parsers/custom.ts"],"names":[],"mappings":"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","file":"/Users/jeff/code/oss/logsdx/dist/index.cjs","sourcesContent":[null,"import { type RegexParserRule, type LogLevel } from \"../../types\";\n\nexport const logParserRules: RegexParserRule[] = [\n  // Language markers\n  {\n    match: /^\\[json\\]/i,\n    extract: () => ({ lang: \"json\" }),\n  },\n  {\n    match: /^\\[sql\\]/i,\n    extract: () => ({ lang: \"sql\" }),\n  },\n  {\n    match: /^\\[lang:(\\w+)\\]/i,\n    extract: (_line, match) => ({ lang: match[1]?.toLowerCase() }),\n  },\n\n  // Log levels with various formats\n  {\n    match: /\\[(ERROR|ERR|FATAL|CRITICAL)\\]/i,\n    extract: () => ({ level: \"error\" as LogLevel }),\n  },\n  {\n    match: /\\[(WARN|WARNING|ATTENTION)\\]/i,\n    extract: () => ({ level: \"warn\" as LogLevel }),\n  },\n  {\n    match: /\\[(INFO|INFORMATION)\\]/i,\n    extract: () => ({ level: \"info\" as LogLevel }),\n  },\n  {\n    match: /\\[(DEBUG|TRACE|VERBOSE)\\]/i,\n    extract: () => ({ level: \"debug\" as LogLevel }),\n  },\n  {\n    match: /\\[(SUCCESS|SUCCEEDED|COMPLETED)\\]/i,\n    extract: () => ({ level: \"success\" as LogLevel }),\n  },\n\n  // Common log formats\n  {\n    match:\n      /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?)\\s+\\[(\\w+)\\]\\s+(.*)$/,\n    extract: (_line, match) => ({\n      timestamp: match[1],\n      level: match[2]?.toLowerCase() as LogLevel,\n      message: match[3],\n    }),\n  },\n  {\n    match:\n      /^(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?)\\s+\\[(\\w+)\\]\\s+(.*)$/,\n    extract: (_line, match) => ({\n      timestamp: match[1],\n      level: match[2]?.toLowerCase() as LogLevel,\n      message: match[3],\n    }),\n  },\n  {\n    match:\n      /^\\[(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?)\\]\\s+\\[(\\w+)\\]\\s+(.*)$/,\n    extract: (_line, match) => ({\n      timestamp: match[1],\n      level: match[2]?.toLowerCase() as LogLevel,\n      message: match[3],\n    }),\n  },\n\n  // Simple level detection (fallback)\n  {\n    match: /\\b(ERROR|ERR|FATAL|CRITICAL)\\b/i,\n    extract: () => ({ level: \"error\" as LogLevel }),\n  },\n  {\n    match: /\\b(WARN|WARNING|ATTENTION)\\b/i,\n    extract: () => ({ level: \"warn\" as LogLevel }),\n  },\n  {\n    match: /\\b(INFO|INFORMATION)\\b/i,\n    extract: () => ({ level: \"info\" as LogLevel }),\n  },\n  {\n    match: /\\b(DEBUG|TRACE|VERBOSE)\\b/i,\n    extract: () => ({ level: \"debug\" as LogLevel }),\n  },\n  {\n    match: /\\b(SUCCESS|SUCCEEDED|COMPLETED)\\b/i,\n    extract: () => ({ level: \"success\" as LogLevel }),\n  },\n];\n","import { createRegexLineParser } from \"@/src/parsers/regex/line\";\nimport { logParserRules } from \"@/src/parsers/regex/rules\";\n\nexport const regexBasedParser = createRegexLineParser(logParserRules);\nexport { logParserRules, createRegexLineParser };\n","import {\n  type LineParser,\n  type LineParseResult,\n  type LogLevel,\n} from \"@/src/types\";\n\nexport type CustomParserOptions = {\n  name: string;\n  description?: string;\n  canParse?: (line: string) => boolean;\n  parse: (line: string) => LineParseResult | undefined;\n  validate?: () => boolean;\n};\n\n/**\n * Creates a custom parser with the given options\n * @param options Parser options\n * @returns A line parser function\n */\nexport function createCustomParser(options: CustomParserOptions): LineParser {\n  // Validate the parser if a validation function is provided\n  if (options.validate && !options.validate()) {\n    throw new Error(`Invalid configuration for parser '${options.name}'`);\n  }\n\n  // Create the parser function\n  const parser: LineParser = (line: string): LineParseResult | undefined => {\n    // Check if the parser can handle this line\n    if (options.canParse && !options.canParse(line)) {\n      return undefined;\n    }\n\n    // Parse the line\n    return options.parse(line);\n  };\n\n  // Add metadata to the parser function\n  (parser as any).name = options.name;\n  (parser as any).description =\n    options.description || `Custom parser: ${options.name}`;\n\n  return parser;\n}\n\n/**\n * Creates a parser factory function for registering with the parser registry\n * @param options Parser options\n * @returns A parser factory function\n */\nexport function createParserFactory(options: CustomParserOptions) {\n  return async (): Promise<LineParser> => {\n    return createCustomParser(options);\n  };\n}\n\n/**\n * Helper function to map log levels from various formats to standard levels\n * @param level The log level to map\n * @returns A standardized log level\n */\nexport function mapLogLevel(level: string): LogLevel {\n  const levelMap: Record<string, LogLevel> = {\n    // Standard levels\n    debug: \"debug\",\n    info: \"info\",\n    warn: \"warn\",\n    warning: \"warn\",\n    error: \"error\",\n    err: \"error\",\n    success: \"success\",\n    trace: \"trace\",\n\n    // Common variations\n    fatal: \"error\",\n    critical: \"error\",\n    notice: \"info\",\n    verbose: \"debug\",\n    silly: \"debug\",\n\n    // Status-based levels\n    fail: \"error\",\n    failed: \"error\",\n    failure: \"error\",\n    pending: \"warn\",\n    in_progress: \"info\",\n    completed: \"success\",\n  };\n\n  const normalizedLevel = level.toLowerCase().trim();\n  return levelMap[normalizedLevel] || \"info\";\n}\n\n/**\n * Example: Creates a parser for CSV-formatted logs\n */\nexport function createCsvLogParser() {\n  return createParserFactory({\n    name: \"csv-logs\",\n    description: \"Parser for CSV-formatted logs\",\n    canParse: (line: string) => line.startsWith(\"CSV_LOG:\"),\n    parse: (line: string): LineParseResult | undefined => {\n      // Remove the prefix\n      const csvContent = line.substring(8);\n\n      // Parse the CSV-like format\n      const parts = csvContent.split(\",\");\n      if (parts.length < 3) {\n        return undefined;\n      }\n\n      // Extract information\n      const timestamp = parts[0]?.trim() || \"\";\n      const level = mapLogLevel(parts[1]?.trim() || \"\");\n      const message = parts[2]?.trim() || \"\";\n\n      // Create the result\n      const result: LineParseResult = {\n        timestamp,\n        level,\n        message,\n        format: \"csv\",\n      };\n\n      // Add any additional fields\n      for (let i = 3; i < parts.length; i++) {\n        const part = parts[i];\n        if (part) {\n          const [key, value] = part.split(\"=\");\n          if (key && value) {\n            result[key.trim()] = value.trim();\n          }\n        }\n      }\n\n      return result;\n    },\n  });\n}\n\n/**\n * Example: Creates a parser for application-specific logs\n */\nexport function createAppLogParser() {\n  return createParserFactory({\n    name: \"app-logs\",\n    description: \"Parser for application-specific logs\",\n    canParse: (line: string) => line.startsWith(\"[APP]\"),\n    parse: (line: string): LineParseResult | undefined => {\n      // Match application-specific log format\n      const appLogRegex =\n        /^\\[APP\\]\\s+(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})\\s+\\[(\\w+)\\]\\s+(.*)$/;\n      const appLogMatch = line.match(appLogRegex);\n\n      if (appLogMatch && appLogMatch[1] && appLogMatch[2] && appLogMatch[3]) {\n        return {\n          timestamp: appLogMatch[1],\n          level: mapLogLevel(appLogMatch[2]),\n          message: appLogMatch[3],\n          service: \"app\",\n        };\n      }\n\n      // Match error stack traces\n      const errorRegex = /^\\[APP\\]\\s+ERROR\\s+(.*?):\\s+(.*)$/;\n      const errorMatch = line.match(errorRegex);\n\n      if (errorMatch && errorMatch[1] && errorMatch[2]) {\n        return {\n          level: \"error\",\n          message: `${errorMatch[1]}: ${errorMatch[2]}`,\n          service: \"app\",\n        };\n      }\n\n      return undefined;\n    },\n  });\n}\n"]}