UNPKG

@embrace-io/web-sdk

Version:
1 lines 2.32 kB
{"version":3,"file":"createSafeProxy.cjs","names":[],"sources":["../../../src/utils/createSafeProxy/createSafeProxy.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\n\n/**\n * Creates a proxy that wraps all method calls in try-catch.\n * On error, logs via diag and returns the NoOp manager's value.\n *\n * @param target - The object to wrap (typically a ProxyManager)\n * @param noOpFallback - A NoOp implementation to get fallback return values\n * @param diag - Logger for error reporting\n * @param excludeMethods - Methods to exclude from wrapping (e.g., internal methods)\n */\nexport function createSafeProxy<T extends object, F extends object>(\n target: T,\n noOpFallback: F,\n diag: DiagLogger,\n excludeMethods: Set<string> = new Set(),\n): T {\n return new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n\n if (typeof value !== 'function') {\n return value;\n }\n\n if (excludeMethods.has(prop as string)) {\n return value;\n }\n\n return (...args: unknown[]) => {\n try {\n return (value as (...args: unknown[]) => unknown).apply(obj, args);\n } catch (e) {\n const message = e instanceof Error ? e.message : 'Unknown error';\n diag.error(`${String(prop)}: ${message}`);\n\n // Get fallback from NoOp manager\n const fallbackMethod = (noOpFallback as Record<string, unknown>)[\n prop as string\n ];\n if (typeof fallbackMethod === 'function') {\n return (fallbackMethod as (...args: unknown[]) => unknown).apply(\n noOpFallback,\n args,\n );\n }\n return undefined;\n }\n };\n },\n });\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,gBACd,QACA,cACA,MACA,iCAA8B,IAAI,IAAI,GACnC;CACH,OAAO,IAAI,MAAM,QAAQ,EACvB,IAAI,KAAK,MAAM,UAAU;EACvB,MAAM,QAAQ,QAAQ,IAAI,KAAK,MAAM,QAAQ;EAE7C,IAAI,OAAO,UAAU,YACnB,OAAO;EAGT,IAAI,eAAe,IAAI,IAAc,GACnC,OAAO;EAGT,QAAQ,GAAG,SAAoB;GAC7B,IAAI;IACF,OAAQ,MAA0C,MAAM,KAAK,IAAI;GACnE,SAAS,GAAG;IACV,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU;IACjD,KAAK,MAAM,GAAG,OAAO,IAAI,EAAE,IAAI,SAAS;IAGxC,MAAM,iBAAkB,aACtB;IAEF,IAAI,OAAO,mBAAmB,YAC5B,OAAQ,eAAmD,MACzD,cACA,IACF;IAEF;GACF;EACF;CACF,EACF,CAAC;AACH"}