@metamask/logger
Version:
A lightweight logging package using @metamask/streams
1 lines • 4.01 kB
Source Map (JSON)
{"version":3,"file":"stream.cjs","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":";;;AACA,+CAA0C;AAE1C,2CAAwD;AAExD,kDAAiD;AAQjD;;;;;GAKG;AACI,MAAM,IAAI,GAAG,CAAC,KAAe,EAAU,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,8BAAe,CAAC,CAAC,CAAC,KAAK,CAC9C,CAAC;AAHS,QAAA,IAAI,QAGb;AACJ,MAAM,CAAC,YAAI,CAAC,CAAC;AAEb;;;;;GAKG;AACI,MAAM,MAAM,GAAG,CAAC,eAAuB,EAAY,EAAE,CAC1D,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC1C,KAAK,KAAK,8BAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAClC,CAAC;AAHH,QAAA,MAAM,UAGH;AAChB,MAAM,CAAC,cAAM,CAAC,CAAC;AAEf;;;;;GAKG;AACI,MAAM,eAAe,GAAG,CAC7B,OAAuB,EACA,EAAE,CACzB,IAAA,6BAAqB,EAAC,OAAO,CAAC;IAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;IACzB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;IAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAP3B,QAAA,eAAe,mBAOY;AACxC,MAAM,CAAC,uBAAe,CAAC,CAAC;AAExB;;;;;;GAMG;AACI,MAAM,eAAe,GAAG,CAC7B,OAAuB,EACI,EAAE,CAAC,CAAC,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;AAF7C,QAAA,eAAe,mBAE8B;AAC1D,MAAM,CAAC,uBAAe,CAAC,CAAC;AAExB;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAC/B,MAA2C,EAI3C,EAAE;IACF,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,IAAA,eAAK,EACxC,MAAM,EACN,uBAAe,EACf,uBAAe,CAIhB,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC,CAAC;AAfW,QAAA,iBAAiB,qBAe5B;AACF,MAAM,CAAC,yBAAiB,CAAC,CAAC","sourcesContent":["import type { JsonRpcCall, JsonRpcMessage } from '@metamask/kernel-utils';\nimport { split } from '@metamask/streams';\nimport type { DuplexStream } from '@metamask/streams';\nimport { isJsonRpcNotification } from '@metamask/utils';\n\nimport { TOKEN_UNDEFINED } from './constants.ts';\nimport type { LogEntry } from './types.ts';\n\nexport type LogMessage = JsonRpcCall & {\n method: 'notify';\n params: ['logger', string];\n};\n\n/**\n * Serializes a log entry.\n *\n * @param entry - The log entry to serialize.\n * @returns The serialized log entry.\n */\nexport const lser = (entry: LogEntry): string =>\n JSON.stringify(entry, (_key, value) =>\n value === undefined ? TOKEN_UNDEFINED : value,\n );\nharden(lser);\n\n/**\n * Deserializes a log entry.\n *\n * @param serializedEntry - The serialized log entry to deserialize.\n * @returns The deserialized log entry.\n */\nexport const lunser = (serializedEntry: string): LogEntry =>\n JSON.parse(serializedEntry, (_key, value) =>\n value === TOKEN_UNDEFINED ? undefined : value,\n ) as LogEntry;\nharden(lunser);\n\n/**\n * Checks if a message is a logger message.\n *\n * @param message - The message to check.\n * @returns Whether the message is a logger message.\n */\nexport const isLoggerMessage = (\n message: JsonRpcMessage,\n): message is LogMessage =>\n isJsonRpcNotification(message) &&\n Array.isArray(message.params) &&\n message.params.length > 0 &&\n message.params[0] === 'logger' &&\n typeof message.params[1] === 'string';\nharden(isLoggerMessage);\n\n/**\n * Checks if a message is a kernel message. A kernel message is any message\n * which is not a logger message.\n *\n * @param message - The message to check.\n * @returns Whether the message is a kernel message.\n */\nexport const isKernelMessage = (\n message: JsonRpcMessage,\n): message is JsonRpcMessage => !isLoggerMessage(message);\nharden(isKernelMessage);\n\n/**\n * Splits a stream into a kernel stream and a logger stream.\n *\n * @param stream - The stream to split.\n * @returns An object containing the kernel stream and the logger stream.\n */\nexport const splitLoggerStream = <Write>(\n stream: DuplexStream<JsonRpcMessage, Write>,\n): {\n kernelStream: DuplexStream<JsonRpcMessage, Write>;\n loggerStream: DuplexStream<JsonRpcMessage, Write>;\n} => {\n const [kernelStream, loggerStream] = split(\n stream,\n isKernelMessage,\n isLoggerMessage,\n ) as [\n DuplexStream<JsonRpcMessage, Write>,\n DuplexStream<JsonRpcMessage, Write>,\n ];\n return { kernelStream, loggerStream };\n};\nharden(splitLoggerStream);\n"]}