@lssm/lib.logger 0.0.0-canary-20251212230121 → 0.0.0-canary-20251215220103
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/dist/context.browser.mjs +1 -0
- package/dist/context.mjs +1 -1
- package/dist/context.node.mjs +1 -0
- package/dist/elysia-plugin.mjs +1 -1
- package/dist/index.browser.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/logger.browser.mjs +1 -0
- package/dist/logger.mjs +1 -1
- package/dist/logger.node.mjs +1 -0
- package/dist/tracer.browser.mjs +1 -0
- package/dist/tracer.mjs +1 -1
- package/dist/tracer.node.mjs +1 -0
- package/package.json +19 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"zone.js";const e=globalThis.Zone,t=`__lssm_log_context_data__`;function n(){if(e)return e.current.get(t)}var r=class r{static instance;static fallbackCounter=0;static getInstance(){return r.instance||=new r,r.instance}run(n,r){let i={context:{...n},trace:this.getCurrentTrace()};return e?e.current.fork({name:`log-context`,properties:{[t]:i}}).run(r):r()}extend(e,t){let n={...this.getContext(),...e};return this.run(n,t)}set(e,t){let r=n();r&&(r.context[e]=t)}get(e){return n()?.context?.[e]}getContext(){return n()?.context||{}}setTrace(e){let t=n();t&&(t.trace=e)}getCurrentTrace(){return n()?.trace}generateId(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():(r.fallbackCounter+=1,`log-${r.fallbackCounter}`)}};export{r as LogContext};
|
package/dist/context.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export{};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AsyncLocalStorage as e}from"node:async_hooks";var t=class t{static instance;storage;constructor(){this.storage=new e}static getInstance(){return t.instance||=new t,t.instance}run(e,t){let n={context:{...e},trace:this.getCurrentTrace()};return this.storage.run(n,t)}extend(e,t){let n={...this.getContext(),...e};return this.run(n,t)}set(e,t){let n=this.storage.getStore();n&&(n.context[e]=t)}get(e){return this.storage.getStore()?.context?.[e]}getContext(){return this.storage.getStore()?.context||{}}setTrace(e){let t=this.storage.getStore();t&&(t.trace=e)}getCurrentTrace(){return this.storage.getStore()?.trace}generateId(){return crypto.randomUUID()}};export{t as LogContext};
|
package/dist/elysia-plugin.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LogContext as e}from"./context.mjs";import{Logger as t}from"./logger.mjs";import"elysia";function n(n={}){let{logger:r=new t,logRequests:i=!0,logResponses:a=!0,excludePaths:o=[`/health`,`/metrics`]}=n,s=e.getInstance();return function(e){return e.derive(e=>{let{request:t,path:n}=e;if(o.some(e=>n.startsWith(e)))return{logger:r};let a=new URL(t.url),c={requestId:s.generateId(),method:t.method,url:t.url,path:a.pathname,userAgent:t.headers.get(`user-agent`)||void 0,timestamp:new Date().toISOString()},l=performance.now();return s.run(c,()=>{i&&r.info(`→ ${t.method} ${n}`,{method:t.method,path:n,userAgent:c.userAgent,requestId:c.requestId})}),{logger:r,requestContext:c,startTime:l}}).onAfterHandle(e=>{let{request:t,startTime:n,requestContext:r,logger:i}=e;if(!n||!r)return;let o=performance.now()-n,s=new URL(t.url).pathname;a&&i.info(`← 200 ${t.method} ${s}`,{method:t.method,path:s,duration:`${o.toFixed(2)}ms`,requestId:r.requestId})}).onError(e=>{let{request:t,error:n,code:r,startTime:i,requestContext:a,logger:o}=e;if(!i||!a)return;let s=performance.now()-i,c=new URL(t.url).pathname;o?.error(`✖ ${r} ${t.method} ${c}`,{method:t.method,path:c,error:n?.toString?.()||`Unknown error`,code:r,duration:`${s.toFixed(2)}ms`,requestId:a.requestId})}).derive(()=>({logInfo:(e,t)=>{r.info(e,t)},logError:(e,t,n)=>{r.error(e,n,t)},traceOperation:async(e,t)=>r.trace({operationType:`custom`,operationName:e,autoTiming:!0},t)}))}}const r=n;export{r as createElysiaLogger,n as elysiaLogger};
|
|
1
|
+
import{LogContext as e}from"./context.node.mjs";import{Logger as t}from"./logger.node.mjs";import"elysia";function n(n={}){let{logger:r=new t,logRequests:i=!0,logResponses:a=!0,excludePaths:o=[`/health`,`/metrics`]}=n,s=e.getInstance();return function(e){return e.derive(e=>{let{request:t,path:n}=e;if(o.some(e=>n.startsWith(e)))return{logger:r};let a=new URL(t.url),c={requestId:s.generateId(),method:t.method,url:t.url,path:a.pathname,userAgent:t.headers.get(`user-agent`)||void 0,timestamp:new Date().toISOString()},l=performance.now();return s.run(c,()=>{i&&r.info(`→ ${t.method} ${n}`,{method:t.method,path:n,userAgent:c.userAgent,requestId:c.requestId})}),{logger:r,requestContext:c,startTime:l}}).onAfterHandle(e=>{let{request:t,startTime:n,requestContext:r,logger:i}=e;if(!n||!r)return;let o=performance.now()-n,s=new URL(t.url).pathname;a&&i.info(`← 200 ${t.method} ${s}`,{method:t.method,path:s,duration:`${o.toFixed(2)}ms`,requestId:r.requestId})}).onError(e=>{let{request:t,error:n,code:r,startTime:i,requestContext:a,logger:o}=e;if(!i||!a)return;let s=performance.now()-i,c=new URL(t.url).pathname;o?.error(`✖ ${r} ${t.method} ${c}`,{method:t.method,path:c,error:n?.toString?.()||`Unknown error`,code:r,duration:`${s.toFixed(2)}ms`,requestId:a.requestId})}).derive(()=>({logInfo:(e,t)=>{r.info(e,t)},logError:(e,t,n)=>{r.error(e,n,t)},traceOperation:async(e,t)=>r.trace({operationType:`custom`,operationName:e,autoTiming:!0},t)}))}}const r=n;export{r as createElysiaLogger,n as elysiaLogger};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LogContext as e}from"./context.browser.mjs";import{LogLevel as t}from"./types.mjs";import{Timer as n}from"./timer.mjs";import{DevFormatter as r,ProductionFormatter as i}from"./formatters.mjs";import{Tracer as a}from"./tracer.browser.mjs";import{Logger as o}from"./logger.browser.mjs";export{r as DevFormatter,e as LogContext,t as LogLevel,o as Logger,i as ProductionFormatter,n as Timer,a as Tracer};
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LogContext as e}from"./context.mjs";import{LogLevel as t}from"./types.mjs";import{Timer as n}from"./timer.mjs";import{Tracer as r}from"./tracer.mjs";import{DevFormatter as i,ProductionFormatter as a}from"./formatters.mjs";import{Logger as o}from"./logger.mjs";import{createElysiaLogger as s,elysiaLogger as c}from"./elysia-plugin.mjs";export{i as DevFormatter,e as LogContext,t as LogLevel,o as Logger,a as ProductionFormatter,n as Timer,r as Tracer,s as createElysiaLogger,c as elysiaLogger};
|
|
1
|
+
import{LogContext as e}from"./context.node.mjs";import{LogLevel as t}from"./types.mjs";import{Timer as n}from"./timer.mjs";import{Tracer as r}from"./tracer.node.mjs";import{DevFormatter as i,ProductionFormatter as a}from"./formatters.mjs";import{Logger as o}from"./logger.node.mjs";import{createElysiaLogger as s,elysiaLogger as c}from"./elysia-plugin.mjs";export{i as DevFormatter,e as LogContext,t as LogLevel,o as Logger,a as ProductionFormatter,n as Timer,r as Tracer,s as createElysiaLogger,c as elysiaLogger};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LogContext as e}from"./context.browser.mjs";import{LogLevel as t}from"./types.mjs";import{TimerManager as n}from"./timer.mjs";import{DevFormatter as r,ProductionFormatter as i}from"./formatters.mjs";import{Tracer as a}from"./tracer.browser.mjs";var o=class o{config;formatter;context;tracer;timerManager;constructor(o){this.config={level:t.INFO,environment:process.env.NODE_ENV||`development`,enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!0,maxContextDepth:10,timestampFormat:`iso`,...o},this.context=e.getInstance(),this.tracer=new a,this.timerManager=new n,this.formatter=this.config.environment===`production`?new i:new r(this.config.enableColors)}traceLog(e,n){this.log(t.TRACE,e,n)}debug(e,n){this.log(t.DEBUG,e,n)}info(e,n){this.log(t.INFO,e,n)}warn(e,n){this.log(t.WARN,e,n)}error(e,n,r){this.log(t.ERROR,e,n,r)}fatal(e,n,r){this.log(t.FATAL,e,n,r)}withContext(e,t){return this.context.run(e,t)}extendContext(e,t){return this.context.extend(e,t)}setContext(e,t){this.context.set(e,t)}getContext(){return this.context.getContext()}trace=async(e,t)=>this.config.enableTracing?this.tracer.trace(e,t):await t();getTraceId(){return this.tracer.getCurrentTrace()?.traceId}startSpan(e){return this.config.enableTracing?this.tracer.startSpan(e):null}finishSpan(e){if(this.config.enableTracing)return this.tracer.finishSpan(e)}addTraceMetadata(e,t){this.config.enableTracing&&this.tracer.addMetadata(e,t)}addTraceTags(...e){this.config.enableTracing&&this.tracer.addTags(...e)}startTimer(e){return this.config.enableTiming?this.timerManager.start(e):null}stopTimer(e){if(this.config.enableTiming)return this.timerManager.stop(e)}getTimer(e){return this.timerManager.get(e)}child(e){let t=new o(this.config);return Object.entries(e).forEach(([e,n])=>{t.setContext(e,n)}),t}setLevel(e){this.config.level=e}setFormatter(e){this.formatter=e}async profile(e,n,r){let i=this.startTimer(`profile-${e}`),a=performance.now();try{let o=await this.tracer.trace({operationType:`custom`,operationName:`profile:${e}`,autoTiming:!0},n),s=performance.now()-a;return i?.stop(),r?.logLevel||t.DEBUG,this.log(t.DEBUG,`Profile: ${e} completed`,{operation:e,duration:`${s.toFixed(2)}ms`,result:r?.logResult?o:`[result hidden]`}),o}catch(t){let n=performance.now()-a;throw i?.stop(),this.error(`Profile: ${e} failed`,{operation:e,duration:`${n.toFixed(2)}ms`,error:t.message},t),t}}logRequest(e,t,n,r){let i=this.getHttpLogLevel(n),a=`${e.toUpperCase()} ${t}${n?` ${n}`:``}`;this.log(i,a,{method:e,url:t,statusCode:n,duration:r?`${r.toFixed(2)}ms`:void 0,type:`http_request`})}async flush(){this.timerManager.clear()}getStats(){return{activeTimers:this.timerManager.getActive().length,activeSpans:this.tracer.getActiveSpans().length,config:{...this.config}}}output(e,n){n>=t.ERROR?console.error(e):console.log(e)}log(e,t,n,r){if(e<this.config.level)return;let i=this.config.enableTracing?this.tracer.getCurrentTrace():void 0,a=this.config.enableContext?this.context.getContext():void 0,o={level:e,message:t,timestamp:new Date,traceId:i?.traceId,parentId:i?.parentId,spanId:i?.spanId,context:a,metadata:n,error:r,tags:i?.tags};i?.metadata?.duration&&(o.duration=i.metadata.duration);let s=this.formatter.format(o);this.output(s,e)}getHttpLogLevel(e){return e?e>=500?t.ERROR:e>=400?t.WARN:t.INFO:t.INFO}};export{o as Logger};
|
package/dist/logger.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Logger as e}from"./logger.node.mjs";export{e as Logger};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LogContext as e}from"./context.node.mjs";import{LogLevel as t}from"./types.mjs";import{TimerManager as n}from"./timer.mjs";import{Tracer as r}from"./tracer.node.mjs";import{DevFormatter as i,ProductionFormatter as a}from"./formatters.mjs";var o=class o{config;formatter;context;tracer;timerManager;constructor(o){this.config={level:t.INFO,environment:process.env.NODE_ENV||`development`,enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!0,maxContextDepth:10,timestampFormat:`iso`,...o},this.context=e.getInstance(),this.tracer=new r,this.timerManager=new n,this.formatter=this.config.environment===`production`?new a:new i(this.config.enableColors)}traceLog(e,n){this.log(t.TRACE,e,n)}debug(e,n){this.log(t.DEBUG,e,n)}info(e,n){this.log(t.INFO,e,n)}warn(e,n){this.log(t.WARN,e,n)}error(e,n,r){this.log(t.ERROR,e,n,r)}fatal(e,n,r){this.log(t.FATAL,e,n,r)}withContext(e,t){return this.context.run(e,t)}extendContext(e,t){return this.context.extend(e,t)}setContext(e,t){this.context.set(e,t)}getContext(){return this.context.getContext()}trace=async(e,t)=>this.config.enableTracing?this.tracer.trace(e,t):await t();getTraceId(){return this.tracer.getCurrentTrace()?.traceId}startSpan(e){return this.config.enableTracing?this.tracer.startSpan(e):null}finishSpan(e){if(this.config.enableTracing)return this.tracer.finishSpan(e)}addTraceMetadata(e,t){this.config.enableTracing&&this.tracer.addMetadata(e,t)}addTraceTags(...e){this.config.enableTracing&&this.tracer.addTags(...e)}startTimer(e){return this.config.enableTiming?this.timerManager.start(e):null}stopTimer(e){if(this.config.enableTiming)return this.timerManager.stop(e)}getTimer(e){return this.timerManager.get(e)}child(e){let t=new o(this.config);return Object.entries(e).forEach(([e,n])=>{t.setContext(e,n)}),t}setLevel(e){this.config.level=e}setFormatter(e){this.formatter=e}async profile(e,n,r){let i=this.startTimer(`profile-${e}`),a=performance.now();try{let o=await this.tracer.trace({operationType:`custom`,operationName:`profile:${e}`,autoTiming:!0},n),s=performance.now()-a;i?.stop();let c=r?.logLevel||t.DEBUG;return this.log(c,`Profile: ${e} completed`,{operation:e,duration:`${s.toFixed(2)}ms`,result:r?.logResult?o:`[result hidden]`}),o}catch(t){let n=performance.now()-a;throw i?.stop(),this.error(`Profile: ${e} failed`,{operation:e,duration:`${n.toFixed(2)}ms`,error:t.message},t),t}}logRequest(e,t,n,r){let i=this.getHttpLogLevel(n),a=`${e.toUpperCase()} ${t}${n?` ${n}`:``}`;this.log(i,a,{method:e,url:t,statusCode:n,duration:r?`${r.toFixed(2)}ms`:void 0,type:`http_request`})}async flush(){this.timerManager.clear()}getStats(){return{activeTimers:this.timerManager.getActive().length,activeSpans:this.tracer.getActiveSpans().length,config:{...this.config}}}output(e,n){n>=t.ERROR?console.error(e):console.log(e)}log(e,t,n,r){if(e<this.config.level)return;let i=this.config.enableTracing?this.tracer.getCurrentTrace():void 0,a=this.config.enableContext?this.context.getContext():void 0,o={level:e,message:t,timestamp:new Date,traceId:i?.traceId,parentId:i?.parentId,spanId:i?.spanId,context:a,metadata:n,error:r,tags:i?.tags};i?.metadata?.duration&&(o.duration=i.metadata.duration);let s=this.formatter.format(o);this.output(s,e)}getHttpLogLevel(e){return e?e>=500?t.ERROR:e>=400?t.WARN:t.INFO:t.INFO}};export{o as Logger};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LogContext as e}from"./context.browser.mjs";import{Timer as t}from"./timer.mjs";var n=class{context;activeSpans=new Map;constructor(){this.context=e.getInstance()}startSpan(e){let t=this.context.getCurrentTrace(),n={traceId:t?.traceId||this.generateTraceId(),parentId:t?.spanId,spanId:this.generateSpanId(),operationType:e.operationType,operationName:e.operationName,startTime:performance.now(),metadata:{...e.metadata},tags:[...e.tags||[]]};return this.activeSpans.set(n.spanId,n),this.context.setTrace(n),n}finishSpan(e){let t=this.activeSpans.get(e);if(!t)return;let n=performance.now()-t.startTime;if(this.activeSpans.delete(e),this.context.getCurrentTrace()?.spanId===e&&t.parentId){let e=this.findSpanById(t.parentId);e&&this.context.setTrace(e)}return n}async trace(e,n){let r=this.startSpan(e),i=e.autoTiming===!1?void 0:new t(`trace-${r.spanId}`);try{let e=await n(),t=this.finishSpan(r.spanId);return i&&i.stop(),t!==void 0&&(r.metadata.duration=t),e}catch(e){r.metadata.error={name:e.name||`Unknown`,message:e.message||`Unknown error`,stack:e.stack};let t=this.finishSpan(r.spanId);throw r.metadata.duration=t,i&&i.stop(),e}}addMetadata(e,t){let n=this.context.getCurrentTrace();n&&(n.metadata[e]=t)}addTags(...e){let t=this.context.getCurrentTrace();t&&t.tags.push(...e)}getCurrentTrace(){return this.context.getCurrentTrace()}getActiveSpans(){return Array.from(this.activeSpans.values())}findSpanById(e){return this.activeSpans.get(e)}generateTraceId(){return crypto.randomUUID().replace(/-/g,``)}generateSpanId(){return crypto.randomUUID().replace(/-/g,``).substring(0,16)}};export{n as Tracer};
|
package/dist/tracer.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Tracer as e}from"./tracer.node.mjs";export{e as Tracer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LogContext as e}from"./context.node.mjs";import{Timer as t}from"./timer.mjs";var n=class{context;activeSpans=new Map;constructor(){this.context=e.getInstance()}startSpan(e){let t=this.context.getCurrentTrace(),n={traceId:t?.traceId||this.generateTraceId(),parentId:t?.spanId,spanId:this.generateSpanId(),operationType:e.operationType,operationName:e.operationName,startTime:performance.now(),metadata:{...e.metadata},tags:[...e.tags||[]]};return this.activeSpans.set(n.spanId,n),this.context.setTrace(n),n}finishSpan(e){let t=this.activeSpans.get(e);if(!t)return;let n=performance.now()-t.startTime;if(this.activeSpans.delete(e),this.context.getCurrentTrace()?.spanId===e&&t.parentId){let e=this.findSpanById(t.parentId);e&&this.context.setTrace(e)}return n}async trace(e,n){let r=this.startSpan(e),i=e.autoTiming===!1?void 0:new t(`trace-${r.spanId}`);try{let e=await n(),t=this.finishSpan(r.spanId);return i&&i.stop(),t!==void 0&&(r.metadata.duration=t),e}catch(e){r.metadata.error={name:e.name||`Unknown`,message:e.message||`Unknown error`,stack:e.stack};let t=this.finishSpan(r.spanId);throw r.metadata.duration=t,i&&i.stop(),e}}addMetadata(e,t){let n=this.context.getCurrentTrace();n&&(n.metadata[e]=t)}addTags(...e){let t=this.context.getCurrentTrace();t&&t.tags.push(...e)}getCurrentTrace(){return this.context.getCurrentTrace()}getActiveSpans(){return Array.from(this.activeSpans.values())}findSpanById(e){return this.activeSpans.get(e)}generateTraceId(){return crypto.randomUUID().replace(/-/g,``)}generateSpanId(){return crypto.randomUUID().replace(/-/g,``).substring(0,16)}};export{n as Tracer};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/lib.logger",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251215220103",
|
|
4
4
|
"description": "Comprehensive logging library optimized for Bun with ElysiaJS integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"logging",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@lssm/tool.typescript": "workspace:*",
|
|
26
26
|
"@lssm/tool.tsdown": "workspace:*",
|
|
27
|
-
"tsdown": "^0.17.
|
|
27
|
+
"tsdown": "^0.17.4",
|
|
28
28
|
"typescript": "^5.9.3"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
@@ -35,6 +35,9 @@
|
|
|
35
35
|
"optional": true
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"zone.js": "^0.15.0"
|
|
40
|
+
},
|
|
38
41
|
"main": "./dist/index.mjs",
|
|
39
42
|
"types": "./dist/index.d.mts",
|
|
40
43
|
"files": [
|
|
@@ -44,11 +47,18 @@
|
|
|
44
47
|
"exports": {
|
|
45
48
|
".": "./src/index.ts",
|
|
46
49
|
"./context": "./src/context.ts",
|
|
50
|
+
"./context.browser": "./src/context.browser.ts",
|
|
51
|
+
"./context.node": "./src/context.node.ts",
|
|
47
52
|
"./elysia-plugin": "./src/elysia-plugin.ts",
|
|
48
53
|
"./formatters": "./src/formatters.ts",
|
|
54
|
+
"./index.browser": "./src/index.browser.ts",
|
|
49
55
|
"./logger": "./src/logger.ts",
|
|
56
|
+
"./logger.browser": "./src/logger.browser.ts",
|
|
57
|
+
"./logger.node": "./src/logger.node.ts",
|
|
50
58
|
"./timer": "./src/timer.ts",
|
|
51
59
|
"./tracer": "./src/tracer.ts",
|
|
60
|
+
"./tracer.browser": "./src/tracer.browser.ts",
|
|
61
|
+
"./tracer.node": "./src/tracer.node.ts",
|
|
52
62
|
"./types": "./src/types.ts",
|
|
53
63
|
"./*": "./*"
|
|
54
64
|
},
|
|
@@ -58,11 +68,18 @@
|
|
|
58
68
|
"exports": {
|
|
59
69
|
".": "./dist/index.mjs",
|
|
60
70
|
"./context": "./dist/context.mjs",
|
|
71
|
+
"./context.browser": "./dist/context.browser.mjs",
|
|
72
|
+
"./context.node": "./dist/context.node.mjs",
|
|
61
73
|
"./elysia-plugin": "./dist/elysia-plugin.mjs",
|
|
62
74
|
"./formatters": "./dist/formatters.mjs",
|
|
75
|
+
"./index.browser": "./dist/index.browser.mjs",
|
|
63
76
|
"./logger": "./dist/logger.mjs",
|
|
77
|
+
"./logger.browser": "./dist/logger.browser.mjs",
|
|
78
|
+
"./logger.node": "./dist/logger.node.mjs",
|
|
64
79
|
"./timer": "./dist/timer.mjs",
|
|
65
80
|
"./tracer": "./dist/tracer.mjs",
|
|
81
|
+
"./tracer.browser": "./dist/tracer.browser.mjs",
|
|
82
|
+
"./tracer.node": "./dist/tracer.node.mjs",
|
|
66
83
|
"./types": "./dist/types.mjs",
|
|
67
84
|
"./*": "./*"
|
|
68
85
|
}
|