{"version":3,"file":"index.cjs","names":["BaseTransport","LogLevel"],"sources":["../src/GoogleCloudLoggingTransport.ts"],"sourcesContent":["import type { Log, LogSync } from \"@google-cloud/logging\";\nimport type { LogEntry } from \"@google-cloud/logging/build/src/entry.js\";\nimport type { LogLayerTransportConfig, LogLayerTransportParams } from \"@loglayer/transport\";\nimport { BaseTransport, LogLevel, type LogLevelType } from \"@loglayer/transport\";\n\nexport interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {\n  /**\n   * The root level data to include for all log entries.\n   * \"severity\", \"timestamp\" and \"jsonPayload\" are already populated by the transport.\n   * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n   */\n  rootLevelData?: Omit<\n    LogEntry,\n    \"severity\" | \"timestamp\" | \"receiveTimestamp\" | \"jsonPayload\" | \"textPayload\" | \"protoPayload\"\n  >;\n\n  /**\n   * List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.\n   */\n  rootLevelMetadataFields?: Array<string>;\n}\n\nexport class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {\n  private rootLevelData: GoogleCloudLoggingTransportConfig[\"rootLevelData\"];\n  private rootLevelMetadataFields: Array<string>;\n\n  constructor(config: GoogleCloudLoggingTransportConfig) {\n    super(config);\n    this.rootLevelData = config.rootLevelData || {};\n    this.rootLevelMetadataFields = config.rootLevelMetadataFields ?? [];\n  }\n\n  private mapLogLevel(level: LogLevelType): string {\n    switch (level) {\n      case LogLevel.fatal:\n        return \"CRITICAL\";\n      case LogLevel.error:\n        return \"ERROR\";\n      case LogLevel.warn:\n        return \"WARNING\";\n      case LogLevel.info:\n        return \"INFO\";\n      case LogLevel.debug:\n        return \"DEBUG\";\n      case LogLevel.trace:\n        return \"DEBUG\";\n      default:\n        return \"DEFAULT\";\n    }\n  }\n\n  private extractLogEntryFields(data: Record<string, unknown>) {\n    const keys = Object.keys(data);\n    const metadata: Record<string, unknown> = {};\n\n    for (const key of keys) {\n      if (this.rootLevelMetadataFields.includes(key)) {\n        metadata[key] = data[key];\n        delete data[key];\n      }\n    }\n\n    return metadata;\n  }\n\n  shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[] {\n    const safeData = data && hasData ? data : {};\n    const metadata = this.extractLogEntryFields(safeData);\n\n    const entry = this.logger.entry(\n      {\n        ...this.rootLevelData,\n        ...metadata,\n        severity: this.mapLogLevel(logLevel),\n        timestamp: new Date(),\n      },\n      {\n        ...safeData,\n        message: messages.join(\" \"),\n      },\n    );\n\n    this.logger.write(entry);\n\n    if (data && hasData) {\n      return [data, messages];\n    }\n\n    return [messages];\n  }\n}\n"],"mappings":";;;AAsBA,IAAa,8BAAb,cAAiDA,oBAAAA,cAA6B;CAC5E;CACA;CAEA,YAAY,QAA2C;EACrD,MAAM,MAAM;EACZ,KAAK,gBAAgB,OAAO,iBAAiB,CAAC;EAC9C,KAAK,0BAA0B,OAAO,2BAA2B,CAAC;CACpE;CAEA,YAAoB,OAA6B;EAC/C,QAAQ,OAAR;GACE,KAAKC,oBAAAA,SAAS,OACZ,OAAO;GACT,KAAKA,oBAAAA,SAAS,OACZ,OAAO;GACT,KAAKA,oBAAAA,SAAS,MACZ,OAAO;GACT,KAAKA,oBAAAA,SAAS,MACZ,OAAO;GACT,KAAKA,oBAAAA,SAAS,OACZ,OAAO;GACT,KAAKA,oBAAAA,SAAS,OACZ,OAAO;GACT,SACE,OAAO;EACX;CACF;CAEA,sBAA8B,MAA+B;EAC3D,MAAM,OAAO,OAAO,KAAK,IAAI;EAC7B,MAAM,WAAoC,CAAC;EAE3C,KAAK,MAAM,OAAO,MAChB,IAAI,KAAK,wBAAwB,SAAS,GAAG,GAAG;GAC9C,SAAS,OAAO,KAAK;GACrB,OAAO,KAAK;EACd;EAGF,OAAO;CACT;CAEA,aAAa,EAAE,MAAM,SAAS,UAAU,YAA4C;EAClF,MAAM,WAAW,QAAQ,UAAU,OAAO,CAAC;EAC3C,MAAM,WAAW,KAAK,sBAAsB,QAAQ;EAEpD,MAAM,QAAQ,KAAK,OAAO,MACxB;GACE,GAAG,KAAK;GACR,GAAG;GACH,UAAU,KAAK,YAAY,QAAQ;GACnC,2BAAW,IAAI,KAAK;EACtB,GACA;GACE,GAAG;GACH,SAAS,SAAS,KAAK,GAAG;EAC5B,CACF;EAEA,KAAK,OAAO,MAAM,KAAK;EAEvB,IAAI,QAAQ,SACV,OAAO,CAAC,MAAM,QAAQ;EAGxB,OAAO,CAAC,QAAQ;CAClB;AACF"}