@livestore/utils-dev 0.0.0-snapshot-b2d2d2bd4f754072b38d5bc668a0bf75add60cf1 → 0.0.0-snapshot-bb19fcffa450084e917adc1f3ead601acb4b83c2
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/.tsbuildinfo.json +1 -1
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +5 -47
- package/dist/node/mod.js.map +1 -1
- package/package.json +2 -2
- package/src/node/mod.ts +6 -50
package/dist/node/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAU,MAAM,EAAY,KAAK,EAAY,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE/F,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAM1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,cAAc,UAAU,CAAA;AACxB,OAAO,EACL,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,gCAAgC,GACjC,MAAM,gDAAgD,CAAA;AACvD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,eAAO,MAAM,YAAY,GAAI,iGAO1B;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACxB,KAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAU,MAAM,EAAY,KAAK,EAAY,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE/F,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAM1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,cAAc,UAAU,CAAA;AACxB,OAAO,EACL,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,gCAAgC,GACjC,MAAM,gDAAgD,CAAA;AACvD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,eAAO,MAAM,YAAY,GAAI,iGAO1B;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACxB,KAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CA0FxC,CAAA;AAEpC,eAAO,MAAM,oBAAoB,GAAI,WAAW,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,MAAM,MAAM,IAAI,CAAC,IAAI,oDAazF,CAAA;AAEH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,CAAC,IAAI,oDAqBhD,CAAA"}
|
package/dist/node/mod.js
CHANGED
|
@@ -62,7 +62,9 @@ export const OtelLiveHttp = ({ serviceName, rootSpanName, rootSpanAttributes, pa
|
|
|
62
62
|
yield* Effect.gen(function* () {
|
|
63
63
|
const tracer = yield* OtelTracer.OtelTracer;
|
|
64
64
|
const currentSpan = yield* OtelTracer.currentOtelSpan;
|
|
65
|
-
const
|
|
65
|
+
const nodeTiming = performance.nodeTiming;
|
|
66
|
+
// TODO get rid of this workaround for Bun once Bun properly supports performance.nodeTiming
|
|
67
|
+
const startTime = IS_BUN ? nodeTiming.startTime : performance.timeOrigin + nodeTiming.nodeStart;
|
|
66
68
|
const bootSpan = tracer.startSpan('node-bootstrap', {
|
|
67
69
|
startTime: nodeTiming.nodeStart,
|
|
68
70
|
attributes: {
|
|
@@ -70,10 +72,10 @@ export const OtelLiveHttp = ({ serviceName, rootSpanName, rootSpanAttributes, pa
|
|
|
70
72
|
'node.timing.environment': nodeTiming.environment,
|
|
71
73
|
'node.timing.bootstrapComplete': nodeTiming.bootstrapComplete,
|
|
72
74
|
'node.timing.loopStart': nodeTiming.loopStart,
|
|
73
|
-
'node.timing.duration':
|
|
75
|
+
'node.timing.duration': nodeTiming.duration,
|
|
74
76
|
},
|
|
75
77
|
}, otel.trace.setSpanContext(otel.context.active(), currentSpan.spanContext()));
|
|
76
|
-
bootSpan.end(
|
|
78
|
+
bootSpan.end(startTime + nodeTiming.duration);
|
|
77
79
|
}).pipe(Effect.provide(layer), Effect.orDie);
|
|
78
80
|
}
|
|
79
81
|
return layer;
|
|
@@ -109,48 +111,4 @@ export const getTracingBackendUrl = (span) => Effect.gen(function* () {
|
|
|
109
111
|
// TODO make dynamic via env var
|
|
110
112
|
return `${grafanaEndpoint}/explore?${searchParams.toString()}`;
|
|
111
113
|
});
|
|
112
|
-
/**
|
|
113
|
-
* Compute absolute start/end timestamps for the Node.js bootstrap span in a
|
|
114
|
-
* way that works in both Node and Bun.
|
|
115
|
-
*
|
|
116
|
-
* Context: Bun's perf_hooks PerformanceNodeTiming currently throws when
|
|
117
|
-
* accessing standard PerformanceEntry getters like `startTime` and
|
|
118
|
-
* `duration`, and some fields differ in semantics (e.g. `nodeStart` appears
|
|
119
|
-
* as an epoch timestamp rather than an offset). See:
|
|
120
|
-
* https://github.com/oven-sh/bun/issues/23041
|
|
121
|
-
*
|
|
122
|
-
* We therefore avoid the problematic getters and derive absolute timestamps
|
|
123
|
-
* using fields that exist in both runtimes.
|
|
124
|
-
*
|
|
125
|
-
* TODO: Simplify to a single, non-branching computation once the Bun issue
|
|
126
|
-
* above is fixed and Bun matches Node's semantics for PerformanceNodeTiming.
|
|
127
|
-
*/
|
|
128
|
-
const computeBootstrapTiming = () => {
|
|
129
|
-
const nodeTiming = performance.nodeTiming;
|
|
130
|
-
// Absolute start time in ms since epoch.
|
|
131
|
-
const startAbs = IS_BUN
|
|
132
|
-
? typeof nodeTiming.nodeStart === 'number'
|
|
133
|
-
? nodeTiming.nodeStart
|
|
134
|
-
: performance.timeOrigin
|
|
135
|
-
: performance.timeOrigin + nodeTiming.nodeStart;
|
|
136
|
-
// Absolute end time.
|
|
137
|
-
const endAbs = IS_BUN
|
|
138
|
-
? (() => {
|
|
139
|
-
const { loopStart, bootstrapComplete } = nodeTiming;
|
|
140
|
-
if (typeof loopStart === 'number' && loopStart > 0)
|
|
141
|
-
return startAbs + loopStart;
|
|
142
|
-
if (typeof bootstrapComplete === 'number' && bootstrapComplete >= startAbs)
|
|
143
|
-
return bootstrapComplete;
|
|
144
|
-
return startAbs + 1;
|
|
145
|
-
})()
|
|
146
|
-
: startAbs + nodeTiming.duration;
|
|
147
|
-
// Duration attribute value for the span.
|
|
148
|
-
const durationAttr = IS_BUN
|
|
149
|
-
? (() => {
|
|
150
|
-
const { loopStart } = nodeTiming;
|
|
151
|
-
return typeof loopStart === 'number' && loopStart > 0 ? loopStart : 0;
|
|
152
|
-
})()
|
|
153
|
-
: nodeTiming.duration;
|
|
154
|
-
return { nodeTiming, startAbs, endAbs, durationAttr };
|
|
155
|
-
};
|
|
156
114
|
//# sourceMappingURL=mod.js.map
|
package/dist/node/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/utils-dev",
|
|
3
|
-
"version": "0.0.0-snapshot-
|
|
3
|
+
"version": "0.0.0-snapshot-bb19fcffa450084e917adc1f3ead601acb4b83c2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"./src/node-vitest/global.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@opentelemetry/sdk-trace-base": "2.0.1",
|
|
23
23
|
"@opentelemetry/sdk-trace-node": "2.0.1",
|
|
24
24
|
"wrangler": "4.38.0",
|
|
25
|
-
"@livestore/utils": "0.0.0-snapshot-
|
|
25
|
+
"@livestore/utils": "0.0.0-snapshot-bb19fcffa450084e917adc1f3ead601acb4b83c2"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {},
|
|
28
28
|
"files": [
|
package/src/node/mod.ts
CHANGED
|
@@ -104,7 +104,10 @@ export const OtelLiveHttp = ({
|
|
|
104
104
|
const tracer = yield* OtelTracer.OtelTracer
|
|
105
105
|
const currentSpan = yield* OtelTracer.currentOtelSpan
|
|
106
106
|
|
|
107
|
-
const
|
|
107
|
+
const nodeTiming = performance.nodeTiming
|
|
108
|
+
|
|
109
|
+
// TODO get rid of this workaround for Bun once Bun properly supports performance.nodeTiming
|
|
110
|
+
const startTime = IS_BUN ? nodeTiming.startTime : performance.timeOrigin + nodeTiming.nodeStart
|
|
108
111
|
|
|
109
112
|
const bootSpan = tracer.startSpan(
|
|
110
113
|
'node-bootstrap',
|
|
@@ -115,13 +118,13 @@ export const OtelLiveHttp = ({
|
|
|
115
118
|
'node.timing.environment': nodeTiming.environment,
|
|
116
119
|
'node.timing.bootstrapComplete': nodeTiming.bootstrapComplete,
|
|
117
120
|
'node.timing.loopStart': nodeTiming.loopStart,
|
|
118
|
-
'node.timing.duration':
|
|
121
|
+
'node.timing.duration': nodeTiming.duration,
|
|
119
122
|
},
|
|
120
123
|
},
|
|
121
124
|
otel.trace.setSpanContext(otel.context.active(), currentSpan.spanContext()),
|
|
122
125
|
)
|
|
123
126
|
|
|
124
|
-
bootSpan.end(
|
|
127
|
+
bootSpan.end(startTime + nodeTiming.duration)
|
|
125
128
|
}).pipe(Effect.provide(layer), Effect.orDie)
|
|
126
129
|
}
|
|
127
130
|
|
|
@@ -165,50 +168,3 @@ export const getTracingBackendUrl = (span: otel.Span) =>
|
|
|
165
168
|
// TODO make dynamic via env var
|
|
166
169
|
return `${grafanaEndpoint}/explore?${searchParams.toString()}`
|
|
167
170
|
})
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Compute absolute start/end timestamps for the Node.js bootstrap span in a
|
|
171
|
-
* way that works in both Node and Bun.
|
|
172
|
-
*
|
|
173
|
-
* Context: Bun's perf_hooks PerformanceNodeTiming currently throws when
|
|
174
|
-
* accessing standard PerformanceEntry getters like `startTime` and
|
|
175
|
-
* `duration`, and some fields differ in semantics (e.g. `nodeStart` appears
|
|
176
|
-
* as an epoch timestamp rather than an offset). See:
|
|
177
|
-
* https://github.com/oven-sh/bun/issues/23041
|
|
178
|
-
*
|
|
179
|
-
* We therefore avoid the problematic getters and derive absolute timestamps
|
|
180
|
-
* using fields that exist in both runtimes.
|
|
181
|
-
*
|
|
182
|
-
* TODO: Simplify to a single, non-branching computation once the Bun issue
|
|
183
|
-
* above is fixed and Bun matches Node's semantics for PerformanceNodeTiming.
|
|
184
|
-
*/
|
|
185
|
-
const computeBootstrapTiming = () => {
|
|
186
|
-
const nodeTiming = performance.nodeTiming
|
|
187
|
-
|
|
188
|
-
// Absolute start time in ms since epoch.
|
|
189
|
-
const startAbs = IS_BUN
|
|
190
|
-
? typeof nodeTiming.nodeStart === 'number'
|
|
191
|
-
? nodeTiming.nodeStart
|
|
192
|
-
: performance.timeOrigin
|
|
193
|
-
: performance.timeOrigin + nodeTiming.nodeStart
|
|
194
|
-
|
|
195
|
-
// Absolute end time.
|
|
196
|
-
const endAbs = IS_BUN
|
|
197
|
-
? (() => {
|
|
198
|
-
const { loopStart, bootstrapComplete } = nodeTiming
|
|
199
|
-
if (typeof loopStart === 'number' && loopStart > 0) return startAbs + loopStart
|
|
200
|
-
if (typeof bootstrapComplete === 'number' && bootstrapComplete >= startAbs) return bootstrapComplete
|
|
201
|
-
return startAbs + 1
|
|
202
|
-
})()
|
|
203
|
-
: startAbs + nodeTiming.duration
|
|
204
|
-
|
|
205
|
-
// Duration attribute value for the span.
|
|
206
|
-
const durationAttr = IS_BUN
|
|
207
|
-
? (() => {
|
|
208
|
-
const { loopStart } = nodeTiming
|
|
209
|
-
return typeof loopStart === 'number' && loopStart > 0 ? loopStart : 0
|
|
210
|
-
})()
|
|
211
|
-
: nodeTiming.duration
|
|
212
|
-
|
|
213
|
-
return { nodeTiming, startAbs, endAbs, durationAttr } as const
|
|
214
|
-
}
|