@loggerjs/processors 0.0.1 → 0.1.0
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/README.md +66 -29
- package/dist/coalesce.d.ts +10 -0
- package/dist/coalesce.d.ts.map +1 -0
- package/dist/index.cjs +111 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -3
- package/dist/index.js.map +1 -1
- package/dist/symbolicate-stack.d.ts +15 -0
- package/dist/symbolicate-stack.d.ts.map +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -126,6 +126,58 @@ function contextProcessor(context) {
|
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
//#endregion
|
|
129
|
+
//#region src/coalesce.ts
|
|
130
|
+
function attachCoalesced(event, field, key, state, updateMessage) {
|
|
131
|
+
if (state.count <= 1) return event;
|
|
132
|
+
const payload = {
|
|
133
|
+
key,
|
|
134
|
+
count: state.count,
|
|
135
|
+
firstSeen: state.firstSeen,
|
|
136
|
+
lastSeen: state.lastSeen
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
...event,
|
|
140
|
+
message: updateMessage ? `${event.message} (x${state.count})` : event.message,
|
|
141
|
+
data: event.data && typeof event.data === "object" && !Array.isArray(event.data) ? {
|
|
142
|
+
...event.data,
|
|
143
|
+
[field]: payload
|
|
144
|
+
} : {
|
|
145
|
+
value: event.data,
|
|
146
|
+
[field]: payload
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function coalesceProcessor(options = {}) {
|
|
151
|
+
const windowMs = options.windowMs ?? 1e3;
|
|
152
|
+
const maxEntries = options.maxEntries ?? 1e3;
|
|
153
|
+
const field = options.field ?? "coalesced";
|
|
154
|
+
const updateMessage = options.updateMessage ?? true;
|
|
155
|
+
const keyFor = options.key ?? ((event) => `${event.levelName}:${event.message}:${event.error?.message ?? ""}`);
|
|
156
|
+
const seen = /* @__PURE__ */ new Map();
|
|
157
|
+
return (event, context) => {
|
|
158
|
+
const now = context.now();
|
|
159
|
+
const key = keyFor(event);
|
|
160
|
+
const previous = seen.get(key);
|
|
161
|
+
if (previous && now - previous.lastSeen < windowMs) {
|
|
162
|
+
previous.count += 1;
|
|
163
|
+
previous.lastSeen = now;
|
|
164
|
+
incrementLoggerMetaCounter("processor.coalesce.suppressed");
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const next = {
|
|
168
|
+
firstSeen: now,
|
|
169
|
+
lastSeen: now,
|
|
170
|
+
count: 1
|
|
171
|
+
};
|
|
172
|
+
seen.set(key, next);
|
|
173
|
+
if (seen.size > maxEntries) {
|
|
174
|
+
const cutoff = now - windowMs;
|
|
175
|
+
for (const [entryKey, state] of seen) if (state.lastSeen < cutoff || seen.size > maxEntries) seen.delete(entryKey);
|
|
176
|
+
}
|
|
177
|
+
return previous ? attachCoalesced(event, field, key, previous, updateMessage) : event;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//#endregion
|
|
129
181
|
//#region src/dedupe.ts
|
|
130
182
|
function dedupeProcessor(options = {}) {
|
|
131
183
|
const windowMs = options.windowMs ?? 1e3;
|
|
@@ -824,7 +876,7 @@ function normalizeFrames(frames, options) {
|
|
|
824
876
|
}
|
|
825
877
|
return out;
|
|
826
878
|
}
|
|
827
|
-
function writeFrames(event, options, frames) {
|
|
879
|
+
function writeFrames$1(event, options, frames) {
|
|
828
880
|
if (options.target === "context") return {
|
|
829
881
|
...event,
|
|
830
882
|
context: {
|
|
@@ -857,7 +909,60 @@ function stackParserProcessor(options = {}) {
|
|
|
857
909
|
const stack = event.error?.stack;
|
|
858
910
|
if (!stack || normalized.maxFrames === 0) return event;
|
|
859
911
|
const frames = normalizeFrames(normalized.parser(stack), normalized);
|
|
860
|
-
return frames.length > 0 ? writeFrames(event, normalized, frames) : event;
|
|
912
|
+
return frames.length > 0 ? writeFrames$1(event, normalized, frames) : event;
|
|
913
|
+
};
|
|
914
|
+
}
|
|
915
|
+
//#endregion
|
|
916
|
+
//#region src/symbolicate-stack.ts
|
|
917
|
+
function frameListFromEvent(event, sourceKey) {
|
|
918
|
+
const existing = event.error?.[sourceKey];
|
|
919
|
+
if (Array.isArray(existing)) return existing;
|
|
920
|
+
const stack = event.error?.stack;
|
|
921
|
+
return stack ? parseStack(stack) : [];
|
|
922
|
+
}
|
|
923
|
+
function applySymbolication(frame, event, options) {
|
|
924
|
+
const original = options.symbolicate(frame, event);
|
|
925
|
+
if (!original) return frame;
|
|
926
|
+
if (options.mode === "replace") return {
|
|
927
|
+
...original,
|
|
928
|
+
raw: frame.raw
|
|
929
|
+
};
|
|
930
|
+
return {
|
|
931
|
+
...frame,
|
|
932
|
+
original
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
function writeFrames(event, target, key, frames) {
|
|
936
|
+
if (target === "context") return {
|
|
937
|
+
...event,
|
|
938
|
+
context: {
|
|
939
|
+
...event.context,
|
|
940
|
+
[key]: frames
|
|
941
|
+
}
|
|
942
|
+
};
|
|
943
|
+
return {
|
|
944
|
+
...event,
|
|
945
|
+
error: {
|
|
946
|
+
message: event.error?.message ?? event.message,
|
|
947
|
+
...event.error,
|
|
948
|
+
[key]: frames
|
|
949
|
+
}
|
|
950
|
+
};
|
|
951
|
+
}
|
|
952
|
+
function symbolicateStackProcessor(options) {
|
|
953
|
+
const maxFrames = Math.max(0, Math.floor(options.maxFrames ?? 20));
|
|
954
|
+
const sourceKey = options.sourceKey ?? "frames";
|
|
955
|
+
const target = options.target ?? "error";
|
|
956
|
+
const key = options.key ?? "symbolicatedFrames";
|
|
957
|
+
const mode = options.mode ?? "annotate";
|
|
958
|
+
return (event) => {
|
|
959
|
+
if (maxFrames === 0) return event;
|
|
960
|
+
const frames = frameListFromEvent(event, sourceKey).slice(0, maxFrames);
|
|
961
|
+
if (frames.length === 0) return event;
|
|
962
|
+
return writeFrames(event, target, key, frames.map((frame) => applySymbolication(frame, event, {
|
|
963
|
+
mode,
|
|
964
|
+
symbolicate: options.symbolicate
|
|
965
|
+
})));
|
|
861
966
|
};
|
|
862
967
|
}
|
|
863
968
|
//#endregion
|
|
@@ -1323,6 +1428,6 @@ function breadcrumbBufferProcessor(options = {}) {
|
|
|
1323
1428
|
return processor;
|
|
1324
1429
|
}
|
|
1325
1430
|
//#endregion
|
|
1326
|
-
export { breadcrumbBufferProcessor as breadcrumbBuffer, breadcrumbBufferProcessor, contextProcessor as context, contextProcessor, contextMiddleware, contextMiddleware as contextMw, dedupeProcessor as dedupe, dedupeProcessor, dynamicSamplerProcessor as dynamicSampler, dynamicSamplerProcessor, enrichProcessor as enrich, enrichProcessor, enrichMiddleware, enrichMiddleware as enrichMw, filterProcessor as filter, filterProcessor, fingerprintProcessor as fingerprint, fingerprintProcessor, fingersCrossedProcessor as fingersCrossed, fingersCrossedProcessor, levelOverrideProcessor as levelOverride, levelOverrideProcessor, typeProcessor as logType, typeProcessor, typeMiddleware as logTypeMw, typeMiddleware, normalizeErrorProcessor as normalizeError, normalizeErrorProcessor, parseStack, privacyGuardProcessor as privacyGuard, privacyGuardProcessor, rateLimitProcessor as rateLimit, rateLimitProcessor, redactProcessor as redact, redactProcessor, routeProcessor as route, routeProcessor, sampleProcessor as sample, sampleProcessor, schemaDevCheckProcessor as schemaDevCheck, schemaDevCheckProcessor, stackParserProcessor as stackParser, stackParserProcessor, tagsProcessor as tags, tagsProcessor, tagsMiddleware, tagsMiddleware as tagsMw, traceContextProcessor as traceContext, traceContextProcessor, traceContextMiddleware, traceContextMiddleware as traceContextMw };
|
|
1431
|
+
export { breadcrumbBufferProcessor as breadcrumbBuffer, breadcrumbBufferProcessor, coalesceProcessor as coalesce, coalesceProcessor, contextProcessor as context, contextProcessor, contextMiddleware, contextMiddleware as contextMw, dedupeProcessor as dedupe, dedupeProcessor, dynamicSamplerProcessor as dynamicSampler, dynamicSamplerProcessor, enrichProcessor as enrich, enrichProcessor, enrichMiddleware, enrichMiddleware as enrichMw, filterProcessor as filter, filterProcessor, fingerprintProcessor as fingerprint, fingerprintProcessor, fingersCrossedProcessor as fingersCrossed, fingersCrossedProcessor, levelOverrideProcessor as levelOverride, levelOverrideProcessor, typeProcessor as logType, typeProcessor, typeMiddleware as logTypeMw, typeMiddleware, normalizeErrorProcessor as normalizeError, normalizeErrorProcessor, parseStack, privacyGuardProcessor as privacyGuard, privacyGuardProcessor, rateLimitProcessor as rateLimit, rateLimitProcessor, redactProcessor as redact, redactProcessor, routeProcessor as route, routeProcessor, sampleProcessor as sample, sampleProcessor, schemaDevCheckProcessor as schemaDevCheck, schemaDevCheckProcessor, stackParserProcessor as stackParser, stackParserProcessor, symbolicateStackProcessor as symbolicateStack, symbolicateStackProcessor, tagsProcessor as tags, tagsProcessor, tagsMiddleware, tagsMiddleware as tagsMw, traceContextProcessor as traceContext, traceContextProcessor, traceContextMiddleware, traceContextMiddleware as traceContextMw };
|
|
1327
1432
|
|
|
1328
1433
|
//# sourceMappingURL=index.js.map
|