@smoothbricks/lmao 0.1.4 → 0.2.1

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.
Files changed (148) hide show
  1. package/dist/cloudflare.d.ts +15 -0
  2. package/dist/cloudflare.d.ts.map +1 -0
  3. package/dist/cloudflare.js +14 -0
  4. package/dist/es.js +1 -0
  5. package/dist/lib/JsBufferStrategy.d.ts.map +1 -1
  6. package/dist/lib/JsBufferStrategy.js +12 -0
  7. package/dist/lib/archive/chunkEnvelope.js +1 -0
  8. package/dist/lib/archive/chunkRouting.js +1 -0
  9. package/dist/lib/archive/chunkStats.js +1 -0
  10. package/dist/lib/arrow/capacityStats.js +1 -0
  11. package/dist/lib/arrow/dictionaries.d.ts.map +1 -1
  12. package/dist/lib/buffer/Nanoseconds.d.ts.map +1 -1
  13. package/dist/lib/buffer/Nanoseconds.js +34 -0
  14. package/dist/lib/bufferStrategy.js +21 -0
  15. package/dist/lib/capacityTuning.js +26 -0
  16. package/dist/lib/cleanupDiagnostics.js +2 -2
  17. package/dist/lib/cloudflare/classSplit.d.ts +73 -0
  18. package/dist/lib/cloudflare/classSplit.d.ts.map +1 -0
  19. package/dist/lib/cloudflare/classSplit.js +101 -0
  20. package/dist/lib/cloudflare/collectorClient.d.ts +69 -0
  21. package/dist/lib/cloudflare/collectorClient.d.ts.map +1 -0
  22. package/dist/lib/cloudflare/collectorClient.js +82 -0
  23. package/dist/lib/cloudflare/diagnosticDrain.d.ts +78 -0
  24. package/dist/lib/cloudflare/diagnosticDrain.d.ts.map +1 -0
  25. package/dist/lib/cloudflare/diagnosticDrain.js +120 -0
  26. package/dist/lib/cloudflare/traceRows.d.ts +19 -0
  27. package/dist/lib/cloudflare/traceRows.d.ts.map +1 -0
  28. package/dist/lib/cloudflare/traceRows.js +51 -0
  29. package/dist/lib/codegen/evaluatorGenerator.js +2 -1
  30. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +8 -0
  31. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -1
  32. package/dist/lib/codegen/fixedPositionWriterGenerator.js +18 -1
  33. package/dist/lib/codegen/spanLoggerGenerator.js +1 -0
  34. package/dist/lib/errors/Blocked.d.ts +1 -1
  35. package/dist/lib/errors/Blocked.d.ts.map +1 -1
  36. package/dist/lib/errors/Blocked.js +53 -0
  37. package/dist/lib/errors/CodeError.d.ts.map +1 -1
  38. package/dist/lib/errors/CodeError.js +31 -0
  39. package/dist/lib/errors/RetriesExhausted.d.ts +1 -1
  40. package/dist/lib/errors/RetriesExhausted.d.ts.map +1 -1
  41. package/dist/lib/errors/RetriesExhausted.js +38 -0
  42. package/dist/lib/errors/Transient.d.ts +1 -1
  43. package/dist/lib/errors/Transient.d.ts.map +1 -1
  44. package/dist/lib/errors/Transient.js +31 -0
  45. package/dist/lib/errors/retry-policy.js +1 -0
  46. package/dist/lib/flushScheduler.d.ts +0 -3
  47. package/dist/lib/flushScheduler.d.ts.map +1 -1
  48. package/dist/lib/library.js +1 -0
  49. package/dist/lib/logApi.js +11 -0
  50. package/dist/lib/logBinding.js +13 -0
  51. package/dist/lib/op.d.ts.map +1 -1
  52. package/dist/lib/op.js +15 -0
  53. package/dist/lib/opContext/contextTypes.d.ts +1 -1
  54. package/dist/lib/opContext/contextTypes.d.ts.map +1 -1
  55. package/dist/lib/opContext/createOpGroup.js +1 -0
  56. package/dist/lib/opContext/featureFlagTypes.js +13 -0
  57. package/dist/lib/opContext/opGroupTypes.d.ts +1 -1
  58. package/dist/lib/opContext/opGroupTypes.d.ts.map +1 -1
  59. package/dist/lib/opContext/opGroupTypes.js +16 -0
  60. package/dist/lib/opContext/opTypes.js +14 -0
  61. package/dist/lib/opContext/spanContextTypes.js +19 -0
  62. package/dist/lib/opContext/types.js +15 -0
  63. package/dist/lib/result.d.ts.map +1 -1
  64. package/dist/lib/schema/LogSchema.d.ts.map +1 -1
  65. package/dist/lib/schema/builder.js +1 -0
  66. package/dist/lib/schema/defineFeatureFlags.js +1 -0
  67. package/dist/lib/schema/defineLogSchema.js +10 -0
  68. package/dist/lib/schema/evaluator.d.ts.map +1 -1
  69. package/dist/lib/schema/evaluator.js +1 -0
  70. package/dist/lib/schema/systemSchema.d.ts +1 -1
  71. package/dist/lib/schema/systemSchema.d.ts.map +1 -1
  72. package/dist/lib/schema/systemSchema.js +8 -0
  73. package/dist/lib/schema/types.js +6 -0
  74. package/dist/lib/spanBuffer.d.ts.map +1 -1
  75. package/dist/lib/spanBufferHelpers.js +1 -0
  76. package/dist/lib/spanBufferStats.js +24 -0
  77. package/dist/lib/spanContext.js +1 -0
  78. package/dist/lib/sqlite/sqlite-async-writer.d.ts.map +1 -1
  79. package/dist/lib/sqlite/sqlite-common.d.ts +2 -0
  80. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -1
  81. package/dist/lib/sqlite/sqlite-common.js +4 -0
  82. package/dist/lib/sqlite/sqlite-d1.js +8 -0
  83. package/dist/lib/sqlite/sqlite-db.js +8 -0
  84. package/dist/lib/sqlite/sqlite-writer.d.ts.map +1 -1
  85. package/dist/lib/testing/bun-harness.d.ts +4 -0
  86. package/dist/lib/testing/bun-harness.d.ts.map +1 -1
  87. package/dist/lib/testing/extractFacts.js +8 -0
  88. package/dist/lib/testing/facts.d.ts.map +1 -1
  89. package/dist/lib/testing/facts.js +19 -0
  90. package/dist/lib/testing/queryable-span.js +16 -0
  91. package/dist/lib/testing/span-query.js +8 -0
  92. package/dist/lib/testing/trace-query.d.ts.map +1 -1
  93. package/dist/lib/testing/trace-query.js +247 -219
  94. package/dist/lib/traceContext.js +8 -0
  95. package/dist/lib/traceId.js +1 -0
  96. package/dist/lib/traceRoot.d.ts +5 -5
  97. package/dist/lib/traceRoot.es.d.ts.map +1 -1
  98. package/dist/lib/traceRoot.es.js +2 -1
  99. package/dist/lib/traceRoot.js +16 -1
  100. package/dist/lib/traceRoot.node.d.ts +2 -2
  101. package/dist/lib/traceRoot.node.d.ts.map +1 -1
  102. package/dist/lib/traceRoot.node.js +4 -3
  103. package/dist/lib/tracer.d.ts.map +1 -1
  104. package/dist/lib/tracer.js +61 -0
  105. package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -1
  106. package/dist/lib/tracers/ArrayQueueTracer.js +1 -0
  107. package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -1
  108. package/dist/lib/tracers/CompositeTracer.js +1 -0
  109. package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -1
  110. package/dist/lib/tracers/NoOpTracer.js +25 -0
  111. package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -1
  112. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -1
  113. package/dist/lib/tracers/StdioTracer.js +39 -6
  114. package/dist/lib/tracers/TestTracer.d.ts.map +1 -1
  115. package/dist/lib/tracers/TestTracer.js +30 -0
  116. package/dist/lib/types.js +10 -0
  117. package/dist/lib/utf8Cache.d.ts.map +1 -1
  118. package/dist/lib/utf8Cache.js +1 -0
  119. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -1
  120. package/dist/lib/wasm/WasmBufferStrategy.js +15 -0
  121. package/dist/lib/wasm/wasmAllocator.js +16 -0
  122. package/dist/lib/wasm/wasmSpanBuffer.js +12 -0
  123. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -1
  124. package/dist/lib/wasm/wasmTraceRoot.js +2 -1
  125. package/dist/node.js +1 -0
  126. package/package.json +11 -4
  127. package/src/cloudflare.ts +35 -0
  128. package/src/lib/bufferStrategy.ts +2 -2
  129. package/src/lib/cleanupDiagnostics.ts +2 -2
  130. package/src/lib/cloudflare/__tests__/classSplit.test.ts +171 -0
  131. package/src/lib/cloudflare/__tests__/collectorClient.test.ts +104 -0
  132. package/src/lib/cloudflare/__tests__/diagnosticDrain.test.ts +165 -0
  133. package/src/lib/cloudflare/classSplit.ts +139 -0
  134. package/src/lib/cloudflare/collectorClient.ts +117 -0
  135. package/src/lib/cloudflare/diagnosticDrain.ts +152 -0
  136. package/src/lib/cloudflare/traceRows.ts +60 -0
  137. package/src/lib/codegen/__tests__/fixedPositionWriter-uint64.test.ts +304 -0
  138. package/src/lib/codegen/evaluatorGenerator.ts +2 -2
  139. package/src/lib/codegen/fixedPositionWriterGenerator.ts +26 -1
  140. package/src/lib/schema/defineFeatureFlags.ts +2 -2
  141. package/src/lib/schema/evaluator.ts +2 -2
  142. package/src/lib/sqlite/sqlite-common.ts +5 -0
  143. package/src/lib/testing/__tests__/facts.test.ts +6 -6
  144. package/src/lib/traceRoot.es.ts +2 -2
  145. package/src/lib/traceRoot.node.ts +3 -3
  146. package/src/lib/traceRoot.ts +5 -5
  147. package/src/lib/tracers/ArrayQueueTracer.ts +2 -2
  148. package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +0 -1965
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Diagnostic-class drain adapter.
3
+ *
4
+ * Per specs/lmao/01u_cloudflare_trace_segments.md §LMAO Sink Fit: no new abstraction — the base
5
+ * Tracer lifecycle (onTraceEnd queueing + flush) already models this. The drain tracer extends
6
+ * ArrayQueueTracer; flush() drains completed root buffers, flattens them to rows, and hands them
7
+ * to a constructor-injected transport.
8
+ *
9
+ * Transports (per 01u §Collection Lanes and Fallbacks):
10
+ * - primary: a Pipelines-stream-binding-shaped send fn (`env.TRACE_STREAM.send(rows)`) — rows,
11
+ * because Pipelines owns batching and Parquet encoding for the raw tier
12
+ * - fallback: Cloudflare Queues — batched TraceChunkEnvelope messages built from the existing
13
+ * lib/archive primitives (chunk_id idempotency); NEVER per-span messages (128 KB messages,
14
+ * per-64 KB op billing make per-span ~160x more expensive)
15
+ *
16
+ * Delivery is fire-and-forget: flush() is scheduled via ctx.waitUntil and never rejects; enqueue
17
+ * failures surface through the onSendError hook (01s §Failure Handling — emit metrics, rely on
18
+ * queue policy/backoff), they never block.
19
+ */
20
+ import { buildTraceChunkEnvelope } from '../archive/chunkEnvelope.js';
21
+ import { ArrayQueueTracer } from '../tracers/ArrayQueueTracer.js';
22
+ import { spanBufferToTraceRows } from './traceRows.js';
23
+ /** Primary diagnostic transport: rows straight into the injected Pipelines stream binding. */
24
+ export class PipelinesStreamTransport {
25
+ sendToStream;
26
+ constructor(sendToStream) {
27
+ this.sendToStream = sendToStream;
28
+ }
29
+ send(rows) {
30
+ // The binding signature takes a mutable array of records.
31
+ return this.sendToStream([...rows]);
32
+ }
33
+ }
34
+ function fnv1a32Hex(input) {
35
+ let hash = 0x811c9dc5;
36
+ for (let i = 0; i < input.length; i++) {
37
+ hash ^= input.charCodeAt(i);
38
+ hash = Math.imul(hash, 0x01000193) >>> 0;
39
+ }
40
+ return hash.toString(16).padStart(8, '0');
41
+ }
42
+ function timestampBoundsMs(rows) {
43
+ let minNs = Number.POSITIVE_INFINITY;
44
+ let maxNs = Number.NEGATIVE_INFINITY;
45
+ for (const row of rows) {
46
+ const ts = row.timestamp_ns;
47
+ if (typeof ts !== 'number')
48
+ continue;
49
+ if (ts < minNs)
50
+ minNs = ts;
51
+ if (ts > maxNs)
52
+ maxNs = ts;
53
+ }
54
+ if (minNs === Number.POSITIVE_INFINITY)
55
+ return { startedAtMs: 0, endedAtMs: 0 };
56
+ return { startedAtMs: Math.floor(minNs / 1000000), endedAtMs: Math.floor(maxNs / 1000000) };
57
+ }
58
+ /**
59
+ * Queues-fallback transport: rows are batched into chunk-envelope messages.
60
+ *
61
+ * The chunk_ref is a deterministic content hash of the batch, so a retried send of the same
62
+ * batch produces the same chunk_id and the consumer's chunk_id dedup makes redelivery a no-op.
63
+ */
64
+ export class QueuesFallbackTransport {
65
+ options;
66
+ constructor(options) {
67
+ this.options = options;
68
+ if (options.maxRowsPerMessage < 1) {
69
+ throw new Error('QueuesFallbackTransport: maxRowsPerMessage must be >= 1');
70
+ }
71
+ }
72
+ async send(rows) {
73
+ const { fileRef, maxRowsPerMessage, sendMessage } = this.options;
74
+ for (let offset = 0; offset < rows.length; offset += maxRowsPerMessage) {
75
+ const batch = rows.slice(offset, offset + maxRowsPerMessage);
76
+ const { startedAtMs, endedAtMs } = timestampBoundsMs(batch);
77
+ const envelope = buildTraceChunkEnvelope({
78
+ file_ref: fileRef,
79
+ chunk_ref: `rows_${fnv1a32Hex(JSON.stringify(batch))}`,
80
+ row_count: batch.length,
81
+ started_at_ms: startedAtMs,
82
+ ended_at_ms: endedAtMs,
83
+ });
84
+ await sendMessage({ envelope, rows: batch });
85
+ }
86
+ }
87
+ }
88
+ /**
89
+ * Diagnostic-lane sink tracer: queue completed roots (ArrayQueueTracer), drain + send on flush().
90
+ *
91
+ * flush() is waitUntil-schedulable: it never rejects, and buffers are always released back to
92
+ * the strategy regardless of transport outcome.
93
+ */
94
+ export class DiagnosticDrainTracer extends ArrayQueueTracer {
95
+ transport;
96
+ onSendError;
97
+ constructor(binding, options) {
98
+ super(binding, options);
99
+ this.transport = options.transport;
100
+ this.onSendError = options.onSendError;
101
+ }
102
+ async flush() {
103
+ const buffers = this.drain();
104
+ for (const buffer of buffers) {
105
+ let rows;
106
+ try {
107
+ rows = spanBufferToTraceRows(buffer);
108
+ }
109
+ finally {
110
+ this.bufferStrategy.releaseBuffer(buffer);
111
+ }
112
+ try {
113
+ await this.transport.send(rows);
114
+ }
115
+ catch (error) {
116
+ this.onSendError?.(error, rows);
117
+ }
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Trace-row conversion for the Cloudflare sink lanes.
3
+ *
4
+ * Per specs/lmao/01u_cloudflare_trace_segments.md §Collection Lanes: spans are sent as ROWS
5
+ * (JSON-serializable records), not pre-built Arrow chunks — Pipelines owns batching and Parquet
6
+ * encoding for the raw tier, and the collector DO reduces the same flat row shape.
7
+ *
8
+ * The row shape mirrors the SQLite `spans` table (01a schema system): system columns
9
+ * (trace_id, span_id, parent_span_id, row_index, entry_type, timestamp_ns, message) plus the
10
+ * buffer's user schema columns, flattened so downstream SQL transforms need no unnesting.
11
+ */
12
+ import type { AnySpanBuffer } from '../types.js';
13
+ /** JSON-serializable scalar — the only value kinds a trace row may carry across the sink boundary. */
14
+ export type TraceRowValue = string | number | boolean | null;
15
+ /** One flat, JSON-serializable trace record — the payload unit of both delivery lanes. */
16
+ export type TraceRow = Record<string, TraceRowValue>;
17
+ /** Flatten a completed root span-buffer tree into JSON-serializable trace rows. */
18
+ export declare function spanBufferToTraceRows(rootBuffer: AnySpanBuffer): TraceRow[];
19
+ //# sourceMappingURL=traceRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceRows.d.ts","sourceRoot":"","sources":["../../../src/lib/cloudflare/traceRows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,sGAAsG;AACtG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAiBrD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,EAAE,CAsB3E"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Trace-row conversion for the Cloudflare sink lanes.
3
+ *
4
+ * Per specs/lmao/01u_cloudflare_trace_segments.md §Collection Lanes: spans are sent as ROWS
5
+ * (JSON-serializable records), not pre-built Arrow chunks — Pipelines owns batching and Parquet
6
+ * encoding for the raw tier, and the collector DO reduces the same flat row shape.
7
+ *
8
+ * The row shape mirrors the SQLite `spans` table (01a schema system): system columns
9
+ * (trace_id, span_id, parent_span_id, row_index, entry_type, timestamp_ns, message) plus the
10
+ * buffer's user schema columns, flattened so downstream SQL transforms need no unnesting.
11
+ */
12
+ import { readSpanFieldValue, walkSpanSegments } from '../sqlite/sqlite-common.js';
13
+ function toTraceRowValue(value) {
14
+ if (value === undefined || value === null)
15
+ return null;
16
+ switch (typeof value) {
17
+ case 'string':
18
+ case 'number':
19
+ case 'boolean':
20
+ return value;
21
+ case 'bigint':
22
+ return Number(value);
23
+ default:
24
+ // Non-scalar buffer values (binary payloads etc.) have no JSON row representation.
25
+ return null;
26
+ }
27
+ }
28
+ /** Flatten a completed root span-buffer tree into JSON-serializable trace rows. */
29
+ export function spanBufferToTraceRows(rootBuffer) {
30
+ const rows = [];
31
+ for (const segment of walkSpanSegments(rootBuffer)) {
32
+ const { buffer, traceId, spanId, parentSpanId, rowOffset } = segment;
33
+ const fieldNames = buffer._logSchema._columnNames;
34
+ for (let row = 0; row < buffer._writeIndex; row++) {
35
+ const record = {
36
+ trace_id: traceId,
37
+ span_id: spanId,
38
+ parent_span_id: parentSpanId,
39
+ row_index: rowOffset + row,
40
+ entry_type: buffer.entry_type[row],
41
+ timestamp_ns: Number(buffer.timestamp[row]),
42
+ message: buffer.message_values[row] ?? null,
43
+ };
44
+ for (const fieldName of fieldNames) {
45
+ record[fieldName] = toTraceRowValue(readSpanFieldValue(buffer, fieldName, row));
46
+ }
47
+ rows.push(record);
48
+ }
49
+ }
50
+ return rows;
51
+ }
@@ -1,4 +1,4 @@
1
- //#region corpos/billing!n/audit-flag-evaluator.lmao-evaluator-generator
1
+ //#region smoo/lmao!n/flag-evaluator-generator
2
2
  /**
3
3
  * Worker-safe feature-flag evaluator generation.
4
4
  *
@@ -198,3 +198,4 @@ export function createEvaluatorClass(schema, validateFlagValue, ENTRY_TYPE_FF_AC
198
198
  }
199
199
  return generatedEvaluatorClass;
200
200
  }
201
+ //#endregion smoo/lmao!n/flag-evaluator-generator
@@ -48,6 +48,10 @@ export type TagWriter<T extends LogSchema> = {
48
48
  * Bulk set multiple attributes at once.
49
49
  */
50
50
  with(attributes: Partial<InferSchema<T>>): TagWriter<T>;
51
+ /**
52
+ * Set the reserved `uint64_value` column for this span-start row.
53
+ */
54
+ uint64_value(value: bigint): TagWriter<T>;
51
55
  } & {
52
56
  [K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => TagWriter<T>;
53
57
  };
@@ -81,6 +85,10 @@ export type ResultWriter<T extends LogSchema, R = unknown, E = unknown> = {
81
85
  * Set the result-row source line (row 1).
82
86
  */
83
87
  line(lineNumber: number): ResultWriter<T, R, E>;
88
+ /**
89
+ * Set the reserved `uint64_value` column for this result row.
90
+ */
91
+ uint64_value(value: bigint): ResultWriter<T, R, E>;
84
92
  } & {
85
93
  [K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => ResultWriter<T, R, E>;
86
94
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fixedPositionWriterGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/fixedPositionWriterGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixedPositionWriterGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/fixedPositionWriterGenerator.ts"],"names":[],"mappings":"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"}
@@ -171,12 +171,23 @@ const resultWriterClassCache = new WeakMap();
171
171
  // ============================================================================
172
172
  // TagWriter API
173
173
  // ============================================================================
174
+ /**
175
+ * TagWriter extension - adds the reserved system `uint64_value` writer (row 0).
176
+ */
177
+ const tagWriterExtension = {
178
+ methods: `
179
+ uint64_value(value) {
180
+ this._buffer.uint64_value(this._pos, value);
181
+ return this;
182
+ }
183
+ `,
184
+ };
174
185
  /**
175
186
  * Generate TagWriter class code for a schema.
176
187
  * TagWriter writes to position 0 (span-start row).
177
188
  */
178
189
  export function generateTagWriterClass(schema) {
179
- return generateFixedPositionWriterClass(schema, 0, 'GeneratedTagWriter');
190
+ return generateFixedPositionWriterClass(schema, 0, 'GeneratedTagWriter', tagWriterExtension);
180
191
  }
181
192
  /**
182
193
  * Get or create a cached TagWriter class for a schema.
@@ -243,6 +254,11 @@ line(lineNumber) {
243
254
  this._buffer.line(this._pos, lineNumber);
244
255
  return this;
245
256
  }
257
+
258
+ uint64_value(value) {
259
+ this._buffer.uint64_value(this._pos, value);
260
+ return this;
261
+ }
246
262
  `,
247
263
  };
248
264
  /**
@@ -288,3 +304,4 @@ export function createResultWriter(schema, buffer, resultOrError, isError) {
288
304
  const WriterClass = getResultWriterClass(schema);
289
305
  return new WriterClass(buffer, resultOrError, isError);
290
306
  }
307
+ //#endregion smoo/lmao!n/codegen-architecture
@@ -576,3 +576,4 @@ export function createSpanLogger(schema, buffer) {
576
576
  const SpanLoggerClass = createSpanLoggerClass(schema);
577
577
  return new SpanLoggerClass(buffer);
578
578
  }
579
+ //#endregion smoo/lmao!n/codegen-spanlogger
@@ -91,7 +91,7 @@ type BlockedJsonView = {
91
91
  export declare class Blocked extends Error implements TaggedError<'Blocked'> {
92
92
  /** The reason this Op is blocked */
93
93
  readonly reason: BlockedReason;
94
- static readonly _tag: "Blocked";
94
+ static readonly _tag: 'Blocked';
95
95
  get _tag(): 'Blocked';
96
96
  /** Retry configuration */
97
97
  readonly blockedConfig: BlockedConfig | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Blocked.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/Blocked.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CASlE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAQD,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAEF,qBAAa,OAAQ,SAAQ,KAAM,YAAW,WAAW,CAAC,SAAS,CAAC;IAWhE,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAXhC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAE1C,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;;IAGhD,oCAAoC;IAC3B,MAAM,EAAE,aAAa;IAC9B,mCAAmC;IACnC,MAAM,CAAC,EAAE,aAAa;IAOxB,6DAA6D;IAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO;IAI7D,kEAAkE;IAClE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO;IAI7D,wDAAwD;IACxD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO;IAahE,sCAAsC;IACtC,MAAM,IAAI,eAAe;CAe1B"}
1
+ {"version":3,"file":"Blocked.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/Blocked.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CASlE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAQD,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAEF,qBAAa,OAAQ,SAAQ,KAAM,YAAW,WAAW,CAAC,SAAS,CAAC;IAWhE,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAXhC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAE1C,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAElD;IACE,oCAAoC;IAC3B,MAAM,EAAE,aAAa;IAC9B,mCAAmC;IACnC,MAAM,CAAC,EAAE,aAAa,EAKvB;IAED,6DAA6D;IAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAE5D;IAED,kEAAkE;IAClE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAE5D;IAED,wDAAwD;IACxD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAE/D;IAWD,sCAAsC;IACtC,MAAM,IAAI,eAAe,CAcxB;CACF"}
@@ -1,3 +1,55 @@
1
+ /**
2
+ * Blocked error - indicates an Op cannot proceed due to a temporary condition.
3
+ *
4
+ * A tagged error type for use with `result.isErr(Blocked)` to discriminate
5
+ * blocked states from other errors. Useful for retry logic and dependency waiting.
6
+ *
7
+ * Uses BlockedConfig for retry configuration (closure-based nextRetry).
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { defineOpContext, S, Err } from '@smoothbricks/lmao';
12
+ * import { Blocked } from '@smoothbricks/lmao/errors/Blocked';
13
+ *
14
+ * const { defineOp } = defineOpContext({
15
+ * logSchema: { service: S.category() },
16
+ * ctx: { env: null as Env },
17
+ * });
18
+ *
19
+ * const fetchData = defineOp('fetchData', async (ctx, service: string) => {
20
+ * const health = await checkHealth(service);
21
+ * if (!health.available) {
22
+ * // Return Err with Blocked - can chain .with() for tags
23
+ * return new Err(Blocked.service(service)).with({ service });
24
+ * }
25
+ * ctx.tag.service(service);
26
+ * return ctx.ok(await doFetch(service));
27
+ * });
28
+ *
29
+ * // With closure-based retry (captures HTTP response context)
30
+ * const callApi = defineOp('callApi', async (ctx, url: string) => {
31
+ * const response = await fetch(url);
32
+ * if (response.status === 503) {
33
+ * const retryAfterSec = parseInt(response.headers.get('Retry-After') ?? '5');
34
+ * return new Err(Blocked.service('payment-api', {
35
+ * maxAttempts: 5,
36
+ * nextRetry: (attempt) => {
37
+ * if (attempt === 1) return retryAfterSec * 1000;
38
+ * return 5000 * Math.pow(2, attempt - 1);
39
+ * },
40
+ * }));
41
+ * }
42
+ * return ctx.ok(await response.json());
43
+ * });
44
+ *
45
+ * // Caller can discriminate blocked from other errors
46
+ * const result = await trace('fetch', fetchData, 'payment-api');
47
+ * if (result.isErr(Blocked)) {
48
+ * // Handle temporary unavailability - retry, queue, etc.
49
+ * console.log(`Blocked on ${result.error.reason.name}`);
50
+ * }
51
+ * ```
52
+ */
1
53
  /**
2
54
  * Convert a blocked reason union into its display name.
3
55
  */
@@ -66,3 +118,4 @@ export class Blocked extends Error {
66
118
  };
67
119
  }
68
120
  }
121
+ //#endregion smoo/lmao!n/op-context-tagged-errors.blocked
@@ -1 +1 @@
1
- {"version":3,"file":"CodeError.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/CodeError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAExE,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,KAAM,YAAW,WAAW,CAAC,CAAC,CAAC;IACxF;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAO5B;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC,CAEZ;IAMD,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;CAG9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvG,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB;AAED,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAC/D,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GACrB,SAAS,SAAS,CAAC,GACjB,mBAAmB,CAAC,CAAC,CAAC,GACtB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AACxE,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"CodeError.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/CodeError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAExE,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,KAAM,YAAW,WAAW,CAAC,CAAC,CAAC;IACxF;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjB,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAK3B;IAED;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC,CAEZ;IAMD,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAE5B;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvG,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB;AAED,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAC/D,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GACrB,SAAS,SAAS,CAAC,GACjB,mBAAmB,CAAC,CAAC,CAAC,GACtB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AACxE,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -1,3 +1,34 @@
1
+ /**
2
+ * CodeError - typed error codes with data payloads.
3
+ *
4
+ * Use the `Code()` helper to define typed error codes, then use them with `ctx.err()`.
5
+ * The error code becomes the `_tag` for discrimination with `result.isErr(CODE)`.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { Code } from '@smoothbricks/lmao/errors/CodeError';
10
+ *
11
+ * // Define typed error codes
12
+ * const NOT_FOUND = Code<{ id: string }>('NOT_FOUND');
13
+ * const VALIDATION_ERROR = Code<{ field: string; reason: string }>('VALIDATION_ERROR');
14
+ * const TIMEOUT = Code('TIMEOUT'); // No data payload
15
+ *
16
+ * // Use in Ops
17
+ * const fetchUser = defineOp('fetchUser', async (ctx, id: string) => {
18
+ * const user = await db.find(id);
19
+ * if (!user) {
20
+ * return ctx.err(NOT_FOUND({ id }));
21
+ * }
22
+ * return ctx.ok(user);
23
+ * });
24
+ *
25
+ * // Discriminate errors
26
+ * const result = await trace('fetch', fetchUser, 'abc');
27
+ * if (result.isErr(NOT_FOUND)) {
28
+ * console.log(`User ${result.error.data.id} not found`);
29
+ * }
30
+ * ```
31
+ */
1
32
  /**
2
33
  * Error instance created by a Code constructor.
3
34
  *
@@ -51,7 +51,7 @@ export declare class RetriesExhausted extends Error implements TaggedError<'Retr
51
51
  readonly attempts: number;
52
52
  /** Max attempts that was configured (the limit that was hit) */
53
53
  readonly maxAttempts: number;
54
- static readonly _tag: "RetriesExhausted";
54
+ static readonly _tag: 'RetriesExhausted';
55
55
  get _tag(): 'RetriesExhausted';
56
56
  constructor(
57
57
  /** The original blocked reason */
@@ -1 +1 @@
1
- {"version":3,"file":"RetriesExhausted.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/RetriesExhausted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,cAAc,CAAC;AAExE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,WAAW,CAAC,kBAAkB,CAAC;IAQlF,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAZ9B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;IAEnD,IAAI,IAAI,IAAI,kBAAkB,CAE7B;;IAGC,kCAAkC;IACzB,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IACzB,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IACvD,WAAW,EAAE,MAAM;IAW9B,sCAAsC;IACtC,MAAM,IAAI,oBAAoB;CAG/B"}
1
+ {"version":3,"file":"RetriesExhausted.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/RetriesExhausted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,cAAc,CAAC;AAExE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,WAAW,CAAC,kBAAkB,CAAC;IAQlF,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAZ9B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;IAEnD,IAAI,IAAI,IAAI,kBAAkB,CAE7B;IAED;IACE,kCAAkC;IACzB,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IACzB,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IACvD,WAAW,EAAE,MAAM,EAI7B;IAOD,sCAAsC;IACtC,MAAM,IAAI,oBAAoB,CAE7B;CACF"}
@@ -1,3 +1,41 @@
1
+ /**
2
+ * Retries exhausted error - returned when a Blocked error has exceeded max attempts.
3
+ *
4
+ * When an Op repeatedly returns `Blocked` and the retry config's `maxAttempts`
5
+ * is exhausted, the retry layer converts the final failure to `RetriesExhausted`.
6
+ *
7
+ * Unlike `Blocked`, this represents a permanent failure that callers must handle
8
+ * (e.g., compensate, alert, escalate, return error to caller).
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { defineOpContext, S, Err } from '@smoothbricks/lmao';
13
+ * import { Blocked } from '@smoothbricks/lmao/errors/Blocked';
14
+ * import { RetriesExhausted } from '@smoothbricks/lmao/errors/RetriesExhausted';
15
+ *
16
+ * const { defineOp } = defineOpContext({
17
+ * logSchema: { service: S.category() },
18
+ * ctx: { env: null as Env },
19
+ * });
20
+ *
21
+ * // Op that may be blocked by external service
22
+ * const callPaymentApi = defineOp('callPaymentApi', async (ctx, amount: number) => {
23
+ * const health = await checkHealth('payment-api');
24
+ * if (!health.available) {
25
+ * return new Err(Blocked.service('payment-api'));
26
+ * }
27
+ * const result = await ctx.deps.http.post('/pay', { amount });
28
+ * return ctx.ok(result);
29
+ * });
30
+ *
31
+ * // Caller handles permanent failure after retries exhausted
32
+ * const result = await trace('checkout', checkoutOp);
33
+ * if (result.isErr(RetriesExhausted)) {
34
+ * ctx.log.error(`Payment failed after ${result.error.attempts} attempts`);
35
+ * return ctx.err('PAYMENT_UNAVAILABLE', { service: result.error.reason });
36
+ * }
37
+ * ```
38
+ */
1
39
  import { getBlockedReasonName } from './Blocked.js';
2
40
  export class RetriesExhausted extends Error {
3
41
  reason;
@@ -48,9 +48,9 @@ export declare class TransientError<C extends string, D = void> extends CodeErro
48
48
  readonly policy: RetryPolicy;
49
49
  constructor(code: C, data: D, policy: RetryPolicy);
50
50
  toJSON(): {
51
- policy: RetryPolicy;
52
51
  code: C;
53
52
  data: D;
53
+ policy: RetryPolicy;
54
54
  };
55
55
  }
56
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Transient.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/Transient.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;;GASG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;gBAEjB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW;IAMxC,MAAM;;;;;CAMhB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpH,oEAAoE;IACpE,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjH,2DAA2D;IAC3D,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED,KAAK,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GACpE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1B,SAAS,SAAS,CAAC,GACjB,wBAAwB,CAAC,CAAC,CAAC,GAC3B,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAC9G,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACpD,IAAI,EAAE,CAAC,EACP,aAAa,EAAE,WAAW,GACzB,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAmChC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"Transient.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/Transient.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;;GASG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAIhD;IAEQ,MAAM;;;;MAKd;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpH,oEAAoE;IACpE,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjH,2DAA2D;IAC3D,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED,KAAK,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GACpE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1B,SAAS,SAAS,CAAC,GACjB,wBAAwB,CAAC,CAAC,CAAC,GAC3B,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAC9G,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACpD,IAAI,EAAE,CAAC,EACP,aAAa,EAAE,WAAW,GACzB,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAmChC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,3 +1,33 @@
1
+ //#region smoo/lmao!n/op-retry.transient
2
+ /**
3
+ * TransientError - typed transient error codes with embedded retry policy.
4
+ *
5
+ * Use the `Transient()` factory to define transient error codes WITH default retry policy.
6
+ * Op class checks `instanceof TransientError` and reads `error.policy` for retry config.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { Transient, exponentialBackoff, fixedDelay } from '@smoothbricks/lmao/errors/Transient';
11
+ *
12
+ * // Define error with default exponential backoff (5 attempts)
13
+ * const SERVICE_UNAVAILABLE = Transient<{ service: string }>('SERVICE_UNAVAILABLE', exponentialBackoff(5));
14
+ *
15
+ * // Define error with fixed delay for rate limiting
16
+ * const RATE_LIMITED = Transient<{ retryAfter?: number }>('RATE_LIMITED', fixedDelay(3, 5000));
17
+ *
18
+ * // Usage - data only, uses default policy
19
+ * ctx.err(SERVICE_UNAVAILABLE({ service: 'api' }));
20
+ *
21
+ * // Override policy for this specific call (e.g., use Retry-After header)
22
+ * ctx.err(RATE_LIMITED({ retryAfter: 60000 }, fixedDelay(1, 60000)));
23
+ *
24
+ * // Op class detects transient and reads policy
25
+ * if (result.error instanceof TransientError) {
26
+ * const { maxAttempts, backoff, baseDelayMs } = result.error.policy;
27
+ * // Execute retry loop based on policy
28
+ * }
29
+ * ```
30
+ */
1
31
  import { CodeError } from './CodeError.js';
2
32
  import { mergePolicy } from './retry-policy.js';
3
33
  /**
@@ -52,3 +82,4 @@ function isRetryPolicyLike(value) {
52
82
  }
53
83
  // Re-export policy helpers for convenience
54
84
  export { exponentialBackoff, fixedDelay, linearBackoff, mergePolicy } from './retry-policy.js';
85
+ //#endregion smoo/lmao!n/op-retry.transient
@@ -52,3 +52,4 @@ export function mergePolicy(base, override) {
52
52
  return base;
53
53
  return { ...base, ...override };
54
54
  }
55
+ //#endregion smoo/lmao!n/op-retry.policy
@@ -120,9 +120,6 @@ export declare class FlushScheduler {
120
120
  * Node.js only
121
121
  */
122
122
  private checkMemoryPressure;
123
- /**
124
- * Perform the actual flush operation
125
- */
126
123
  private doFlush;
127
124
  /**
128
125
  * Record activity (called when buffers are written to)
@@ -1 +1 @@
1
- {"version":3,"file":"flushScheduler.d.ts","sourceRoot":"","sources":["../../src/lib/flushScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,KAAK,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAKzE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAuC5D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AAEH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAAS;IAE1B,wDAAwD;IACxD,OAAO,CAAC,WAAW,CAAK;IAExB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B,CAAgD;gBAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,oBAAyB;IAepE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAUrC;;OAEG;IACH,KAAK,IAAI,IAAI;IA+Bb;;OAEG;IACH,IAAI,IAAI,IAAI;IAuBZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;YACW,OAAO;IAqJrB;;OAEG;IACH,cAAc,IAAI,IAAI;CAGvB;AASD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAK5G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;IAClC;;OAEG;6BACsB,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,SAAS;IAKpE;;OAEG;6BACsB,cAAc,SAAS,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI;IAIjF;;OAEG;mCAC4B,cAAc,GAAG,MAAM,GAAG,SAAS;IAKlE;;OAEG;mCAC4B,cAAc,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAGtF,CAAC"}
1
+ {"version":3,"file":"flushScheduler.d.ts","sourceRoot":"","sources":["../../src/lib/flushScheduler.ts"],"names":[],"mappings":"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"}
@@ -592,3 +592,4 @@ export function createRemappedSpanLoggerClass(cleanSchema, prefixMapping) {
592
592
  remappedSpanLoggerClassCache.set(cacheKey, GeneratedClass);
593
593
  return GeneratedClass;
594
594
  }
595
+ //#endregion smoo/lmao!n/codegen-prefixed-remap
@@ -1,3 +1,14 @@
1
+ /**
2
+ * LogAPI - Simple logging interface for contexts that need structured logging
3
+ * without direct access to a SpanBuffer.
4
+ *
5
+ * Used by:
6
+ * - Other contexts where a simplified logging interface is needed
7
+ *
8
+ * Unlike SpanLogger which is tightly coupled to a SpanBuffer and returns
9
+ * FluentLogEntry for chaining, LogAPI is a simple fire-and-forget interface
10
+ * that can be backed by any logging implementation.
11
+ */
1
12
  /**
2
13
  * No-op LogAPI implementation.
3
14
  *
@@ -1 +1,14 @@
1
+ /**
2
+ * LogBinding - Logging infrastructure binding for ops and buffers
3
+ *
4
+ * Represents the binding between a set of operations and their logging infrastructure.
5
+ * Contains the schema and optional remapping support for prefixed modules.
6
+ *
7
+ * Note: Buffer stats (self-tuning capacity) are stored on SpanBufferClass.stats as static
8
+ * properties, NOT on LogBinding. See agent-todo/opgroup-refactor.md for rationale.
9
+ *
10
+ * Per specs:
11
+ * - 01b2_buffer_self_tuning.md - Self-tuning via SpanBufferClass.stats
12
+ * - 01e_library_integration_pattern.md - Library prefix/remapping support
13
+ */
1
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/lib/op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAM7D;;;;;;GAMG;AAMH,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;CACzC;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,EAAE,CAAC,GAAG,SAAS,SAAS,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IAE/D,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,UAAU;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,eAAe,EAAE,qBAAqB;IAC/C,qGAAqG;IACrG,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,uBAAuB;IACpD;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB;;IAb7C,oDAAoD;IAC3C,QAAQ,EAAE,UAAU;IAC7B,wFAAwF;IAC/E,eAAe,EAAE,qBAAqB;IAC/C,qGAAqG;IAC5F,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,0EAA0E;IACjE,iBAAiB,CAAC,EAAE,uBAAuB,YAAA;IACpD;;;;OAIG;IACM,iBAAiB,CAAC,EAAE,gBAAgB,YAAA;CAEhD"}
1
+ {"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/lib/op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAM7D;;;;;;GAMG;AAMH,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;CACzC;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,EAAE,CAAC,GAAG,SAAS,SAAS,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IAE/D,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,UAAU;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,eAAe,EAAE,qBAAqB;IAC/C,qGAAqG;IACrG,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,uBAAuB;IACpD;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB;IAd/C;IACE,oDAAoD;IAC3C,QAAQ,EAAE,UAAU;IAC7B,wFAAwF;IAC/E,eAAe,EAAE,qBAAqB;IAC/C,qGAAqG;IAC5F,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,0EAA0E;IACjE,iBAAiB,CAAC,EAAE,uBAAuB,YAAA;IACpD;;;;OAIG;IACM,iBAAiB,CAAC,EAAE,gBAAgB,YAAA,EAC3C;CACL"}
package/dist/lib/op.js CHANGED
@@ -1,3 +1,17 @@
1
+ /**
2
+ * Op - Traced operation class and OpMetadata
3
+ *
4
+ * This is the single source of truth for the Op class and OpMetadata interface.
5
+ * Other modules re-export these types for convenience.
6
+ *
7
+ * Wraps a user function with automatic span tracking.
8
+ * Created by defineOp() from the Op-centric API (defineOpContext).
9
+ *
10
+ * Per specs/lmao/01l_op_context_pattern.md and specs/lmao/01c_context_flow_and_op_wrappers.md:
11
+ * - Captures OpMetadata for attribution (package_name, package_file, git_sha, line)
12
+ * - fn is called by span_op() after span_op creates the SpanBuffer/SpanContext
13
+ * - Op name is used for metrics tracking (separate from span names)
14
+ */
1
15
  //#endregion smoo/lmao!n/opcontext-hierarchy
2
16
  // =============================================================================
3
17
  // Op Class
@@ -59,3 +73,4 @@ export class Op {
59
73
  this._opContextBinding = _opContextBinding;
60
74
  }
61
75
  }
76
+ //#endregion smoo/lmao!n/op-class