@mastra/loggers 1.0.0-beta.0 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @mastra/loggers
2
2
 
3
+ ## 1.0.0-beta.2
4
+
5
+ ### Minor Changes
6
+
7
+ - Add child() method to PinoLogger for creating child loggers with bound context ([#10900](https://github.com/mastra-ai/mastra/pull/10900))
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`3076c67`](https://github.com/mastra-ai/mastra/commit/3076c6778b18988ae7d5c4c5c466366974b2d63f), [`85d7ee1`](https://github.com/mastra-ai/mastra/commit/85d7ee18ff4e14d625a8a30ec6656bb49804989b), [`c6c1092`](https://github.com/mastra-ai/mastra/commit/c6c1092f8fbf76109303f69e000e96fd1960c4ce), [`81dc110`](https://github.com/mastra-ai/mastra/commit/81dc11008d147cf5bdc8996ead1aa61dbdebb6fc), [`7aedb74`](https://github.com/mastra-ai/mastra/commit/7aedb74883adf66af38e270e4068fd42e7a37036), [`8f02d80`](https://github.com/mastra-ai/mastra/commit/8f02d800777397e4b45d7f1ad041988a8b0c6630), [`d7aad50`](https://github.com/mastra-ai/mastra/commit/d7aad501ce61646b76b4b511e558ac4eea9884d0), [`ce0a73a`](https://github.com/mastra-ai/mastra/commit/ce0a73abeaa75b10ca38f9e40a255a645d50ebfb), [`a02e542`](https://github.com/mastra-ai/mastra/commit/a02e542d23179bad250b044b17ff023caa61739f), [`a372c64`](https://github.com/mastra-ai/mastra/commit/a372c640ad1fd12e8f0613cebdc682fc156b4d95), [`8846867`](https://github.com/mastra-ai/mastra/commit/8846867ffa9a3746767618e314bebac08eb77d87), [`42a42cf`](https://github.com/mastra-ai/mastra/commit/42a42cf3132b9786feecbb8c13c583dce5b0e198), [`ae08bf0`](https://github.com/mastra-ai/mastra/commit/ae08bf0ebc6a4e4da992b711c4a389c32ba84cf4), [`21735a7`](https://github.com/mastra-ai/mastra/commit/21735a7ef306963554a69a89b44f06c3bcd85141), [`1d877b8`](https://github.com/mastra-ai/mastra/commit/1d877b8d7b536a251c1a7a18db7ddcf4f68d6f8b)]:
12
+ - @mastra/core@1.0.0-beta.7
13
+
14
+ ## 1.0.0-beta.1
15
+
16
+ ### Patch Changes
17
+
18
+ - dependencies updates: ([#10111](https://github.com/mastra-ai/mastra/pull/10111))
19
+ - Updated dependency [`pino@^10.1.0` ↗︎](https://www.npmjs.com/package/pino/v/10.1.0) (from `^9.7.0`, in `dependencies`)
20
+ - Updated dependencies [[`2319326`](https://github.com/mastra-ai/mastra/commit/2319326f8c64e503a09bbcf14be2dd65405445e0), [`d629361`](https://github.com/mastra-ai/mastra/commit/d629361a60f6565b5bfb11976fdaf7308af858e2), [`08c31c1`](https://github.com/mastra-ai/mastra/commit/08c31c188ebccd598acaf55e888b6397d01f7eae), [`fd3d338`](https://github.com/mastra-ai/mastra/commit/fd3d338a2c362174ed5b383f1f011ad9fb0302aa), [`c30400a`](https://github.com/mastra-ai/mastra/commit/c30400a49b994b1b97256fe785eb6c906fc2b232), [`69e0a87`](https://github.com/mastra-ai/mastra/commit/69e0a878896a2da9494945d86e056a5f8f05b851), [`01f8878`](https://github.com/mastra-ai/mastra/commit/01f88783de25e4de048c1c8aace43e26373c6ea5), [`4c77209`](https://github.com/mastra-ai/mastra/commit/4c77209e6c11678808b365d545845918c40045c8), [`d827d08`](https://github.com/mastra-ai/mastra/commit/d827d0808ffe1f3553a84e975806cc989b9735dd), [`23c10a1`](https://github.com/mastra-ai/mastra/commit/23c10a1efdd9a693c405511ab2dc8a1236603162), [`676ccc7`](https://github.com/mastra-ai/mastra/commit/676ccc7fe92468d2d45d39c31a87825c89fd1ea0), [`c10398d`](https://github.com/mastra-ai/mastra/commit/c10398d5b88f1d4af556f4267ff06f1d11e89179), [`00c2387`](https://github.com/mastra-ai/mastra/commit/00c2387f5f04a365316f851e58666ac43f8c4edf), [`ad6250d`](https://github.com/mastra-ai/mastra/commit/ad6250dbdaad927e29f74a27b83f6c468b50a705), [`3a73998`](https://github.com/mastra-ai/mastra/commit/3a73998fa4ebeb7f3dc9301afe78095fc63e7999), [`e16d553`](https://github.com/mastra-ai/mastra/commit/e16d55338403c7553531cc568125c63d53653dff), [`4d59f58`](https://github.com/mastra-ai/mastra/commit/4d59f58de2d90d6e2810a19d4518e38ddddb9038), [`e1bb9c9`](https://github.com/mastra-ai/mastra/commit/e1bb9c94b4eb68b019ae275981be3feb769b5365), [`351a11f`](https://github.com/mastra-ai/mastra/commit/351a11fcaf2ed1008977fa9b9a489fc422e51cd4)]:
21
+ - @mastra/core@1.0.0-beta.3
22
+
3
23
  ## 1.0.0-beta.0
4
24
 
5
25
  ### Major Changes
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/file/index.ts"],"names":["LoggerTransport","existsSync","createWriteStream","readFileSync"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { WriteStream } from 'fs';\nimport { createWriteStream, existsSync, readFileSync } from 'fs';\nimport { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class FileTransport extends LoggerTransport {\n path: string;\n fileStream: WriteStream;\n constructor({ path }: { path: string }) {\n super({ objectMode: true });\n this.path = path;\n\n if (!existsSync(this.path)) {\n console.info(this.path);\n throw new Error('File path does not exist');\n }\n\n this.fileStream = createWriteStream(this.path, { flags: 'a' });\n }\n\n _transform(chunk: any, _encoding: string, callback: (error: Error | null, chunk: any) => void) {\n try {\n this.fileStream.write(chunk);\n } catch (error) {\n console.error('Error parsing log entry:', error);\n }\n callback(null, chunk);\n }\n\n _flush(callback: Function) {\n // End the file stream when transform stream ends\n this.fileStream.end(() => {\n callback();\n });\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n // Clean up resources\n _destroy(error: Error, callback: Function) {\n if (this.fileStream) {\n this.fileStream.destroy(error);\n }\n callback(error);\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n const logs = readFileSync(this.path, 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map(log => JSON.parse(log));\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters });\n const logs = (allLogs?.logs?.filter(log => log?.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/file/index.ts"],"names":["LoggerTransport","existsSync","createWriteStream","readFileSync"],"mappings":";;;;;;AAKO,IAAM,aAAA,GAAN,cAA4BA,sBAAA,CAAgB;AAAA,EACjD,IAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtC,IAAA,KAAA,CAAM,EAAE,UAAA,EAAY,IAAA,EAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,IAAI,CAACC,aAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,IAAI,CAAA;AACtB,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAA,CAAK,aAAaC,oBAAA,CAAkB,IAAA,CAAK,MAAM,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,EAC/D;AAAA,EAEA,UAAA,CAAW,KAAA,EAAY,SAAA,EAAmB,QAAA,EAAqD;AAC7F,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAK,CAAA;AAAA,IACjD;AACA,IAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,EACtB;AAAA,EAEA,OAAO,QAAA,EAAoB;AAEzB,IAAA,IAAA,CAAK,UAAA,CAAW,IAAI,MAAM;AACxB,MAAA,QAAA,EAAS;AAAA,IACX,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAA,CAAO,KAAA,EAAY,QAAA,EAAmB,QAAA,EAAoD;AACxF,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,QAAA,IAAY,MAAA,EAAQ,QAAQ,CAAA;AACnD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,QAAA,IAAY,MAAA,EAAQ,CAAC,KAAA,KAAwB;AAClE,MAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,2BAAA,EAA6B,KAAK,CAAA;AAAA,IAC7D,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,QAAA,CAAS,OAAc,QAAA,EAAoB;AACzC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAC/B;AACA,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB;AAAA,EAEA,MAAM,SAAS,MAAA,EAcZ;AACD,IAAA,IAAI;AACF,MAAA,MAAM;AAAA,QACJ,QAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,uBAAA,EAAyB,4BAAA;AAAA,QACzB,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACX,GAAI,UAAU,EAAC;AAEf,MAAA,MAAM,IAAA,GAAO,SAAA,KAAc,CAAA,GAAI,CAAA,GAAK,SAAA,IAAa,CAAA;AACjD,MAAA,MAAM,UAAU,YAAA,IAAgB,GAAA;AAChC,MAAA,MAAM,0BAA0B,4BAAA,IAAgC,IAAA;AAEhE,MAAA,MAAM,OAAOC,eAAA,CAAa,IAAA,CAAK,IAAA,EAAM,MAAM,EACxC,KAAA,CAAM,IAAI,CAAA,CACV,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,SAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAE7B,MAAA,IAAI,YAAA,GAAe,KAAK,MAAA,CAAO,CAAA,MAAA,KAAU,WAAW,IAAA,IAAQ,OAAO,WAAW,QAAQ,CAAA;AAEtF,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,YAAA,GAAe,YAAA,CAAa,MAAA;AAAA,UAAO,SACjC,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,KAAK,KAAK,CAAA,KAAM,GAAA,CAAI,GAA2B,MAAM,KAAK;AAAA,SAClG;AAAA,MACF;AAEA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,YAAA,GAAe,YAAA,CAAa,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,MAClE;AAEA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,YAAA,GAAe,YAAA,CAAa,MAAA,CAAO,CAAA,GAAA,KAAO,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,OAAA,EAAQ,IAAK,QAAA,CAAU,OAAA,EAAS,CAAA;AAAA,MAChG;AAEA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,YAAA,GAAe,YAAA,CAAa,MAAA,CAAO,CAAA,GAAA,KAAO,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,OAAA,EAAQ,IAAK,MAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,MAC9F;AAEA,MAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,YAAA;AAAA,UACN,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,IAAA;AAAA,UACA,SAAS,YAAA,CAAa,MAAA;AAAA,UACtB,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAEA,MAAA,MAAM,QAAQ,YAAA,CAAa,MAAA;AAC3B,MAAA,MAAM,kBAAkB,OAAA,IAAW,GAAA;AACnC,MAAA,MAAM,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,eAAA;AAC3B,MAAA,MAAM,MAAM,KAAA,GAAQ,eAAA;AACpB,MAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACnD,MAAA,MAAM,UAAU,GAAA,GAAM,KAAA;AAEtB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA,EAAS,eAAA;AAAA,QACT;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,KAAK,CAAA;AACpD,MAAA,OAAO;AAAA,QACL,MAAM,EAAC;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB;AAAA,IACpB,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX,EAcG;AACD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,SAAA,KAAc,CAAA,GAAI,CAAA,GAAK,SAAA,IAAa,CAAA;AACjD,MAAA,MAAM,UAAU,YAAA,IAAgB,GAAA;AAChC,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,CAAS,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,CAAA;AAC3E,MAAA,MAAM,IAAA,GAAQ,SAAS,IAAA,EAAM,MAAA,CAAO,SAAO,GAAA,EAAK,KAAA,KAAU,KAAK,CAAA,IAAK,EAAC;AACrE,MAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,MAAA,MAAM,kBAAkB,OAAA,IAAW,GAAA;AACnC,MAAA,MAAM,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,eAAA;AAC3B,MAAA,MAAM,MAAM,KAAA,GAAQ,eAAA;AACpB,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAC3C,MAAA,MAAM,UAAU,GAAA,GAAM,KAAA;AAEtB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA,EAAS,eAAA;AAAA,QACT;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC7D,MAAA,OAAO;AAAA,QACL,MAAM,EAAC;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["import type { WriteStream } from 'node:fs';\nimport { createWriteStream, existsSync, readFileSync } from 'node:fs';\nimport { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class FileTransport extends LoggerTransport {\n path: string;\n fileStream: WriteStream;\n constructor({ path }: { path: string }) {\n super({ objectMode: true });\n this.path = path;\n\n if (!existsSync(this.path)) {\n console.info(this.path);\n throw new Error('File path does not exist');\n }\n\n this.fileStream = createWriteStream(this.path, { flags: 'a' });\n }\n\n _transform(chunk: any, _encoding: string, callback: (error: Error | null, chunk: any) => void) {\n try {\n this.fileStream.write(chunk);\n } catch (error) {\n console.error('Error parsing log entry:', error);\n }\n callback(null, chunk);\n }\n\n _flush(callback: Function) {\n // End the file stream when transform stream ends\n this.fileStream.end(() => {\n callback();\n });\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n // Clean up resources\n _destroy(error: Error, callback: Function) {\n if (this.fileStream) {\n this.fileStream.destroy(error);\n }\n callback(error);\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n const logs = readFileSync(this.path, 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map(log => JSON.parse(log));\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters });\n const logs = (allLogs?.logs?.filter(log => log?.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { WriteStream } from 'fs';
1
+ import type { WriteStream } from 'node:fs';
2
2
  import { LoggerTransport } from '@mastra/core/logger';
3
3
  import type { BaseLogMessage, LogLevel } from '@mastra/core/logger';
4
4
  export declare class FileTransport extends LoggerTransport {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,qBAAa,aAAc,SAAQ,eAAe;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,WAAW,CAAC;gBACZ,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAYtC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI;IAS7F,MAAM,CAAC,QAAQ,EAAE,QAAQ;IAOzB,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO;IAazF,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;IAOnC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACtB,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IA6EI,eAAe,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACtB,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CA+BH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,qBAAa,aAAc,SAAQ,eAAe;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,WAAW,CAAC;gBACZ,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAYtC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI;IAS7F,MAAM,CAAC,QAAQ,EAAE,QAAQ;IAOzB,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO;IAazF,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;IAOnC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACtB,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IA6EI,eAAe,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACtB,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CA+BH"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/file/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { WriteStream } from 'fs';\nimport { createWriteStream, existsSync, readFileSync } from 'fs';\nimport { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class FileTransport extends LoggerTransport {\n path: string;\n fileStream: WriteStream;\n constructor({ path }: { path: string }) {\n super({ objectMode: true });\n this.path = path;\n\n if (!existsSync(this.path)) {\n console.info(this.path);\n throw new Error('File path does not exist');\n }\n\n this.fileStream = createWriteStream(this.path, { flags: 'a' });\n }\n\n _transform(chunk: any, _encoding: string, callback: (error: Error | null, chunk: any) => void) {\n try {\n this.fileStream.write(chunk);\n } catch (error) {\n console.error('Error parsing log entry:', error);\n }\n callback(null, chunk);\n }\n\n _flush(callback: Function) {\n // End the file stream when transform stream ends\n this.fileStream.end(() => {\n callback();\n });\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n // Clean up resources\n _destroy(error: Error, callback: Function) {\n if (this.fileStream) {\n this.fileStream.destroy(error);\n }\n callback(error);\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n const logs = readFileSync(this.path, 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map(log => JSON.parse(log));\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters });\n const logs = (allLogs?.logs?.filter(log => log?.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/file/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { WriteStream } from 'node:fs';\nimport { createWriteStream, existsSync, readFileSync } from 'node:fs';\nimport { LoggerTransport } from '@mastra/core/logger';\nimport type { BaseLogMessage, LogLevel } from '@mastra/core/logger';\n\nexport class FileTransport extends LoggerTransport {\n path: string;\n fileStream: WriteStream;\n constructor({ path }: { path: string }) {\n super({ objectMode: true });\n this.path = path;\n\n if (!existsSync(this.path)) {\n console.info(this.path);\n throw new Error('File path does not exist');\n }\n\n this.fileStream = createWriteStream(this.path, { flags: 'a' });\n }\n\n _transform(chunk: any, _encoding: string, callback: (error: Error | null, chunk: any) => void) {\n try {\n this.fileStream.write(chunk);\n } catch (error) {\n console.error('Error parsing log entry:', error);\n }\n callback(null, chunk);\n }\n\n _flush(callback: Function) {\n // End the file stream when transform stream ends\n this.fileStream.end(() => {\n callback();\n });\n }\n\n _write(chunk: any, encoding?: string, callback?: (error?: Error | null) => void): boolean {\n if (typeof callback === 'function') {\n this._transform(chunk, encoding || 'utf8', callback);\n return true;\n }\n\n this._transform(chunk, encoding || 'utf8', (error: Error | null) => {\n if (error) console.error('Transform error in write:', error);\n });\n return true;\n }\n\n // Clean up resources\n _destroy(error: Error, callback: Function) {\n if (this.fileStream) {\n this.fileStream.destroy(error);\n }\n callback(error);\n }\n\n async listLogs(params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean; // default true\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const {\n fromDate,\n toDate,\n logLevel,\n filters,\n returnPaginationResults: returnPaginationResultsInput,\n page: pageInput,\n perPage: perPageInput,\n } = params || {};\n\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const returnPaginationResults = returnPaginationResultsInput ?? true;\n\n const logs = readFileSync(this.path, 'utf8')\n .split('\\n')\n .filter(Boolean)\n .map(log => JSON.parse(log));\n\n let filteredLogs = logs.filter(record => record !== null && typeof record === 'object');\n\n if (filters) {\n filteredLogs = filteredLogs.filter(log =>\n Object.entries(filters || {}).every(([key, value]) => log[key as keyof BaseLogMessage] === value),\n );\n }\n\n if (logLevel) {\n filteredLogs = filteredLogs.filter(log => log.level === logLevel);\n }\n\n if (fromDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() >= fromDate!.getTime());\n }\n\n if (toDate) {\n filteredLogs = filteredLogs.filter(log => new Date(log.time)?.getTime() <= toDate!.getTime());\n }\n\n if (!returnPaginationResults) {\n return {\n logs: filteredLogs,\n total: filteredLogs.length,\n page,\n perPage: filteredLogs.length,\n hasMore: false,\n };\n }\n\n const total = filteredLogs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = filteredLogs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n\n async listLogsByRunId({\n runId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: pageInput,\n perPage: perPageInput,\n }: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n try {\n const page = pageInput === 0 ? 1 : (pageInput ?? 1);\n const perPage = perPageInput ?? 100;\n const allLogs = await this.listLogs({ fromDate, toDate, logLevel, filters });\n const logs = (allLogs?.logs?.filter(log => log?.runId === runId) || []) as BaseLogMessage[];\n const total = logs.length;\n const resolvedPerPage = perPage || 100;\n const start = (page - 1) * resolvedPerPage;\n const end = start + resolvedPerPage;\n const paginatedLogs = logs.slice(start, end);\n const hasMore = end < total;\n\n return {\n logs: paginatedLogs,\n total,\n page,\n perPage: resolvedPerPage,\n hasMore,\n };\n } catch (error) {\n console.error('Error getting logs by runId from file:', error);\n return {\n logs: [],\n total: 0,\n page: 0,\n perPage: 0,\n hasMore: false,\n };\n }\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -10,10 +10,15 @@ var pino__default = /*#__PURE__*/_interopDefault(pino);
10
10
  var pretty__default = /*#__PURE__*/_interopDefault(pretty);
11
11
 
12
12
  // src/pino.ts
13
- var PinoLogger = class extends logger.MastraLogger {
13
+ var PinoLogger = class _PinoLogger extends logger.MastraLogger {
14
14
  logger;
15
15
  constructor(options = {}) {
16
16
  super(options);
17
+ const internalOptions = options;
18
+ if (internalOptions._logger) {
19
+ this.logger = internalOptions._logger;
20
+ return;
21
+ }
17
22
  let prettyStream = void 0;
18
23
  if (!options.overrideDefaultTransports) {
19
24
  prettyStream = pretty__default.default({
@@ -44,6 +49,38 @@ var PinoLogger = class extends logger.MastraLogger {
44
49
  ])
45
50
  );
46
51
  }
52
+ /**
53
+ * Creates a child logger with additional bound context.
54
+ * All logs from the child logger will include the bound context.
55
+ *
56
+ * @param bindings - Key-value pairs to include in all logs from this child logger
57
+ * @returns A new PinoLogger instance with the bound context
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const baseLogger = new PinoLogger({ name: 'MyApp' });
62
+ *
63
+ * // Create module-scoped logger
64
+ * const serviceLogger = baseLogger.child({ module: 'UserService' });
65
+ * serviceLogger.info('User created', { userId: '123' });
66
+ * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }
67
+ *
68
+ * // Create request-scoped logger
69
+ * const requestLogger = baseLogger.child({ requestId: req.id });
70
+ * requestLogger.error('Request failed', { err: error });
71
+ * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }
72
+ * ```
73
+ */
74
+ child(bindings) {
75
+ const childPino = this.logger.child(bindings);
76
+ const childOptions = {
77
+ name: this.name,
78
+ level: this.level,
79
+ transports: Object.fromEntries(this.transports),
80
+ _logger: childPino
81
+ };
82
+ return new _PinoLogger(childOptions);
83
+ }
47
84
  debug(message, args = {}) {
48
85
  this.logger.debug(args, message);
49
86
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pino.ts"],"names":["MastraLogger","pretty","pino","LogLevel"],"mappings":";;;;;;;;;;;;AASO,IAAM,UAAA,GAAN,cAAyBA,mBAAA,CAAa;AAAA,EACjC,MAAA;AAAA,EAEV,WAAA,CACE,OAAA,GAMI,EAAC,EACL;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAI,YAAA,GAAsD,MAAA;AAC1D,IAAA,IAAI,CAAC,QAAQ,yBAAA,EAA2B;AACtC,MAAA,YAAA,GAAeC,uBAAA,CAAO;AAAA,QACpB,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,MAAA,EAAQ,cAAA;AAAA,QACR,eAAA,EAAiB,IAAA;AAAA,QACjB,aAAA,EAAe,cAAA;AAAA,QACf,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,gBAAgB,CAAC,GAAG,KAAK,aAAA,EAAc,CAAE,SAAS,CAAA;AACxD,IAAA,IAAA,CAAK,MAAA,GAASC,qBAAA;AAAA,MACZ;AAAA,QACE,IAAA,EAAM,QAAQ,IAAA,IAAQ,KAAA;AAAA,QACtB,KAAA,EAAO,OAAA,CAAQ,KAAA,IAASC,eAAA,CAAS,IAAA;AAAA,QACjC,YAAY,OAAA,CAAQ;AAAA,OACtB;AAAA,MACA,OAAA,CAAQ,yBAAA,GACJ,OAAA,EAAS,UAAA,EAAY,OAAA,GACrB,cAAc,MAAA,KAAW,CAAA,GACvB,YAAA,GACAD,qBAAA,CAAK,WAAA,CAAY;AAAA,QACf,GAAG,aAAA,CAAc,GAAA,CAAI,CAAC,GAAG,SAAS,CAAA,MAAO;AAAA,UACvC,MAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAO,OAAA,CAAQ,KAAA,IAASC,eAAA,CAAS;AAAA,SACnC,CAAE,CAAA;AAAA,QACF;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,KAAA,EAAO,OAAA,CAAQ,KAAA,IAASA,eAAA,CAAS;AAAA;AACnC,OACD;AAAA,KACT;AAAA,EACF;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC3D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,EAChC;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC3D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACjC;AACF","file":"index.cjs","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n } = {},\n ) {\n super(options);\n\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n {\n stream: prettyStream!,\n level: options.level || LogLevel.INFO,\n },\n ]),\n );\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/pino.ts"],"names":["MastraLogger","pretty","pino","LogLevel"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n}\n\ninterface PinoLoggerInternalOptions extends PinoLoggerOptions {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger;\n}\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(options: PinoLoggerOptions = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n {\n stream: prettyStream!,\n level: options.level || LogLevel.INFO,\n },\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { PinoLogger } from './pino.js';
2
- export type { LogLevel } from './pino.js';
2
+ export type { LogLevel, PinoLoggerOptions } from './pino.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC"}
package/dist/index.js CHANGED
@@ -3,10 +3,15 @@ import pino from 'pino';
3
3
  import pretty from 'pino-pretty';
4
4
 
5
5
  // src/pino.ts
6
- var PinoLogger = class extends MastraLogger {
6
+ var PinoLogger = class _PinoLogger extends MastraLogger {
7
7
  logger;
8
8
  constructor(options = {}) {
9
9
  super(options);
10
+ const internalOptions = options;
11
+ if (internalOptions._logger) {
12
+ this.logger = internalOptions._logger;
13
+ return;
14
+ }
10
15
  let prettyStream = void 0;
11
16
  if (!options.overrideDefaultTransports) {
12
17
  prettyStream = pretty({
@@ -37,6 +42,38 @@ var PinoLogger = class extends MastraLogger {
37
42
  ])
38
43
  );
39
44
  }
45
+ /**
46
+ * Creates a child logger with additional bound context.
47
+ * All logs from the child logger will include the bound context.
48
+ *
49
+ * @param bindings - Key-value pairs to include in all logs from this child logger
50
+ * @returns A new PinoLogger instance with the bound context
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const baseLogger = new PinoLogger({ name: 'MyApp' });
55
+ *
56
+ * // Create module-scoped logger
57
+ * const serviceLogger = baseLogger.child({ module: 'UserService' });
58
+ * serviceLogger.info('User created', { userId: '123' });
59
+ * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }
60
+ *
61
+ * // Create request-scoped logger
62
+ * const requestLogger = baseLogger.child({ requestId: req.id });
63
+ * requestLogger.error('Request failed', { err: error });
64
+ * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }
65
+ * ```
66
+ */
67
+ child(bindings) {
68
+ const childPino = this.logger.child(bindings);
69
+ const childOptions = {
70
+ name: this.name,
71
+ level: this.level,
72
+ transports: Object.fromEntries(this.transports),
73
+ _logger: childPino
74
+ };
75
+ return new _PinoLogger(childOptions);
76
+ }
40
77
  debug(message, args = {}) {
41
78
  this.logger.debug(args, message);
42
79
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pino.ts"],"names":[],"mappings":";;;;;AASO,IAAM,UAAA,GAAN,cAAyB,YAAA,CAAa;AAAA,EACjC,MAAA;AAAA,EAEV,WAAA,CACE,OAAA,GAMI,EAAC,EACL;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAI,YAAA,GAAsD,MAAA;AAC1D,IAAA,IAAI,CAAC,QAAQ,yBAAA,EAA2B;AACtC,MAAA,YAAA,GAAe,MAAA,CAAO;AAAA,QACpB,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,MAAA,EAAQ,cAAA;AAAA,QACR,eAAA,EAAiB,IAAA;AAAA,QACjB,aAAA,EAAe,cAAA;AAAA,QACf,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,gBAAgB,CAAC,GAAG,KAAK,aAAA,EAAc,CAAE,SAAS,CAAA;AACxD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,MACZ;AAAA,QACE,IAAA,EAAM,QAAQ,IAAA,IAAQ,KAAA;AAAA,QACtB,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,QAAA,CAAS,IAAA;AAAA,QACjC,YAAY,OAAA,CAAQ;AAAA,OACtB;AAAA,MACA,OAAA,CAAQ,yBAAA,GACJ,OAAA,EAAS,UAAA,EAAY,OAAA,GACrB,cAAc,MAAA,KAAW,CAAA,GACvB,YAAA,GACA,IAAA,CAAK,WAAA,CAAY;AAAA,QACf,GAAG,aAAA,CAAc,GAAA,CAAI,CAAC,GAAG,SAAS,CAAA,MAAO;AAAA,UACvC,MAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,QAAA,CAAS;AAAA,SACnC,CAAE,CAAA;AAAA,QACF;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,QAAA,CAAS;AAAA;AACnC,OACD;AAAA,KACT;AAAA,EACF;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC3D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,EAChC;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,IAAA,GAA4B,EAAC,EAAS;AAC3D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACjC;AACF","file":"index.js","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(\n options: {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n } = {},\n ) {\n super(options);\n\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n {\n stream: prettyStream!,\n level: options.level || LogLevel.INFO,\n },\n ]),\n );\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/pino.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { LoggerTransport } from '@mastra/core/logger';\nimport { LogLevel, MastraLogger } from '@mastra/core/logger';\nimport pino from 'pino';\nimport pretty from 'pino-pretty';\n\ntype TransportMap = Record<string, LoggerTransport>;\n\nexport type { LogLevel } from '@mastra/core/logger';\n\nexport interface PinoLoggerOptions {\n name?: string;\n level?: LogLevel;\n transports?: TransportMap;\n overrideDefaultTransports?: boolean;\n formatters?: pino.LoggerOptions['formatters'];\n}\n\ninterface PinoLoggerInternalOptions extends PinoLoggerOptions {\n /** @internal Used internally for child loggers */\n _logger?: pino.Logger;\n}\n\nexport class PinoLogger extends MastraLogger {\n protected logger: pino.Logger;\n\n constructor(options: PinoLoggerOptions = {}) {\n super(options);\n\n const internalOptions = options as PinoLoggerInternalOptions;\n\n // If an existing pino logger is provided (for child loggers), use it directly\n if (internalOptions._logger) {\n this.logger = internalOptions._logger;\n return;\n }\n\n let prettyStream: ReturnType<typeof pretty> | undefined = undefined;\n if (!options.overrideDefaultTransports) {\n prettyStream = pretty({\n colorize: true,\n levelFirst: true,\n ignore: 'pid,hostname',\n colorizeObjects: true,\n translateTime: 'SYS:standard',\n singleLine: false,\n });\n }\n\n const transportsAry = [...this.getTransports().entries()];\n this.logger = pino(\n {\n name: options.name || 'app',\n level: options.level || LogLevel.INFO,\n formatters: options.formatters,\n },\n options.overrideDefaultTransports\n ? options?.transports?.default\n : transportsAry.length === 0\n ? prettyStream\n : pino.multistream([\n ...transportsAry.map(([, transport]) => ({\n stream: transport,\n level: options.level || LogLevel.INFO,\n })),\n {\n stream: prettyStream!,\n level: options.level || LogLevel.INFO,\n },\n ]),\n );\n }\n\n /**\n * Creates a child logger with additional bound context.\n * All logs from the child logger will include the bound context.\n *\n * @param bindings - Key-value pairs to include in all logs from this child logger\n * @returns A new PinoLogger instance with the bound context\n *\n * @example\n * ```typescript\n * const baseLogger = new PinoLogger({ name: 'MyApp' });\n *\n * // Create module-scoped logger\n * const serviceLogger = baseLogger.child({ module: 'UserService' });\n * serviceLogger.info('User created', { userId: '123' });\n * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }\n *\n * // Create request-scoped logger\n * const requestLogger = baseLogger.child({ requestId: req.id });\n * requestLogger.error('Request failed', { err: error });\n * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }\n * ```\n */\n child(bindings: Record<string, unknown>): PinoLogger {\n const childPino = this.logger.child(bindings);\n const childOptions: PinoLoggerInternalOptions = {\n name: this.name,\n level: this.level,\n transports: Object.fromEntries(this.transports),\n _logger: childPino,\n };\n return new PinoLogger(childOptions);\n }\n\n debug(message: string, args: Record<string, any> = {}): void {\n this.logger.debug(args, message);\n }\n\n info(message: string, args: Record<string, any> = {}): void {\n this.logger.info(args, message);\n }\n\n warn(message: string, args: Record<string, any> = {}): void {\n this.logger.warn(args, message);\n }\n\n error(message: string, args: Record<string, any> = {}): void {\n this.logger.error(args, message);\n }\n}\n"]}
package/dist/pino.d.ts CHANGED
@@ -3,15 +3,39 @@ import { LogLevel, MastraLogger } from '@mastra/core/logger';
3
3
  import pino from 'pino';
4
4
  type TransportMap = Record<string, LoggerTransport>;
5
5
  export type { LogLevel } from '@mastra/core/logger';
6
+ export interface PinoLoggerOptions {
7
+ name?: string;
8
+ level?: LogLevel;
9
+ transports?: TransportMap;
10
+ overrideDefaultTransports?: boolean;
11
+ formatters?: pino.LoggerOptions['formatters'];
12
+ }
6
13
  export declare class PinoLogger extends MastraLogger {
7
14
  protected logger: pino.Logger;
8
- constructor(options?: {
9
- name?: string;
10
- level?: LogLevel;
11
- transports?: TransportMap;
12
- overrideDefaultTransports?: boolean;
13
- formatters?: pino.LoggerOptions['formatters'];
14
- });
15
+ constructor(options?: PinoLoggerOptions);
16
+ /**
17
+ * Creates a child logger with additional bound context.
18
+ * All logs from the child logger will include the bound context.
19
+ *
20
+ * @param bindings - Key-value pairs to include in all logs from this child logger
21
+ * @returns A new PinoLogger instance with the bound context
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const baseLogger = new PinoLogger({ name: 'MyApp' });
26
+ *
27
+ * // Create module-scoped logger
28
+ * const serviceLogger = baseLogger.child({ module: 'UserService' });
29
+ * serviceLogger.info('User created', { userId: '123' });
30
+ * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }
31
+ *
32
+ * // Create request-scoped logger
33
+ * const requestLogger = baseLogger.child({ requestId: req.id });
34
+ * requestLogger.error('Request failed', { err: error });
35
+ * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }
36
+ * ```
37
+ */
38
+ child(bindings: Record<string, unknown>): PinoLogger;
15
39
  debug(message: string, args?: Record<string, any>): void;
16
40
  info(message: string, args?: Record<string, any>): void;
17
41
  warn(message: string, args?: Record<string, any>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;gBAG5B,OAAO,GAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,QAAQ,CAAC;QACjB,UAAU,CAAC,EAAE,YAAY,CAAC;QAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KAC1C;IAwCR,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;CAG7D"}
1
+ {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;CAC/C;AAOD,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;gBAElB,OAAO,GAAE,iBAAsB;IA+C3C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU;IAWpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;CAG7D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/loggers",
3
- "version": "1.0.0-beta.0",
3
+ "version": "1.0.0-beta.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "files": [
@@ -65,19 +65,21 @@
65
65
  "author": "",
66
66
  "license": "Apache-2.0",
67
67
  "dependencies": {
68
- "pino": "^9.7.0",
68
+ "pino": "^10.1.0",
69
69
  "pino-pretty": "^13.0.0"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@microsoft/api-extractor": "^7.52.8",
73
- "@types/node": "^20.19.0",
73
+ "@types/node": "22.13.17",
74
+ "@vitest/coverage-v8": "4.0.12",
75
+ "@vitest/ui": "4.0.12",
74
76
  "eslint": "^9.37.0",
75
77
  "tsup": "^8.5.0",
76
78
  "typescript": "^5.8.3",
77
- "vitest": "^3.2.4",
79
+ "vitest": "4.0.12",
80
+ "@internal/types-builder": "0.0.28",
78
81
  "@internal/lint": "0.0.53",
79
- "@mastra/core": "1.0.0-beta.0",
80
- "@internal/types-builder": "0.0.28"
82
+ "@mastra/core": "1.0.0-beta.7"
81
83
  },
82
84
  "peerDependencies": {
83
85
  "@mastra/core": ">=1.0.0-0 <2.0.0-0"