UNPKG

@metamask/multichain-account-service

Version:
1 lines 3.39 kB
{"version":3,"file":"perf.mjs","sourceRoot":"","sources":["../../src/analytics/perf.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAkB;AAC9D,OAAO,EAAE,GAAG,EAAE,oBAAgB;AAE9B,MAAM,CAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,IAAI,CAAC,OAAqB;IACxC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;IACpB,OAAO,SAAS,IAAI;QAClB,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;QAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,OAAO,KAAK,EACV,OAAqB,EACrB,EAA2C,EACtB,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type {\n TraceCallback,\n TraceContext,\n TraceRequest,\n} from '@metamask/controller-utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport { now } from './timer';\n\nexport const log = createModuleLogger(projectLogger, 'perf');\n\n/**\n * Returns true when DEBUG=metamask:multichain-account-service, DEBUG=metamask:multichain-account-service:perf\n * or a matching glob is set.\n * Re-uses the same enable/disable logic as the rest of the package loggers.\n *\n * @returns True if performance logging is enabled, false otherwise.\n */\nexport function isPerfEnabled(): boolean {\n return projectLogger.enabled || log.enabled;\n}\n\n/**\n * Starts a local performance timer. Returns a `tock` function that, when called,\n * logs the elapsed time for `label`.\n *\n * @example\n * ```ts\n * const tock = tick(request);\n * await createAccounts(...);\n * tock(); // logs: \"${request.name}: 123.45ms\"\n * ```\n *\n * @param request - A trace request object containing the name and optional data.\n * @returns A function that, when called, logs the elapsed time since `tick` was called.\n */\nexport function tick(request: TraceRequest): () => void {\n if (!isPerfEnabled()) {\n return () => undefined;\n }\n\n const start = now();\n return function tock(): void {\n const duration = now() - start;\n\n const context = request.data ? ` (${JSON.stringify(request.data)})` : '';\n\n log(`${request.name}${context}: ${duration.toFixed(2)}ms`);\n };\n}\n\n/**\n * Wraps a trace callback with local performance logging.\n *\n * @param trace - The original trace callback to wrap.\n * @returns A new trace callback that logs the duration of the traced operation.\n */\nexport function withLocalPerfTrace(trace: TraceCallback): TraceCallback {\n return async <ReturnType>(\n request: TraceRequest,\n fn?: (context?: TraceContext) => ReturnType,\n ): Promise<ReturnType> => {\n if (!isPerfEnabled()) {\n return await trace(request, fn);\n }\n\n const tock = tick(request);\n try {\n return await trace(request, fn);\n } finally {\n tock();\n }\n };\n}\n"]}