rian 0.3.0-next.8 → 0.3.0-next.9

Sign up to get free protection for your applications and to get access to all the features.
package/async.js CHANGED
@@ -1 +1,93 @@
1
- const { default:e } = require('node:async_hooks');const { measure:t } = require('rian/utils');const { make:n, parse:r, SAMPLED_FLAG:a } = require('tctx');const { is_sampled:o } = require('tctx');var s={};function l(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.0-next.8"}}var p=new Set,c=new WeakMap;async function i(e){let t=[],n=new Map;for(let[e,r]of p){let a;n.has(r)?a=n.get(r).spans:n.set(r,{scope:r,spans:a=[]}),a.push(e),c.has(r)&&(t.push(...c.get(r)),c.delete(r))}return p.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function u(e,t){return o(t)}var d=new e.AsyncLocalStorage;function m(){return d.getStore()?.[1]||null}function f(e){let r=d.getStore();if(!r)throw Error("TODO");let a=r[0],o=a.scope,s=r[1],l=a.sampler,i=s?.traceparent??a.root_id,u=i?i.child():n(),m="boolean"!=typeof l?l(e,u,o):l;u.flags;let g={id:u,parent:i,start:Date.now(),name:e,events:[],context:{}};m&&p.add([g,o]);let h=e=>d.run([a,h],t,h,e);h.traceparent=u,h.span=f,h.set_context=e=>{"function"!=typeof e?Object.assign(g.context,e):g.context=e(g.context)},h.add_event=(e,t)=>{g.events.push({name:e,timestamp:Date.now(),attributes:t||{}})},h.end=()=>{null==g.end&&(g.end=Date.now())};let w=c.get(o);return h.__add_promise=e=>{w.add(e),e.then((()=>w.delete(e)))},d.run([a,h],(()=>h))}function g(e,t){let n=t?.sampler??u,a={name:e},o={root_id:"string"==typeof t?.traceparent?r(t.traceparent):d.getStore()?.[0].root_id,scope:a,sampler:n};return c.set(a,new Set),{span:e=>d.run([o,null],f,e)}}exports.configure=l;exports.currentSpan=m;exports.report=i;exports.span=f;exports.tracer=g;
1
+ // src/async.ts
2
+ const async_hooks = require('node:async_hooks');
3
+ const { measure } = require('rian/utils');
4
+ const { make, parse, SAMPLED_FLAG } = require('tctx');
5
+
6
+ // src/_internal/index.ts
7
+ const { is_sampled } = require('tctx');
8
+ var resource = {};
9
+ function configure(name, attributes = {}) {
10
+ resource = {
11
+ ...attributes,
12
+ ["service.name"]: name,
13
+ ["telemetry.sdk.name"]: "rian",
14
+ ["telemetry.sdk.version"]: "0.3.0-next.9"
15
+ };
16
+ }
17
+ var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
18
+ async function report(exporter) {
19
+ let ps = [], scopes = /* @__PURE__ */ new Map();
20
+ for (let [span2, scope] of span_buffer) {
21
+ let spans;
22
+ scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
23
+ scope,
24
+ spans: spans = []
25
+ }), spans.push(span2), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
26
+ }
27
+ return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
28
+ resource,
29
+ scopeSpans: scopes.values()
30
+ });
31
+ }
32
+ function defaultSampler(_name, id) {
33
+ return is_sampled(id);
34
+ }
35
+
36
+ // src/async.ts
37
+ var resourceStore = new async_hooks.AsyncLocalStorage();
38
+ function currentSpan() {
39
+ return resourceStore.getStore()?.[1] || null;
40
+ }
41
+ function span(name) {
42
+ let context = resourceStore.getStore();
43
+ if (!context)
44
+ throw Error("TODO");
45
+ let api = context[0], scope = api.scope, current_span = context[1], sampler = api.sampler, parent = current_span?.traceparent ?? api.root_id, id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name, id, scope) : sampler;
46
+ should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
47
+ let span_obj = {
48
+ id,
49
+ parent,
50
+ start: Date.now(),
51
+ name,
52
+ events: [],
53
+ context: {}
54
+ };
55
+ should_sample && span_buffer.add([span_obj, scope]);
56
+ let $ = (cb) => resourceStore.run([api, $], measure, $, cb);
57
+ $.traceparent = id, $.span = span, $.set_context = (ctx) => {
58
+ if (typeof ctx == "function")
59
+ return void (span_obj.context = ctx(span_obj.context));
60
+ Object.assign(span_obj.context, ctx);
61
+ }, $.add_event = (name2, attributes) => {
62
+ span_obj.events.push({
63
+ name: name2,
64
+ timestamp: Date.now(),
65
+ attributes: attributes || {}
66
+ });
67
+ }, $.end = () => {
68
+ span_obj.end == null && (span_obj.end = Date.now());
69
+ };
70
+ let ps = wait_promises.get(scope);
71
+ return $.__add_promise = (p) => {
72
+ ps.add(p), p.then(() => ps.delete(p));
73
+ }, resourceStore.run([api, $], () => $);
74
+ }
75
+ function tracer(name, options) {
76
+ let sampler = options?.sampler ?? defaultSampler, scope = { name }, api = {
77
+ root_id: typeof options?.traceparent == "string" ? parse(options.traceparent) : resourceStore.getStore()?.[0].root_id,
78
+ scope,
79
+ sampler
80
+ };
81
+ return wait_promises.set(scope, /* @__PURE__ */ new Set()), {
82
+ span(name2) {
83
+ return resourceStore.run([api, null], span, name2);
84
+ }
85
+ };
86
+ }
87
+
88
+
89
+ exports.configure = configure;
90
+ exports.currentSpan = currentSpan;
91
+ exports.report = report;
92
+ exports.span = span;
93
+ exports.tracer = tracer;
package/async.mjs CHANGED
@@ -1 +1,93 @@
1
- import{default as e}from"node:async_hooks";import{measure as t}from"rian/utils";import{make as n,parse as r,SAMPLED_FLAG as a}from"tctx";import{is_sampled as o}from"tctx";var s={};function l(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.0-next.8"}}var p=new Set,c=new WeakMap;async function i(e){let t=[],n=new Map;for(let[e,r]of p){let a;n.has(r)?a=n.get(r).spans:n.set(r,{scope:r,spans:a=[]}),a.push(e),c.has(r)&&(t.push(...c.get(r)),c.delete(r))}return p.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function u(e,t){return o(t)}var d=new e.AsyncLocalStorage;function m(){return d.getStore()?.[1]||null}function f(e){let r=d.getStore();if(!r)throw Error("TODO");let a=r[0],o=a.scope,s=r[1],l=a.sampler,i=s?.traceparent??a.root_id,u=i?i.child():n(),m="boolean"!=typeof l?l(e,u,o):l;u.flags;let g={id:u,parent:i,start:Date.now(),name:e,events:[],context:{}};m&&p.add([g,o]);let h=e=>d.run([a,h],t,h,e);h.traceparent=u,h.span=f,h.set_context=e=>{"function"!=typeof e?Object.assign(g.context,e):g.context=e(g.context)},h.add_event=(e,t)=>{g.events.push({name:e,timestamp:Date.now(),attributes:t||{}})},h.end=()=>{null==g.end&&(g.end=Date.now())};let w=c.get(o);return h.__add_promise=e=>{w.add(e),e.then((()=>w.delete(e)))},d.run([a,h],(()=>h))}function g(e,t){let n=t?.sampler??u,a={name:e},o={root_id:"string"==typeof t?.traceparent?r(t.traceparent):d.getStore()?.[0].root_id,scope:a,sampler:n};return c.set(a,new Set),{span:e=>d.run([o,null],f,e)}}export{l as configure,m as currentSpan,i as report,f as span,g as tracer};
1
+ // src/async.ts
2
+ import * as async_hooks from "node:async_hooks";
3
+ import { measure } from "rian/utils";
4
+ import { make, parse, SAMPLED_FLAG } from "tctx";
5
+
6
+ // src/_internal/index.ts
7
+ import { is_sampled } from "tctx";
8
+ var resource = {};
9
+ function configure(name, attributes = {}) {
10
+ resource = {
11
+ ...attributes,
12
+ ["service.name"]: name,
13
+ ["telemetry.sdk.name"]: "rian",
14
+ ["telemetry.sdk.version"]: "0.3.0-next.9"
15
+ };
16
+ }
17
+ var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
18
+ async function report(exporter) {
19
+ let ps = [], scopes = /* @__PURE__ */ new Map();
20
+ for (let [span2, scope] of span_buffer) {
21
+ let spans;
22
+ scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
23
+ scope,
24
+ spans: spans = []
25
+ }), spans.push(span2), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
26
+ }
27
+ return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
28
+ resource,
29
+ scopeSpans: scopes.values()
30
+ });
31
+ }
32
+ function defaultSampler(_name, id) {
33
+ return is_sampled(id);
34
+ }
35
+
36
+ // src/async.ts
37
+ var resourceStore = new async_hooks.AsyncLocalStorage();
38
+ function currentSpan() {
39
+ return resourceStore.getStore()?.[1] || null;
40
+ }
41
+ function span(name) {
42
+ let context = resourceStore.getStore();
43
+ if (!context)
44
+ throw Error("TODO");
45
+ let api = context[0], scope = api.scope, current_span = context[1], sampler = api.sampler, parent = current_span?.traceparent ?? api.root_id, id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name, id, scope) : sampler;
46
+ should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
47
+ let span_obj = {
48
+ id,
49
+ parent,
50
+ start: Date.now(),
51
+ name,
52
+ events: [],
53
+ context: {}
54
+ };
55
+ should_sample && span_buffer.add([span_obj, scope]);
56
+ let $ = (cb) => resourceStore.run([api, $], measure, $, cb);
57
+ $.traceparent = id, $.span = span, $.set_context = (ctx) => {
58
+ if (typeof ctx == "function")
59
+ return void (span_obj.context = ctx(span_obj.context));
60
+ Object.assign(span_obj.context, ctx);
61
+ }, $.add_event = (name2, attributes) => {
62
+ span_obj.events.push({
63
+ name: name2,
64
+ timestamp: Date.now(),
65
+ attributes: attributes || {}
66
+ });
67
+ }, $.end = () => {
68
+ span_obj.end == null && (span_obj.end = Date.now());
69
+ };
70
+ let ps = wait_promises.get(scope);
71
+ return $.__add_promise = (p) => {
72
+ ps.add(p), p.then(() => ps.delete(p));
73
+ }, resourceStore.run([api, $], () => $);
74
+ }
75
+ function tracer(name, options) {
76
+ let sampler = options?.sampler ?? defaultSampler, scope = { name }, api = {
77
+ root_id: typeof options?.traceparent == "string" ? parse(options.traceparent) : resourceStore.getStore()?.[0].root_id,
78
+ scope,
79
+ sampler
80
+ };
81
+ return wait_promises.set(scope, /* @__PURE__ */ new Set()), {
82
+ span(name2) {
83
+ return resourceStore.run([api, null], span, name2);
84
+ }
85
+ };
86
+ }
87
+ export {
88
+ configure,
89
+ currentSpan,
90
+ report,
91
+ span,
92
+ tracer
93
+ };
@@ -0,0 +1,3 @@
1
+ import type { Exporter } from 'rian';
2
+
3
+ export const exporter: (request: (payload: any) => any) => Exporter;
@@ -0,0 +1 @@
1
+ const { name:e, version:t } = require('rian/package.json');var r=e=>{let t=typeof e,n={};return"string"===t?n.stringValue=e:"number"===t?Number.isInteger(e)?n.intValue=e:n.doubleValue=e:"boolean"===t?n.boolValue=e:Array.isArray(e)?n.arrayValue={values:e.map((e=>r(e)))}:e&&(n.kvlistValue={values:a(e)}),n},a=e=>{let t=[];for(let a of Object.keys(e))t.push({key:a,value:r(e[a])});return t},n=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},s=r=>(s,i)=>{let u=[];for(let e of s){let t,{kind:r,error:s,...i}=e.context;s&&(t={code:2},"message"in s&&(t.message=s.message)),u.push({traceId:e.id.trace_id,spanId:e.id.parent_id,parentSpanId:e.parent?.parent_id,name:e.name,kind:n(r||"INTERNAL"),startTimeUnixNano:1e6*e.start,endTimeUnixNano:e.end?1e6*e.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:a(i),status:t||{code:0},events:e.events.map((e=>({name:e.name,attributes:a(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}return r({resourceSpans:[{resource:{attributes:a(i),droppedAttributesCount:0},instrumentationLibrarySpans:[{instrumentationLibrary:{name:e,version:t},spans:u}]}]})};exports.exporter=s;
@@ -0,0 +1 @@
1
+ import{name as e,version as t}from"rian/package.json";var r=e=>{let t=typeof e,n={};return"string"===t?n.stringValue=e:"number"===t?Number.isInteger(e)?n.intValue=e:n.doubleValue=e:"boolean"===t?n.boolValue=e:Array.isArray(e)?n.arrayValue={values:e.map((e=>r(e)))}:e&&(n.kvlistValue={values:a(e)}),n},a=e=>{let t=[];for(let a of Object.keys(e))t.push({key:a,value:r(e[a])});return t},n=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},s=r=>(s,i)=>{let u=[];for(let e of s){let t,{kind:r,error:s,...i}=e.context;s&&(t={code:2},"message"in s&&(t.message=s.message)),u.push({traceId:e.id.trace_id,spanId:e.id.parent_id,parentSpanId:e.parent?.parent_id,name:e.name,kind:n(r||"INTERNAL"),startTimeUnixNano:1e6*e.start,endTimeUnixNano:e.end?1e6*e.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:a(i),status:t||{code:0},events:e.events.map((e=>({name:e.name,attributes:a(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}return r({resourceSpans:[{resource:{attributes:a(i),droppedAttributesCount:0},instrumentationLibrarySpans:[{instrumentationLibrary:{name:e,version:t},spans:u}]}]})};export{s as exporter};
@@ -1 +1,77 @@
1
- var e=r=>{let a=typeof r,s={};return"string"===a?s.stringValue=r:"number"===a?Number.isInteger(r)?s.intValue=r:s.doubleValue=r:"boolean"===a?s.boolValue=r:Array.isArray(r)?s.arrayValue={values:r.map((t=>e(t)))}:r&&(s.kvlistValue={values:t(r)}),s},t=t=>{let r=[];for(let a of Object.keys(t))r.push({key:a,value:e(t[a])});return r},r=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},a=e=>a=>{let s=[];for(let e of a.scopeSpans){let a=[];s.push({scope:e.scope,spans:a});for(let s of e.spans){let e,{kind:n,error:u,...o}=s.context;u&&(e={code:2},"message"in u&&(e.message=u.message)),a.push({traceId:s.id.trace_id,spanId:s.id.parent_id,parentSpanId:s.parent?.parent_id,name:s.name,kind:r(n||"INTERNAL"),startTimeUnixNano:1e6*s.start,endTimeUnixNano:s.end?1e6*s.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:t(o),status:e||{code:0},events:s.events.map((e=>({name:e.name,attributes:t(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}}return e({resourceSpans:[{resource:{attributes:t(a.resource),droppedAttributesCount:0},scopeSpans:s}]})};exports.exporter=a;
1
+ // src/exporter.otel.http.ts
2
+ var convert_value_to_anyvalue = (value) => {
3
+ let type = typeof value, any_value = {};
4
+ return type === "string" ? any_value.stringValue = value : type === "number" ? Number.isInteger(value) ? any_value.intValue = value : any_value.doubleValue = value : type === "boolean" ? any_value.boolValue = value : Array.isArray(value) ? any_value.arrayValue = {
5
+ values: value.map((i) => convert_value_to_anyvalue(i))
6
+ } : value && (any_value.kvlistValue = { values: convert_object_to_kv(value) }), any_value;
7
+ }, convert_object_to_kv = (input) => {
8
+ let value = [];
9
+ for (let key of Object.keys(input))
10
+ value.push({
11
+ key,
12
+ value: convert_value_to_anyvalue(input[key])
13
+ });
14
+ return value;
15
+ }, map_kind = (kind) => {
16
+ switch (kind) {
17
+ default:
18
+ case "INTERNAL":
19
+ return 1;
20
+ case "SERVER":
21
+ return 2;
22
+ case "CLIENT":
23
+ return 3;
24
+ case "PRODUCER":
25
+ return 4;
26
+ case "CONSUMER":
27
+ return 5;
28
+ }
29
+ }, exporter = (request) => (trace) => {
30
+ let scopeSpans = [];
31
+ for (let scope of trace.scopeSpans) {
32
+ let spans = [];
33
+ scopeSpans.push({
34
+ scope: scope.scope,
35
+ spans
36
+ });
37
+ for (let span of scope.spans) {
38
+ let { kind, error, ...span_ctx } = span.context, status;
39
+ error && (status = {
40
+ code: 2
41
+ }, "message" in error && (status.message = error.message)), spans.push({
42
+ traceId: span.id.trace_id,
43
+ spanId: span.id.parent_id,
44
+ parentSpanId: span.parent?.parent_id,
45
+ name: span.name,
46
+ kind: map_kind(kind || "INTERNAL"),
47
+ startTimeUnixNano: span.start * 1e6,
48
+ endTimeUnixNano: span.end ? span.end * 1e6 : void 0,
49
+ droppedAttributesCount: 0,
50
+ droppedEventsCount: 0,
51
+ droppedLinksCount: 0,
52
+ attributes: convert_object_to_kv(span_ctx),
53
+ status: status || { code: 0 },
54
+ events: span.events.map((i) => ({
55
+ name: i.name,
56
+ attributes: convert_object_to_kv(i.attributes),
57
+ droppedAttributesCount: 0,
58
+ timeUnixNano: i.timestamp * 1e6
59
+ }))
60
+ });
61
+ }
62
+ }
63
+ return request({
64
+ resourceSpans: [
65
+ {
66
+ resource: {
67
+ attributes: convert_object_to_kv(trace.resource),
68
+ droppedAttributesCount: 0
69
+ },
70
+ scopeSpans
71
+ }
72
+ ]
73
+ });
74
+ };
75
+
76
+
77
+ exports.exporter = exporter;
@@ -1 +1,77 @@
1
- var e=r=>{let a=typeof r,s={};return"string"===a?s.stringValue=r:"number"===a?Number.isInteger(r)?s.intValue=r:s.doubleValue=r:"boolean"===a?s.boolValue=r:Array.isArray(r)?s.arrayValue={values:r.map((t=>e(t)))}:r&&(s.kvlistValue={values:t(r)}),s},t=t=>{let r=[];for(let a of Object.keys(t))r.push({key:a,value:e(t[a])});return r},r=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},a=e=>a=>{let s=[];for(let e of a.scopeSpans){let a=[];s.push({scope:e.scope,spans:a});for(let s of e.spans){let e,{kind:n,error:u,...o}=s.context;u&&(e={code:2},"message"in u&&(e.message=u.message)),a.push({traceId:s.id.trace_id,spanId:s.id.parent_id,parentSpanId:s.parent?.parent_id,name:s.name,kind:r(n||"INTERNAL"),startTimeUnixNano:1e6*s.start,endTimeUnixNano:s.end?1e6*s.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:t(o),status:e||{code:0},events:s.events.map((e=>({name:e.name,attributes:t(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}}return e({resourceSpans:[{resource:{attributes:t(a.resource),droppedAttributesCount:0},scopeSpans:s}]})};export{a as exporter};
1
+ // src/exporter.otel.http.ts
2
+ var convert_value_to_anyvalue = (value) => {
3
+ let type = typeof value, any_value = {};
4
+ return type === "string" ? any_value.stringValue = value : type === "number" ? Number.isInteger(value) ? any_value.intValue = value : any_value.doubleValue = value : type === "boolean" ? any_value.boolValue = value : Array.isArray(value) ? any_value.arrayValue = {
5
+ values: value.map((i) => convert_value_to_anyvalue(i))
6
+ } : value && (any_value.kvlistValue = { values: convert_object_to_kv(value) }), any_value;
7
+ }, convert_object_to_kv = (input) => {
8
+ let value = [];
9
+ for (let key of Object.keys(input))
10
+ value.push({
11
+ key,
12
+ value: convert_value_to_anyvalue(input[key])
13
+ });
14
+ return value;
15
+ }, map_kind = (kind) => {
16
+ switch (kind) {
17
+ default:
18
+ case "INTERNAL":
19
+ return 1;
20
+ case "SERVER":
21
+ return 2;
22
+ case "CLIENT":
23
+ return 3;
24
+ case "PRODUCER":
25
+ return 4;
26
+ case "CONSUMER":
27
+ return 5;
28
+ }
29
+ }, exporter = (request) => (trace) => {
30
+ let scopeSpans = [];
31
+ for (let scope of trace.scopeSpans) {
32
+ let spans = [];
33
+ scopeSpans.push({
34
+ scope: scope.scope,
35
+ spans
36
+ });
37
+ for (let span of scope.spans) {
38
+ let { kind, error, ...span_ctx } = span.context, status;
39
+ error && (status = {
40
+ code: 2
41
+ }, "message" in error && (status.message = error.message)), spans.push({
42
+ traceId: span.id.trace_id,
43
+ spanId: span.id.parent_id,
44
+ parentSpanId: span.parent?.parent_id,
45
+ name: span.name,
46
+ kind: map_kind(kind || "INTERNAL"),
47
+ startTimeUnixNano: span.start * 1e6,
48
+ endTimeUnixNano: span.end ? span.end * 1e6 : void 0,
49
+ droppedAttributesCount: 0,
50
+ droppedEventsCount: 0,
51
+ droppedLinksCount: 0,
52
+ attributes: convert_object_to_kv(span_ctx),
53
+ status: status || { code: 0 },
54
+ events: span.events.map((i) => ({
55
+ name: i.name,
56
+ attributes: convert_object_to_kv(i.attributes),
57
+ droppedAttributesCount: 0,
58
+ timeUnixNano: i.timestamp * 1e6
59
+ }))
60
+ });
61
+ }
62
+ }
63
+ return request({
64
+ resourceSpans: [
65
+ {
66
+ resource: {
67
+ attributes: convert_object_to_kv(trace.resource),
68
+ droppedAttributesCount: 0
69
+ },
70
+ scopeSpans
71
+ }
72
+ ]
73
+ });
74
+ };
75
+ export {
76
+ exporter
77
+ };
@@ -0,0 +1,3 @@
1
+ import type { Exporter } from 'rian';
2
+
3
+ export const exporter: (request: (payload: any) => any) => Exporter;
@@ -0,0 +1 @@
1
+ const { flattie:e } = require('flattie');var t=t=>(a,n)=>{let r=[];for(let t of a){let{kind:a,error:i,...s}=t.context;i&&(s.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:t.id.parent_id,traceId:t.id.trace_id,parentId:t.parent?t.parent.parent_id:void 0,name:t.name,kind:"INTERNAL"===a?void 0:a,timestamp:1e3*t.start,duration:t.end?1e3*(t.end-t.start):void 0,localEndpoint:n.localEndpoint||{serviceName:s["service.name"]},tags:e({...n,...s},".",!0),annotations:t.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};exports.exporter=t;
@@ -0,0 +1 @@
1
+ import{flattie as e}from"flattie";var t=t=>(a,n)=>{let r=[];for(let t of a){let{kind:a,error:i,...s}=t.context;i&&(s.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:t.id.parent_id,traceId:t.id.trace_id,parentId:t.parent?t.parent.parent_id:void 0,name:t.name,kind:"INTERNAL"===a?void 0:a,timestamp:1e3*t.start,duration:t.end?1e3*(t.end-t.start):void 0,localEndpoint:n.localEndpoint||{serviceName:s["service.name"]},tags:e({...n,...s},".",!0),annotations:t.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};export{t as exporter};
@@ -1 +1,41 @@
1
- const { flattie:e } = require('flattie');var t=t=>a=>{let r=[];for(let t of a.scopeSpans)for(let n of t.spans){let{kind:s,error:i,...o}=n.context;i&&(o.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:n.id.parent_id,traceId:n.id.trace_id,parentId:n.parent?n.parent.parent_id:void 0,name:n.name,kind:"INTERNAL"===s?void 0:s,timestamp:1e3*n.start,duration:n.end?1e3*(n.end-n.start):void 0,localEndpoint:{serviceName:`${a.resource["service.name"]}@${t.scope.name}`},tags:e({...a.resource,...o},".",!0),annotations:n.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};exports.exporter=t;
1
+ // src/exporter.zipkin.ts
2
+ const { flattie } = require('flattie');
3
+ var exporter = (request) => (trace) => {
4
+ let zipkin = [];
5
+ for (let scope of trace.scopeSpans)
6
+ for (let span of scope.spans) {
7
+ let { kind, error, ...span_ctx } = span.context;
8
+ error && ("message" in error ? span_ctx.error = {
9
+ name: error.name,
10
+ message: error.message,
11
+ stack: error.stack
12
+ } : span_ctx.error = !0), zipkin.push({
13
+ id: span.id.parent_id,
14
+ traceId: span.id.trace_id,
15
+ parentId: span.parent ? span.parent.parent_id : void 0,
16
+ name: span.name,
17
+ kind: kind === "INTERNAL" ? void 0 : kind,
18
+ timestamp: span.start * 1e3,
19
+ duration: span.end ? (span.end - span.start) * 1e3 : void 0,
20
+ localEndpoint: {
21
+ serviceName: `${trace.resource["service.name"]}@${scope.scope.name}`
22
+ },
23
+ tags: flattie(
24
+ {
25
+ ...trace.resource,
26
+ ...span_ctx
27
+ },
28
+ ".",
29
+ !0
30
+ ),
31
+ annotations: span.events.map((i) => ({
32
+ value: `${i.name} :: ${JSON.stringify(i.attributes)}`,
33
+ timestamp: i.timestamp * 1e3
34
+ }))
35
+ });
36
+ }
37
+ return request(zipkin);
38
+ };
39
+
40
+
41
+ exports.exporter = exporter;
@@ -1 +1,41 @@
1
- import{flattie as e}from"flattie";var t=t=>a=>{let r=[];for(let t of a.scopeSpans)for(let n of t.spans){let{kind:s,error:i,...o}=n.context;i&&(o.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:n.id.parent_id,traceId:n.id.trace_id,parentId:n.parent?n.parent.parent_id:void 0,name:n.name,kind:"INTERNAL"===s?void 0:s,timestamp:1e3*n.start,duration:n.end?1e3*(n.end-n.start):void 0,localEndpoint:{serviceName:`${a.resource["service.name"]}@${t.scope.name}`},tags:e({...a.resource,...o},".",!0),annotations:n.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};export{t as exporter};
1
+ // src/exporter.zipkin.ts
2
+ import { flattie } from "flattie";
3
+ var exporter = (request) => (trace) => {
4
+ let zipkin = [];
5
+ for (let scope of trace.scopeSpans)
6
+ for (let span of scope.spans) {
7
+ let { kind, error, ...span_ctx } = span.context;
8
+ error && ("message" in error ? span_ctx.error = {
9
+ name: error.name,
10
+ message: error.message,
11
+ stack: error.stack
12
+ } : span_ctx.error = !0), zipkin.push({
13
+ id: span.id.parent_id,
14
+ traceId: span.id.trace_id,
15
+ parentId: span.parent ? span.parent.parent_id : void 0,
16
+ name: span.name,
17
+ kind: kind === "INTERNAL" ? void 0 : kind,
18
+ timestamp: span.start * 1e3,
19
+ duration: span.end ? (span.end - span.start) * 1e3 : void 0,
20
+ localEndpoint: {
21
+ serviceName: `${trace.resource["service.name"]}@${scope.scope.name}`
22
+ },
23
+ tags: flattie(
24
+ {
25
+ ...trace.resource,
26
+ ...span_ctx
27
+ },
28
+ ".",
29
+ !0
30
+ ),
31
+ annotations: span.events.map((i) => ({
32
+ value: `${i.name} :: ${JSON.stringify(i.attributes)}`,
33
+ timestamp: i.timestamp * 1e3
34
+ }))
35
+ });
36
+ }
37
+ return request(zipkin);
38
+ };
39
+ export {
40
+ exporter
41
+ };
package/index.js CHANGED
@@ -1 +1,74 @@
1
- const { measureFn:e } = require('rian/utils');const { make:t, parse:n, SAMPLED_FLAG:a } = require('tctx');const { is_sampled:r } = require('tctx');var s={};function o(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.0-next.8"}}var p=new Set,i=new WeakMap;async function l(e){let t=[],n=new Map;for(let[e,a]of p){let r;n.has(a)?r=n.get(a).spans:n.set(a,{scope:a,spans:r=[]}),r.push(e),i.has(a)&&(t.push(...i.get(a)),i.delete(a))}return p.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function c(e,t){return r(t)}function d(a,r){let s=r?.sampler??c,o={name:a},l=new Set;i.set(o,l);let d="string"==typeof r?.traceparent?n(r.traceparent):void 0,m=(n,a)=>{let r=a?a.child():t(),i="boolean"!=typeof s?s(n,r,o):s;r.flags;let c={id:r,parent:a,start:Date.now(),name:n,events:[],context:{}};i&&p.add([c,o]);let d=t=>e(d,t);return d.traceparent=r,d.span=e=>m(e,r),d.set_context=e=>"function"==typeof e?void(c.context=e(c.context)):void Object.assign(c.context,e),d.add_event=(e,t)=>{c.events.push({name:e,timestamp:Date.now(),attributes:t||{}})},d.end=()=>{null==c.end&&(c.end=Date.now())},d.__add_promise=e=>{l.add(e),e.then((()=>l.delete(e)))},d};return{span:e=>m(e,d)}}exports.configure=o;exports.report=l;exports.tracer=d;
1
+ // src/index.ts
2
+ const { measureFn } = require('rian/utils');
3
+ const { make, parse, SAMPLED_FLAG } = require('tctx');
4
+
5
+ // src/_internal/index.ts
6
+ const { is_sampled } = require('tctx');
7
+ var resource = {};
8
+ function configure(name, attributes = {}) {
9
+ resource = {
10
+ ...attributes,
11
+ ["service.name"]: name,
12
+ ["telemetry.sdk.name"]: "rian",
13
+ ["telemetry.sdk.version"]: "0.3.0-next.9"
14
+ };
15
+ }
16
+ var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
17
+ async function report(exporter) {
18
+ let ps = [], scopes = /* @__PURE__ */ new Map();
19
+ for (let [span, scope] of span_buffer) {
20
+ let spans;
21
+ scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
22
+ scope,
23
+ spans: spans = []
24
+ }), spans.push(span), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
25
+ }
26
+ return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
27
+ resource,
28
+ scopeSpans: scopes.values()
29
+ });
30
+ }
31
+ function defaultSampler(_name, id) {
32
+ return is_sampled(id);
33
+ }
34
+
35
+ // src/index.ts
36
+ function tracer(name, options) {
37
+ let sampler = options?.sampler ?? defaultSampler, scope = { name }, ps = /* @__PURE__ */ new Set();
38
+ wait_promises.set(scope, ps);
39
+ let root_id = typeof options?.traceparent == "string" ? parse(options.traceparent) : void 0, span = (name2, parent) => {
40
+ let id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name2, id, scope) : sampler;
41
+ should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
42
+ let span_obj = {
43
+ id,
44
+ parent,
45
+ start: Date.now(),
46
+ name: name2,
47
+ events: [],
48
+ context: {}
49
+ };
50
+ should_sample && span_buffer.add([span_obj, scope]);
51
+ let $ = (cb) => measureFn($, cb);
52
+ return $.traceparent = id, $.span = (name3) => span(name3, id), $.set_context = (ctx) => typeof ctx == "function" ? void (span_obj.context = ctx(span_obj.context)) : void Object.assign(span_obj.context, ctx), $.add_event = (name3, attributes) => {
53
+ span_obj.events.push({
54
+ name: name3,
55
+ timestamp: Date.now(),
56
+ attributes: attributes || {}
57
+ });
58
+ }, $.end = () => {
59
+ span_obj.end == null && (span_obj.end = Date.now());
60
+ }, $.__add_promise = (p) => {
61
+ ps.add(p), p.then(() => ps.delete(p));
62
+ }, $;
63
+ };
64
+ return {
65
+ span(name2) {
66
+ return span(name2, root_id);
67
+ }
68
+ };
69
+ }
70
+
71
+
72
+ exports.configure = configure;
73
+ exports.report = report;
74
+ exports.tracer = tracer;
package/index.mjs CHANGED
@@ -1 +1,74 @@
1
- import{measureFn as e}from"rian/utils";import{make as t,parse as n,SAMPLED_FLAG as a}from"tctx";import{is_sampled as r}from"tctx";var s={};function o(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.0-next.8"}}var p=new Set,i=new WeakMap;async function l(e){let t=[],n=new Map;for(let[e,a]of p){let r;n.has(a)?r=n.get(a).spans:n.set(a,{scope:a,spans:r=[]}),r.push(e),i.has(a)&&(t.push(...i.get(a)),i.delete(a))}return p.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function c(e,t){return r(t)}function d(a,r){let s=r?.sampler??c,o={name:a},l=new Set;i.set(o,l);let d="string"==typeof r?.traceparent?n(r.traceparent):void 0,m=(n,a)=>{let r=a?a.child():t(),i="boolean"!=typeof s?s(n,r,o):s;r.flags;let c={id:r,parent:a,start:Date.now(),name:n,events:[],context:{}};i&&p.add([c,o]);let d=t=>e(d,t);return d.traceparent=r,d.span=e=>m(e,r),d.set_context=e=>"function"==typeof e?void(c.context=e(c.context)):void Object.assign(c.context,e),d.add_event=(e,t)=>{c.events.push({name:e,timestamp:Date.now(),attributes:t||{}})},d.end=()=>{null==c.end&&(c.end=Date.now())},d.__add_promise=e=>{l.add(e),e.then((()=>l.delete(e)))},d};return{span:e=>m(e,d)}}export{o as configure,l as report,d as tracer};
1
+ // src/index.ts
2
+ import { measureFn } from "rian/utils";
3
+ import { make, parse, SAMPLED_FLAG } from "tctx";
4
+
5
+ // src/_internal/index.ts
6
+ import { is_sampled } from "tctx";
7
+ var resource = {};
8
+ function configure(name, attributes = {}) {
9
+ resource = {
10
+ ...attributes,
11
+ ["service.name"]: name,
12
+ ["telemetry.sdk.name"]: "rian",
13
+ ["telemetry.sdk.version"]: "0.3.0-next.9"
14
+ };
15
+ }
16
+ var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
17
+ async function report(exporter) {
18
+ let ps = [], scopes = /* @__PURE__ */ new Map();
19
+ for (let [span, scope] of span_buffer) {
20
+ let spans;
21
+ scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
22
+ scope,
23
+ spans: spans = []
24
+ }), spans.push(span), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
25
+ }
26
+ return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
27
+ resource,
28
+ scopeSpans: scopes.values()
29
+ });
30
+ }
31
+ function defaultSampler(_name, id) {
32
+ return is_sampled(id);
33
+ }
34
+
35
+ // src/index.ts
36
+ function tracer(name, options) {
37
+ let sampler = options?.sampler ?? defaultSampler, scope = { name }, ps = /* @__PURE__ */ new Set();
38
+ wait_promises.set(scope, ps);
39
+ let root_id = typeof options?.traceparent == "string" ? parse(options.traceparent) : void 0, span = (name2, parent) => {
40
+ let id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name2, id, scope) : sampler;
41
+ should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
42
+ let span_obj = {
43
+ id,
44
+ parent,
45
+ start: Date.now(),
46
+ name: name2,
47
+ events: [],
48
+ context: {}
49
+ };
50
+ should_sample && span_buffer.add([span_obj, scope]);
51
+ let $ = (cb) => measureFn($, cb);
52
+ return $.traceparent = id, $.span = (name3) => span(name3, id), $.set_context = (ctx) => typeof ctx == "function" ? void (span_obj.context = ctx(span_obj.context)) : void Object.assign(span_obj.context, ctx), $.add_event = (name3, attributes) => {
53
+ span_obj.events.push({
54
+ name: name3,
55
+ timestamp: Date.now(),
56
+ attributes: attributes || {}
57
+ });
58
+ }, $.end = () => {
59
+ span_obj.end == null && (span_obj.end = Date.now());
60
+ }, $.__add_promise = (p) => {
61
+ ps.add(p), p.then(() => ps.delete(p));
62
+ }, $;
63
+ };
64
+ return {
65
+ span(name2) {
66
+ return span(name2, root_id);
67
+ }
68
+ };
69
+ }
70
+ export {
71
+ configure,
72
+ report,
73
+ tracer
74
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rian",
3
- "version": "0.3.0-next.8",
3
+ "version": "0.3.0-next.9",
4
4
  "description": "Effective tracing for the edge and origins",
5
5
  "keywords": [
6
6
  "opentelemetry",
@@ -60,7 +60,7 @@
60
60
  ],
61
61
  "scripts": {
62
62
  "bench": "node -r tsm bench/index.ts",
63
- "build": "bundt --minify",
63
+ "build": "bundt",
64
64
  "format": "prettier --write \"{*,{src,test}/**/*,examples/*/**,bench/*,.github/**/*}.+(ts|js|json|yml|md)\"",
65
65
  "pretest": "pnpm run build",
66
66
  "test": "uvu -r tsm test \".spec.m?ts$\"",
package/readme.md CHANGED
@@ -39,7 +39,7 @@
39
39
  > Visit [/examples](/examples) for more info!
40
40
 
41
41
  ```ts
42
- import { create, report } from 'rian';
42
+ import { configure, create, report } from 'rian';
43
43
  import { measure } from 'rian/utils';
44
44
  import { exporter } from 'rian/exporter.otel.http';
45
45
 
@@ -51,12 +51,18 @@ const otel_endpoint = exporter((payload) =>
51
51
  }),
52
52
  );
53
53
 
54
+ // ~> Configure the environment
55
+
56
+ configure('my-service' {
57
+ 'service.version': 'DEV'
58
+ });
59
+
54
60
  // ~> Create a tracer — typically "per request" or "per operation"
55
- const tracer = create('my-service');
61
+ const trace = tracer('request');
56
62
 
57
63
  // Let us trace
58
64
 
59
- const req = tracer.span('GET ~> /data');
65
+ const req = trace.span('GET ~> /data');
60
66
 
61
67
  req.set_context({
62
68
  user: request_context.user_id,
@@ -112,7 +118,7 @@ Implements the OpenTelemetry protocol for use with http transports.
112
118
  <details><summary>NewRelic</summary>
113
119
 
114
120
  ```ts
115
- import { create, report } from 'rian';
121
+ import { tracer, report } from 'rian';
116
122
  import { exporter } from 'rian/exporter.zipkin';
117
123
 
118
124
  const newrelic = exporter((payload) =>
@@ -128,7 +134,7 @@ const newrelic = exporter((payload) =>
128
134
  }),
129
135
  );
130
136
 
131
- const tracer = create('my-service');
137
+ const tracer = tracer('my-service');
132
138
 
133
139
  await report(newrelic);
134
140
  ```
@@ -140,7 +146,7 @@ await report(newrelic);
140
146
  <details><summary>LightStep</summary>
141
147
 
142
148
  ```ts
143
- import { create, report } from 'rian';
149
+ import { tracer, report } from 'rian';
144
150
  import { exporter } from 'rian/exporter.otel.http';
145
151
 
146
152
  const lightstep = exporter((payload) =>
@@ -154,7 +160,7 @@ const lightstep = exporter((payload) =>
154
160
  }),
155
161
  );
156
162
 
157
- const tracer = create('my-service');
163
+ const tracer = tracer('my-service');
158
164
 
159
165
  await report(lightstep);
160
166
  ```
@@ -0,0 +1,68 @@
1
+ import type { Scope } from 'rian';
2
+
3
+ export type MeasureFn =
4
+ | ((...args: [...args: any[]]) => any)
5
+ | ((...args: [...args: any[], scope: Scope]) => any);
6
+
7
+ /**
8
+ * With a passed function — will start a span, and run the function, when the function finishes
9
+ * the span finishes.
10
+ *
11
+ * The measure method will return whatever the function is, so if it's a promise, it returns a
12
+ * promise and so on. Any error is caught and re thrown, and automatically tracked in the
13
+ * context under the `error` property.
14
+ *
15
+ * All promises are tracked, and awaited on a `tracer.end`.
16
+ *
17
+ * @example
18
+ *
19
+ * ```text
20
+ * const data = await measure(scope, 'name', get_data, 'user_id_123');
21
+ * ^ ^ ^ ^ ^
22
+ * | | | | |
23
+ * | | | | the first argument to get_data
24
+ * | | | function to be called
25
+ * | | the name of the sub scope
26
+ * | |
27
+ * | the parent scope
28
+ * return value from get_data
29
+ * ```
30
+ */
31
+ export const measure: <Fn extends MeasureFn>(
32
+ scope: Scope,
33
+ name: string,
34
+ fn: Fn, // TODO: fn doesnt see scope correctly
35
+ ...args: RealMeasureFnParams<Parameters<Fn>>
36
+ ) => ReturnType<Fn>;
37
+
38
+ /**
39
+ * Wraps any function with a measured scoped function. Useful for when defer function execution
40
+ * till a later time.
41
+ *
42
+ * @example
43
+ *
44
+ * ```js
45
+ * const wrapped = wrap(scope, "run something", my_function);
46
+ *
47
+ * // ... lots of things, where the access to `scope` is lost.
48
+ *
49
+ * wrapped();
50
+ * ```
51
+ */
52
+ export const wrap: <Fn extends MeasureFn>(
53
+ scope: Scope,
54
+ name: string,
55
+ fn: Fn, // TODO: fn doesnt see scope correctly
56
+ ) => Fn;
57
+
58
+ // ==> internals
59
+
60
+ /** @internal */
61
+ export type RealMeasureFnParams<T extends unknown[]> = T extends []
62
+ ? []
63
+ : T extends [...rest: infer U, scope: Scope]
64
+ ? U
65
+ : T;
66
+
67
+ /** @internal */
68
+ export const measureFn: (scope: Scope, fn: any, ...args: any[]) => any;
package/utils/index.js ADDED
@@ -0,0 +1 @@
1
+ var r=(r,t,...e)=>{try{var n=t(...e,r),o=n instanceof Promise;return o&&r.__add_promise(n.catch((t=>{r.set_context({error:t})})).finally((()=>r.end()))),n}catch(t){throw t instanceof Error&&r.set_context({error:t}),t}finally{!0!==o&&r.end()}},t=(t,e,n,...o)=>r(t.fork(e),n,...o),e=(t,e,n)=>function(){return r(t.fork(e),n,...arguments)};exports.measure=t;exports.measureFn=r;exports.wrap=e;
@@ -0,0 +1 @@
1
+ var r=(r,t,...e)=>{try{var n=t(...e,r),o=n instanceof Promise;return o&&r.__add_promise(n.catch((t=>{r.set_context({error:t})})).finally((()=>r.end()))),n}catch(t){throw t instanceof Error&&r.set_context({error:t}),t}finally{!0!==o&&r.end()}},t=(t,e,n,...o)=>r(t.fork(e),n,...o),e=(t,e,n)=>function(){return r(t.fork(e),n,...arguments)};export{t as measure,r as measureFn,e as wrap};
package/utils.js CHANGED
@@ -1 +1,26 @@
1
- var r=(r,t,...e)=>{try{var n=t(...e,r),o=n instanceof Promise;return o&&r.__add_promise(n.catch((t=>{r.set_context({error:t})})).finally((()=>r.end()))),n}catch(t){throw t instanceof Error&&r.set_context({error:t}),t}finally{!0!==o&&r.end()}},t=(t,e,...n)=>r(t,e,...n),e=(t,e)=>function(){return r(t,e,...arguments)};exports.measure=t;exports.measureFn=r;exports.wrap=e;
1
+ // src/utils.ts
2
+ var measureFn = (scope, fn, ...args) => {
3
+ try {
4
+ var r = fn(...args, scope), is_promise = r instanceof Promise;
5
+ return is_promise && scope.__add_promise(
6
+ r.catch(
7
+ (e) => void scope.set_context({
8
+ error: e
9
+ })
10
+ ).finally(() => scope.end())
11
+ ), r;
12
+ } catch (e) {
13
+ throw e instanceof Error && scope.set_context({
14
+ error: e
15
+ }), e;
16
+ } finally {
17
+ is_promise !== !0 && scope.end();
18
+ }
19
+ }, measure = (scope, fn, ...args) => measureFn(scope, fn, ...args), wrap = (scope, fn) => function() {
20
+ return measureFn(scope, fn, ...arguments);
21
+ };
22
+
23
+
24
+ exports.measure = measure;
25
+ exports.measureFn = measureFn;
26
+ exports.wrap = wrap;
package/utils.mjs CHANGED
@@ -1 +1,26 @@
1
- var r=(r,t,...e)=>{try{var n=t(...e,r),o=n instanceof Promise;return o&&r.__add_promise(n.catch((t=>{r.set_context({error:t})})).finally((()=>r.end()))),n}catch(t){throw t instanceof Error&&r.set_context({error:t}),t}finally{!0!==o&&r.end()}},t=(t,e,...n)=>r(t,e,...n),e=(t,e)=>function(){return r(t,e,...arguments)};export{t as measure,r as measureFn,e as wrap};
1
+ // src/utils.ts
2
+ var measureFn = (scope, fn, ...args) => {
3
+ try {
4
+ var r = fn(...args, scope), is_promise = r instanceof Promise;
5
+ return is_promise && scope.__add_promise(
6
+ r.catch(
7
+ (e) => void scope.set_context({
8
+ error: e
9
+ })
10
+ ).finally(() => scope.end())
11
+ ), r;
12
+ } catch (e) {
13
+ throw e instanceof Error && scope.set_context({
14
+ error: e
15
+ }), e;
16
+ } finally {
17
+ is_promise !== !0 && scope.end();
18
+ }
19
+ }, measure = (scope, fn, ...args) => measureFn(scope, fn, ...args), wrap = (scope, fn) => function() {
20
+ return measureFn(scope, fn, ...arguments);
21
+ };
22
+ export {
23
+ measure,
24
+ measureFn,
25
+ wrap
26
+ };