@loongsuite/otel-util-genai 0.1.0-beta.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/LICENSE +201 -0
- package/README.md +262 -0
- package/dist/environment-variables.d.ts +8 -0
- package/dist/environment-variables.d.ts.map +1 -0
- package/dist/environment-variables.js +21 -0
- package/dist/environment-variables.js.map +1 -0
- package/dist/event-log/converter.d.ts +19 -0
- package/dist/event-log/converter.d.ts.map +1 -0
- package/dist/event-log/converter.js +216 -0
- package/dist/event-log/converter.js.map +1 -0
- package/dist/event-log/field-mapping.d.ts +53 -0
- package/dist/event-log/field-mapping.d.ts.map +1 -0
- package/dist/event-log/field-mapping.js +400 -0
- package/dist/event-log/field-mapping.js.map +1 -0
- package/dist/event-log/grouping.d.ts +67 -0
- package/dist/event-log/grouping.d.ts.map +1 -0
- package/dist/event-log/grouping.js +241 -0
- package/dist/event-log/grouping.js.map +1 -0
- package/dist/event-log/index.d.ts +5 -0
- package/dist/event-log/index.d.ts.map +1 -0
- package/dist/event-log/index.js +18 -0
- package/dist/event-log/index.js.map +1 -0
- package/dist/event-log/parent-context.d.ts +14 -0
- package/dist/event-log/parent-context.d.ts.map +1 -0
- package/dist/event-log/parent-context.js +45 -0
- package/dist/event-log/parent-context.js.map +1 -0
- package/dist/event-log/readable-spans.d.ts +36 -0
- package/dist/event-log/readable-spans.d.ts.map +1 -0
- package/dist/event-log/readable-spans.js +73 -0
- package/dist/event-log/readable-spans.js.map +1 -0
- package/dist/event-log/types.d.ts +78 -0
- package/dist/event-log/types.d.ts.map +1 -0
- package/dist/event-log/types.js +35 -0
- package/dist/event-log/types.js.map +1 -0
- package/dist/extended-environment-variables.d.ts +12 -0
- package/dist/extended-environment-variables.d.ts.map +1 -0
- package/dist/extended-environment-variables.js +25 -0
- package/dist/extended-environment-variables.js.map +1 -0
- package/dist/extended-handler.d.ts +50 -0
- package/dist/extended-handler.d.ts.map +1 -0
- package/dist/extended-handler.js +334 -0
- package/dist/extended-handler.js.map +1 -0
- package/dist/extended-metrics.d.ts +13 -0
- package/dist/extended-metrics.d.ts.map +1 -0
- package/dist/extended-metrics.js +27 -0
- package/dist/extended-metrics.js.map +1 -0
- package/dist/extended-span-utils.d.ts +14 -0
- package/dist/extended-span-utils.d.ts.map +1 -0
- package/dist/extended-span-utils.js +427 -0
- package/dist/extended-span-utils.js.map +1 -0
- package/dist/extended-types.d.ts +150 -0
- package/dist/extended-types.d.ts.map +1 -0
- package/dist/extended-types.js +46 -0
- package/dist/extended-types.js.map +1 -0
- package/dist/handler.d.ts +23 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +127 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/instruments.d.ts +4 -0
- package/dist/instruments.d.ts.map +1 -0
- package/dist/instruments.js +37 -0
- package/dist/instruments.js.map +1 -0
- package/dist/memory/memory-types.d.ts +26 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +17 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/memory/memory-utils.d.ts +7 -0
- package/dist/memory/memory-utils.d.ts.map +1 -0
- package/dist/memory/memory-utils.js +121 -0
- package/dist/memory/memory-utils.js.map +1 -0
- package/dist/metrics.d.ts +11 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +77 -0
- package/dist/metrics.js.map +1 -0
- package/dist/semconv/gen-ai-extended-attributes.d.ts +101 -0
- package/dist/semconv/gen-ai-extended-attributes.d.ts.map +1 -0
- package/dist/semconv/gen-ai-extended-attributes.js +120 -0
- package/dist/semconv/gen-ai-extended-attributes.js.map +1 -0
- package/dist/semconv/gen-ai-memory-attributes.d.ts +28 -0
- package/dist/semconv/gen-ai-memory-attributes.d.ts.map +1 -0
- package/dist/semconv/gen-ai-memory-attributes.js +42 -0
- package/dist/semconv/gen-ai-memory-attributes.js.map +1 -0
- package/dist/span-utils.d.ts +18 -0
- package/dist/span-utils.d.ts.map +1 -0
- package/dist/span-utils.js +236 -0
- package/dist/span-utils.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +88 -0
- package/dist/utils.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Copyright The OpenTelemetry Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
import { getExtendedTelemetryHandler } from "../extended-handler.js";
|
|
15
|
+
import { EventLogConversionError, } from "./types.js";
|
|
16
|
+
import { createTraceParentContext, isValidTraceId } from "./parent-context.js";
|
|
17
|
+
import { groupByStep, groupByTurn, pairLlm, pairTool, partitionUserHookRequests, } from "./grouping.js";
|
|
18
|
+
import { buildAccumulatedInputMessages, buildEntryInvocation, buildExecuteToolInvocation, buildInvokeAgentInvocation, buildLlmInvocation, buildReactStepInvocation, readNanoMs, readTurnSystemInstruction, readTurnToolDefinitions, } from "./field-mapping.js";
|
|
19
|
+
// Re-export EventName so callers don't need to import from types.js separately.
|
|
20
|
+
export { EventName } from "./types.js";
|
|
21
|
+
/**
|
|
22
|
+
* Convert a flat event log into OTel spans using the supplied handler.
|
|
23
|
+
*
|
|
24
|
+
* Span hierarchy produced per turn (matches ARMS GenAI semantic conventions):
|
|
25
|
+
*
|
|
26
|
+
* ENTRY
|
|
27
|
+
* └── AGENT
|
|
28
|
+
* └── STEP (one per gen_ai.step.id)
|
|
29
|
+
* ├── LLM (one per llm.request+llm.response pair)
|
|
30
|
+
* └── TOOL (one per tool.call+tool.result pair)
|
|
31
|
+
*
|
|
32
|
+
* trace_id from the event log is honored — all spans of a turn inherit it via
|
|
33
|
+
* a synthetic parent SpanContext. If trace_id is missing or invalid, the SDK
|
|
34
|
+
* allocates a fresh one.
|
|
35
|
+
*/
|
|
36
|
+
export function convertEventLogToTrace(records, options) {
|
|
37
|
+
const strict = options?.strict === true;
|
|
38
|
+
const handler = options?.handler ?? getExtendedTelemetryHandler();
|
|
39
|
+
const warnings = [];
|
|
40
|
+
const traceIds = [];
|
|
41
|
+
let spanCount = 0;
|
|
42
|
+
if (!records || records.length === 0) {
|
|
43
|
+
return { traceIds, spanCount, warnings };
|
|
44
|
+
}
|
|
45
|
+
const turns = groupByTurn(records, warnings);
|
|
46
|
+
for (const turn of turns) {
|
|
47
|
+
const turnSpanCount = convertTurn(turn, handler, warnings, strict);
|
|
48
|
+
spanCount += turnSpanCount;
|
|
49
|
+
if (turn.traceId) {
|
|
50
|
+
traceIds.push(turn.traceId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (strict && warnings.length > 0) {
|
|
54
|
+
throw new EventLogConversionError(`Conversion failed in strict mode: ${warnings.length} issue(s). First: ${warnings[0]}`);
|
|
55
|
+
}
|
|
56
|
+
return { traceIds, spanCount, warnings };
|
|
57
|
+
}
|
|
58
|
+
function convertTurn(turn, handler, warnings, strict) {
|
|
59
|
+
const allRecords = turn.records;
|
|
60
|
+
if (allRecords.length === 0)
|
|
61
|
+
return 0;
|
|
62
|
+
// Time bounds use ALL records (including user-hook events) so ENTRY/AGENT
|
|
63
|
+
// span timestamps still cover the full turn even though user-hook events
|
|
64
|
+
// are removed from pairing/grouping.
|
|
65
|
+
const turnStartMs = minTime(allRecords);
|
|
66
|
+
const turnEndMs = maxTime(allRecords);
|
|
67
|
+
// Identify "user-input hook" llm.request events:
|
|
68
|
+
// - rule: no step.id, no model, and no matching llm.response in turn
|
|
69
|
+
// - they are merged into ENTRY/AGENT input.messages and do NOT generate
|
|
70
|
+
// LLM spans (avoids polluting the trace with phantom "chat" spans).
|
|
71
|
+
const { userHooks, remaining } = partitionUserHookRequests(allRecords);
|
|
72
|
+
const records = remaining;
|
|
73
|
+
if (userHooks.length > 0) {
|
|
74
|
+
warnings.push(`Treated ${userHooks.length} llm.request event(s) as user-hook prompt(s), merged into ENTRY (turn ${turn.turnId ?? "(no turn.id)"})`);
|
|
75
|
+
}
|
|
76
|
+
// Construct virtual parent context to honor the trace_id.
|
|
77
|
+
let parentContext;
|
|
78
|
+
if (turn.traceId && isValidTraceId(turn.traceId)) {
|
|
79
|
+
parentContext = createTraceParentContext(turn.traceId);
|
|
80
|
+
}
|
|
81
|
+
else if (turn.traceId !== undefined) {
|
|
82
|
+
warnings.push(`Invalid trace_id "${turn.traceId}" for turn ${turn.turnId ?? "(no turn.id)"}; SDK will allocate one`);
|
|
83
|
+
}
|
|
84
|
+
// Build invocations (ENTRY/AGENT prefer user-hook events as input source).
|
|
85
|
+
const entryInv = buildEntryInvocation(records, userHooks);
|
|
86
|
+
const agentInv = buildInvokeAgentInvocation(records, userHooks);
|
|
87
|
+
handler.startEntry(entryInv, parentContext, turnStartMs);
|
|
88
|
+
const entryCtx = entryInv.contextToken ?? undefined;
|
|
89
|
+
handler.startInvokeAgent(agentInv, entryCtx, turnStartMs);
|
|
90
|
+
const agentCtx = agentInv.contextToken ?? undefined;
|
|
91
|
+
let spanCount = 2; // ENTRY + AGENT
|
|
92
|
+
// Cache turn-level system/tool fields (shared across all LLM spans).
|
|
93
|
+
const turnSysInstr = readTurnSystemInstruction(records);
|
|
94
|
+
const turnToolDefs = readTurnToolDefinitions(records);
|
|
95
|
+
// Pre-compute accumulated input messages for every LLM pair within the turn.
|
|
96
|
+
// messages_delta accumulation crosses step boundaries (it's a turn-level
|
|
97
|
+
// concept), so we collect all LLM pairs of the turn in time order first,
|
|
98
|
+
// then build a Map<request_record, InputMessage[]> for downstream lookup.
|
|
99
|
+
const accumulatedMap = buildTurnAccumulatedMessages(records);
|
|
100
|
+
const steps = groupByStep(records);
|
|
101
|
+
for (const step of steps) {
|
|
102
|
+
spanCount += convertStep(step, handler, agentCtx, turnSysInstr, turnToolDefs, accumulatedMap, warnings, strict);
|
|
103
|
+
}
|
|
104
|
+
handler.stopInvokeAgent(agentInv, turnEndMs);
|
|
105
|
+
handler.stopEntry(entryInv, turnEndMs);
|
|
106
|
+
// Capture the actual trace_id used (SDK may have allocated one).
|
|
107
|
+
if (!turn.traceId) {
|
|
108
|
+
const allocated = entryInv.span?.spanContext().traceId;
|
|
109
|
+
if (allocated && isValidTraceId(allocated)) {
|
|
110
|
+
turn.traceId = allocated;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return spanCount;
|
|
114
|
+
}
|
|
115
|
+
function convertStep(step, handler, agentCtx, turnSysInstr, turnToolDefs, accumulatedMap, warnings, _strict) {
|
|
116
|
+
const stepRecords = step.records;
|
|
117
|
+
if (stepRecords.length === 0)
|
|
118
|
+
return 0;
|
|
119
|
+
const stepStart = minTime(stepRecords);
|
|
120
|
+
const stepEnd = maxTime(stepRecords);
|
|
121
|
+
const stepInv = buildReactStepInvocation(stepRecords);
|
|
122
|
+
handler.startReactStep(stepInv, agentCtx, stepStart);
|
|
123
|
+
const stepCtx = stepInv.contextToken ?? undefined;
|
|
124
|
+
let spanCount = 1; // STEP
|
|
125
|
+
const llmPairs = pairLlm(stepRecords, warnings);
|
|
126
|
+
for (const pair of llmPairs) {
|
|
127
|
+
spanCount += convertLlmPair(pair, handler, stepCtx, turnSysInstr, turnToolDefs, accumulatedMap);
|
|
128
|
+
}
|
|
129
|
+
const toolPairs = pairTool(stepRecords, warnings);
|
|
130
|
+
for (const pair of toolPairs) {
|
|
131
|
+
spanCount += convertToolPair(pair, handler, stepCtx);
|
|
132
|
+
}
|
|
133
|
+
handler.stopReactStep(stepInv, stepEnd);
|
|
134
|
+
return spanCount;
|
|
135
|
+
}
|
|
136
|
+
function convertLlmPair(pair, handler, parentCtx, turnSysInstr, turnToolDefs, accumulatedMap) {
|
|
137
|
+
// Skip degenerate pair with nothing.
|
|
138
|
+
if (!pair.request && !pair.response)
|
|
139
|
+
return 0;
|
|
140
|
+
const startMs = pair.request
|
|
141
|
+
? readNanoMs(pair.request["time_unix_nano"])
|
|
142
|
+
: readNanoMs(pair.response["time_unix_nano"]);
|
|
143
|
+
let endMs = pair.response
|
|
144
|
+
? readNanoMs(pair.response["time_unix_nano"])
|
|
145
|
+
: startMs;
|
|
146
|
+
if (endMs < startMs)
|
|
147
|
+
endMs = startMs;
|
|
148
|
+
const accumulated = pair.request ? accumulatedMap.get(pair.request) : undefined;
|
|
149
|
+
const llmInv = buildLlmInvocation(pair, accumulated, turnSysInstr, turnToolDefs);
|
|
150
|
+
handler.startLlm(llmInv, parentCtx, startMs);
|
|
151
|
+
handler.stopLlm(llmInv, endMs);
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Collect LLM pairs across all steps of a turn (in time order) and pre-compute
|
|
156
|
+
* the accumulated inputMessages for each pair's request record.
|
|
157
|
+
*
|
|
158
|
+
* messages_delta accumulation is a turn-level concept — a later step's LLM
|
|
159
|
+
* request implicitly inherits all messages from prior steps. Pre-computing
|
|
160
|
+
* here keeps convertStep unaware of the cross-step relationship.
|
|
161
|
+
*/
|
|
162
|
+
function buildTurnAccumulatedMessages(turnRecords) {
|
|
163
|
+
const pairs = pairLlm(turnRecords, []);
|
|
164
|
+
// Sort by request time so cross-step order is monotonic. pairLlm already
|
|
165
|
+
// sorts within each side, but the input to it (turnRecords) is in arrival
|
|
166
|
+
// order, not strictly time order, when records have shuffled timestamps.
|
|
167
|
+
pairs.sort((a, b) => {
|
|
168
|
+
const ta = a.request ? readNanoMs(a.request["time_unix_nano"]) : 0;
|
|
169
|
+
const tb = b.request ? readNanoMs(b.request["time_unix_nano"]) : 0;
|
|
170
|
+
return ta - tb;
|
|
171
|
+
});
|
|
172
|
+
const map = new Map();
|
|
173
|
+
for (let i = 0; i < pairs.length; i++) {
|
|
174
|
+
const req = pairs[i]?.request;
|
|
175
|
+
if (!req)
|
|
176
|
+
continue;
|
|
177
|
+
map.set(req, buildAccumulatedInputMessages(pairs, i));
|
|
178
|
+
}
|
|
179
|
+
return map;
|
|
180
|
+
}
|
|
181
|
+
function convertToolPair(pair, handler, parentCtx) {
|
|
182
|
+
if (!pair.call && !pair.result)
|
|
183
|
+
return 0;
|
|
184
|
+
const startMs = pair.call
|
|
185
|
+
? readNanoMs(pair.call["time_unix_nano"])
|
|
186
|
+
: readNanoMs(pair.result["time_unix_nano"]);
|
|
187
|
+
let endMs = pair.result
|
|
188
|
+
? readNanoMs(pair.result["time_unix_nano"])
|
|
189
|
+
: startMs;
|
|
190
|
+
if (endMs < startMs)
|
|
191
|
+
endMs = startMs;
|
|
192
|
+
const toolInv = buildExecuteToolInvocation(pair);
|
|
193
|
+
handler.startExecuteTool(toolInv, parentCtx, startMs);
|
|
194
|
+
handler.stopExecuteTool(toolInv, endMs);
|
|
195
|
+
return 1;
|
|
196
|
+
}
|
|
197
|
+
/* ------------------------------ time helpers ----------------------------- */
|
|
198
|
+
function minTime(records) {
|
|
199
|
+
let min = Number.POSITIVE_INFINITY;
|
|
200
|
+
for (const r of records) {
|
|
201
|
+
const ms = readNanoMs(r["time_unix_nano"]);
|
|
202
|
+
if (ms > 0 && ms < min)
|
|
203
|
+
min = ms;
|
|
204
|
+
}
|
|
205
|
+
return Number.isFinite(min) ? min : 0;
|
|
206
|
+
}
|
|
207
|
+
function maxTime(records) {
|
|
208
|
+
let max = 0;
|
|
209
|
+
for (const r of records) {
|
|
210
|
+
const ms = readNanoMs(r["time_unix_nano"]);
|
|
211
|
+
if (ms > max)
|
|
212
|
+
max = ms;
|
|
213
|
+
}
|
|
214
|
+
return max;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/event-log/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type EntryInvocation, type ExecuteToolInvocation, type InvokeAgentInvocation, type ReactStepInvocation } from "../extended-types.js";
|
|
2
|
+
import { type InputMessage, type LLMInvocation, type MessagePart, type ToolDefinition } from "../types.js";
|
|
3
|
+
import { type EventLogRecord, type LlmPair } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read a uint64-nanosecond timestamp and return its millisecond value as
|
|
6
|
+
* understood by OTel JS SDK (which interprets startTime: number as ms).
|
|
7
|
+
*
|
|
8
|
+
* Accepts number, string (decimal), or bigint. Out-of-range values yield 0
|
|
9
|
+
* which lets the caller decide whether to warn or fall back.
|
|
10
|
+
*/
|
|
11
|
+
export declare function readNanoMs(value: unknown): number;
|
|
12
|
+
/**
|
|
13
|
+
* Build complete input messages for an LLM invocation by walking the turn's
|
|
14
|
+
* LLM pairs in order.
|
|
15
|
+
*
|
|
16
|
+
* Priority:
|
|
17
|
+
* 1. If the matching llm.request has gen_ai.input.messages (full), use it.
|
|
18
|
+
* 2. Else accumulate gen_ai.input.messages_delta from all prior llm.request
|
|
19
|
+
* records in the same turn (plus the current one).
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildAccumulatedInputMessages(pairs: LlmPair[], targetPairIndex: number): InputMessage[];
|
|
22
|
+
/**
|
|
23
|
+
* Build an EntryInvocation from a turn's records.
|
|
24
|
+
*
|
|
25
|
+
* @param turnRecords records remaining after user-hook events are removed
|
|
26
|
+
* @param userHookRecords events identified as user-input hook prompts;
|
|
27
|
+
* their messages_delta becomes the ENTRY input.
|
|
28
|
+
* If empty, falls back to the first real llm.request.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildEntryInvocation(turnRecords: EventLogRecord[], userHookRecords?: EventLogRecord[]): EntryInvocation;
|
|
31
|
+
/** Build an InvokeAgentInvocation by aggregating turn-level metadata. */
|
|
32
|
+
export declare function buildInvokeAgentInvocation(turnRecords: EventLogRecord[], userHookRecords?: EventLogRecord[]): InvokeAgentInvocation;
|
|
33
|
+
/** Build a ReactStepInvocation from a step's records. */
|
|
34
|
+
export declare function buildReactStepInvocation(stepRecords: EventLogRecord[]): ReactStepInvocation;
|
|
35
|
+
/**
|
|
36
|
+
* Build an LLMInvocation from a paired llm.request + llm.response.
|
|
37
|
+
*
|
|
38
|
+
* Either side may be undefined (orphan event). The accumulator parameters let
|
|
39
|
+
* the caller supply complete input messages reconstructed across the turn's
|
|
40
|
+
* deltas; passing undefined falls back to reading messages off the request
|
|
41
|
+
* record alone.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildLlmInvocation(pair: LlmPair, accumulatedInputMessages: InputMessage[] | undefined, turnSystemInstruction: MessagePart[] | undefined, turnToolDefinitions: ToolDefinition[] | undefined): LLMInvocation;
|
|
44
|
+
/** Build an ExecuteToolInvocation from a tool.call + tool.result pair. */
|
|
45
|
+
export declare function buildExecuteToolInvocation(pair: {
|
|
46
|
+
call?: EventLogRecord;
|
|
47
|
+
result?: EventLogRecord;
|
|
48
|
+
}): ExecuteToolInvocation;
|
|
49
|
+
/** Pull system_instructions for a turn (first record carrying them). */
|
|
50
|
+
export declare function readTurnSystemInstruction(turnRecords: EventLogRecord[]): MessagePart[] | undefined;
|
|
51
|
+
/** Pull tool_definitions for a turn (first record carrying them). */
|
|
52
|
+
export declare function readTurnToolDefinitions(turnRecords: EventLogRecord[]): ToolDefinition[] | undefined;
|
|
53
|
+
//# sourceMappingURL=field-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapping.d.ts","sourceRoot":"","sources":["../../src/event-log/field-mapping.ts"],"names":[],"mappings":"AAcA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AA4B1E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBjD;AAyED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EAAE,EAChB,eAAe,EAAE,MAAM,GACtB,YAAY,EAAE,CAiBhB;AA6BD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,GAAE,cAAc,EAAO,GACrC,eAAe,CA4BjB;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,GAAE,cAAc,EAAO,GACrC,qBAAqB,CA0EvB;AAED,yDAAyD;AACzD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,cAAc,EAAE,GAC5B,mBAAmB,CAkCrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,wBAAwB,EAAE,YAAY,EAAE,GAAG,SAAS,EACpD,qBAAqB,EAAE,WAAW,EAAE,GAAG,SAAS,EAChD,mBAAmB,EAAE,cAAc,EAAE,GAAG,SAAS,GAChD,aAAa,CA8Cf;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GACvD,qBAAqB,CAUvB;AAID,wEAAwE;AACxE,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,cAAc,EAAE,GAC5B,WAAW,EAAE,GAAG,SAAS,CAI3B;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,cAAc,EAAE,GAC5B,cAAc,EAAE,GAAG,SAAS,CAI9B"}
|