@pristine-ts/common 2.0.3 → 2.0.4

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 (68) hide show
  1. package/dist/lib/cjs/contexts/event-context.js +5 -5
  2. package/dist/lib/cjs/contexts/event-context.js.map +1 -1
  3. package/dist/lib/cjs/decorators/decorators.js +1 -0
  4. package/dist/lib/cjs/decorators/decorators.js.map +1 -1
  5. package/dist/lib/cjs/decorators/traced.decorator.js +65 -0
  6. package/dist/lib/cjs/decorators/traced.decorator.js.map +1 -0
  7. package/dist/lib/cjs/enums/enums.js +1 -0
  8. package/dist/lib/cjs/enums/enums.js.map +1 -1
  9. package/dist/lib/cjs/enums/span-keyname.enum.js +34 -0
  10. package/dist/lib/cjs/enums/span-keyname.enum.js.map +1 -0
  11. package/dist/lib/cjs/interfaces/interfaces.js +1 -0
  12. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
  13. package/dist/lib/cjs/interfaces/tracing-manager.interface.js +3 -0
  14. package/dist/lib/cjs/interfaces/tracing-manager.interface.js.map +1 -0
  15. package/dist/lib/cjs/models/models.js +3 -0
  16. package/dist/lib/cjs/models/models.js.map +1 -1
  17. package/dist/lib/cjs/models/span-event.model.js +28 -0
  18. package/dist/lib/cjs/models/span-event.model.js.map +1 -0
  19. package/dist/lib/cjs/models/span.model.js +79 -0
  20. package/dist/lib/cjs/models/span.model.js.map +1 -0
  21. package/dist/lib/cjs/models/trace.model.js +46 -0
  22. package/dist/lib/cjs/models/trace.model.js.map +1 -0
  23. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  24. package/dist/lib/cjs/utils/span-runner.js +117 -0
  25. package/dist/lib/cjs/utils/span-runner.js.map +1 -0
  26. package/dist/lib/cjs/utils/utils.js +1 -0
  27. package/dist/lib/cjs/utils/utils.js.map +1 -1
  28. package/dist/lib/esm/contexts/event-context.js +5 -5
  29. package/dist/lib/esm/contexts/event-context.js.map +1 -1
  30. package/dist/lib/esm/decorators/decorators.js +1 -0
  31. package/dist/lib/esm/decorators/decorators.js.map +1 -1
  32. package/dist/lib/esm/decorators/traced.decorator.js +62 -0
  33. package/dist/lib/esm/decorators/traced.decorator.js.map +1 -0
  34. package/dist/lib/esm/enums/enums.js +1 -0
  35. package/dist/lib/esm/enums/enums.js.map +1 -1
  36. package/dist/lib/esm/enums/span-keyname.enum.js +31 -0
  37. package/dist/lib/esm/enums/span-keyname.enum.js.map +1 -0
  38. package/dist/lib/esm/interfaces/interfaces.js +1 -0
  39. package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
  40. package/dist/lib/esm/interfaces/tracing-manager.interface.js +2 -0
  41. package/dist/lib/esm/interfaces/tracing-manager.interface.js.map +1 -0
  42. package/dist/lib/esm/models/models.js +3 -0
  43. package/dist/lib/esm/models/models.js.map +1 -1
  44. package/dist/lib/esm/models/span-event.model.js +24 -0
  45. package/dist/lib/esm/models/span-event.model.js.map +1 -0
  46. package/dist/lib/esm/models/span.model.js +75 -0
  47. package/dist/lib/esm/models/span.model.js.map +1 -0
  48. package/dist/lib/esm/models/trace.model.js +42 -0
  49. package/dist/lib/esm/models/trace.model.js.map +1 -0
  50. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  51. package/dist/lib/esm/utils/span-runner.js +113 -0
  52. package/dist/lib/esm/utils/span-runner.js.map +1 -0
  53. package/dist/lib/esm/utils/utils.js +1 -0
  54. package/dist/lib/esm/utils/utils.js.map +1 -1
  55. package/dist/types/contexts/event-context.d.ts +13 -6
  56. package/dist/types/decorators/decorators.d.ts +1 -0
  57. package/dist/types/decorators/traced.decorator.d.ts +40 -0
  58. package/dist/types/enums/enums.d.ts +1 -0
  59. package/dist/types/enums/span-keyname.enum.d.ts +29 -0
  60. package/dist/types/interfaces/interfaces.d.ts +1 -0
  61. package/dist/types/interfaces/tracing-manager.interface.d.ts +78 -0
  62. package/dist/types/models/models.d.ts +3 -0
  63. package/dist/types/models/span-event.model.d.ts +30 -0
  64. package/dist/types/models/span.model.d.ts +90 -0
  65. package/dist/types/models/trace.model.d.ts +53 -0
  66. package/dist/types/utils/span-runner.d.ts +55 -0
  67. package/dist/types/utils/utils.d.ts +1 -0
  68. package/package.json +2 -2
@@ -1,26 +1,33 @@
1
1
  import { DependencyContainer } from "tsyringe";
2
+ import { Trace } from "../models/trace.model";
2
3
  /**
3
4
  * Per-event runtime state — the framework's correlation primitives plus a handle to
4
- * the per-event DI child container. Propagated implicitly via `AsyncLocalStorage`
5
- * (managed by `EventContextManager`) so downstream code doesn't have to thread these
6
- * fields through every method signature.
5
+ * the per-event DI child container and the active trace. Propagated implicitly via
6
+ * `AsyncLocalStorage` (managed by `EventContextManager`) so downstream code doesn't
7
+ * have to thread these fields through every method signature.
7
8
  *
8
9
  * **Not to be confused with `ExecutionContextInterface` (in `@pristine-ts/core`):**
9
10
  * - `ExecutionContext` describes *where* the framework is running (AWS Lambda, CLI,
10
11
  * Express, etc.) — set once per `kernel.handle()` call, immutable, host-shaped.
11
12
  * - `EventContext` describes *which specific event* is being handled — set per event
12
- * in the pipeline, mutable (`traceId` fills in once tracing starts), correlation-
13
- * shaped.
13
+ * in the pipeline, mutable (`traceId` / `trace` fill in once tracing starts),
14
+ * correlation-shaped.
14
15
  *
15
16
  * One `kernel.handle()` call can produce multiple events (each event mapper can return
16
17
  * a list); each event gets its own `EventContext` instance.
17
18
  */
18
19
  export declare class EventContext {
19
20
  /** Unique id for this specific event. Same value the framework uses everywhere
20
- * else as the correlation/eventId (logging, breadcrumbs, file tracer filenames). */
21
+ * else as the correlation/eventId (logging, file tracer filenames). */
21
22
  eventId: string;
22
23
  /** Trace id once tracing has started. Filled in by `TracingManager.startTracing`. */
23
24
  traceId?: string;
25
+ /** The active `Trace` for this event. Single source of truth: every `TracingManager`
26
+ * instance — whether resolved from the root container, a per-event child container,
27
+ * or anywhere else — reads and writes spans through this reference. This is what
28
+ * lets `addEventToCurrentSpan` from a controller find the same trace started in the
29
+ * kernel, even though the TracingManager instances differ across containers. */
30
+ trace?: Trace;
24
31
  /** The per-event DI child container. Helpers (`@traced`, `runWithSpan(name, fn)`,
25
32
  * the LogHandler eventId fallback) reach through this to resolve event-scoped
26
33
  * services without callers having to inject them explicitly. */
@@ -1,3 +1,4 @@
1
1
  export * from './inject-config.decorator';
2
2
  export * from './module-scoped.decorator';
3
3
  export * from './tag.decorator';
4
+ export * from './traced.decorator';
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Method decorator that wraps the decorated method in a span. The span is automatically
3
+ * ended when the method returns or throws, and the `TracingManager` is auto-resolved
4
+ * from the active `EventContext` — no need to inject it manually.
5
+ *
6
+ * ```ts
7
+ * class PaymentService {
8
+ * @traced() // span name = "PaymentService.charge"
9
+ * async charge(amount: number) { ... }
10
+ *
11
+ * @traced("payment.refund.action") // explicit name
12
+ * async refund(chargeId: string) { ... }
13
+ * }
14
+ * ```
15
+ *
16
+ * **Behavior outside an event context.** When the decorated method runs without an
17
+ * active `EventContext` (e.g. a unit test calling the method directly, or background
18
+ * work that escaped the event lifecycle), the decorator is a no-op — the original
19
+ * method runs unchanged. Tracing must never throw or alter semantics.
20
+ *
21
+ * **Sync methods become async.** The decorator awaits the wrapped method internally,
22
+ * so any decorated method returns a `Promise`. Decorating a sync method changes its
23
+ * signature visible to callers — apply `@traced` to methods you'd already be awaiting
24
+ * (DB calls, HTTP, expensive computations), not to tight sync helpers.
25
+ *
26
+ * **Type-level caveat.** TypeScript's parameter and method decorator types don't carry
27
+ * enough information for the compiler to verify that the wrapped method's return type
28
+ * is compatible with `Promise<T>`. The wrapper is type-safe at runtime; the call site's
29
+ * static types are unchanged. Pair with explicit `: Promise<T>` annotations on the
30
+ * method when you want the static type to match what's actually returned.
31
+ *
32
+ * **Lives in `@pristine-ts/common`** so any package can use it without taking a direct
33
+ * dep on `@pristine-ts/telemetry`. The actual `TracingManager` implementation still
34
+ * lives in telemetry; this decorator only reads the active manager from the
35
+ * EventContext when one is present.
36
+ *
37
+ * @param spanName Optional explicit name for the span. Defaults to
38
+ * `${ClassName}.${methodName}`.
39
+ */
40
+ export declare function traced(spanName?: string): MethodDecorator;
@@ -2,3 +2,4 @@ export * from "./http-method.enum";
2
2
  export * from "./internal-container-parameter.enum";
3
3
  export * from "./metadata.enum";
4
4
  export * from "./service-definition-tag.enum";
5
+ export * from "./span-keyname.enum";
@@ -0,0 +1,29 @@
1
+ /**
2
+ * This enum is for the different span names that are integrated in Pristine.
3
+ */
4
+ export declare enum SpanKeynameEnum {
5
+ ChildContainerCreation = "child.container.creation",
6
+ ChildContainerRegistration = "child.container.registration",
7
+ ConfigurationInitialization = "configuration.initialization",
8
+ ErrorResponseInterceptors = "error.response.interceptors",
9
+ EventDispatcherResolver = "event.dispatcher.resolver",
10
+ EventExecution = "event.execution",
11
+ EventInitialization = "event.initialization",
12
+ EventPreMappingInterception = "event.pre-mapping.interception",
13
+ EventPostMappingInterception = "event.post-mapping.interception",
14
+ EventPreResponseMappingInterception = "event.pre-response-mapping.interception",
15
+ EventPostResponseMappingInterception = "event.post-response-mapping.interception",
16
+ EventMapping = "event.mapping",
17
+ KernelInitialization = "kernel.initialization",
18
+ ModuleInitialization = "module.initialization",
19
+ ModuleInitializationImportModules = "module.initialization.import.modules",
20
+ RequestExecution = "request.execution",
21
+ RequestInterceptors = "request.interceptors",
22
+ ResponseInterceptors = "response.interceptors",
23
+ RootExecution = "root.execution",
24
+ RouterControllerResolver = "router.controller.resolver",
25
+ RouterFindMethodRouterNode = "router.find.method.router.node",
26
+ RouterRequestAuthentication = "router.request.authentication",
27
+ RouterRequestExecution = "router.request.execution",
28
+ RouterSetup = "router.setup"
29
+ }
@@ -9,4 +9,5 @@ export * from "./module-scoped-registration.interface";
9
9
  export * from "./resolver.interface";
10
10
  export * from "./tagged-registration.interface";
11
11
  export * from "./token-provider-registration.interface";
12
+ export * from "./tracing-manager.interface";
12
13
  export * from "./value-provider-registration.interface";
@@ -0,0 +1,78 @@
1
+ import { Span } from "../models/span.model";
2
+ import { Trace } from "../models/trace.model";
3
+ /**
4
+ * This interface specifies what a tracing manager should implement.
5
+ *
6
+ * Lives in `@pristine-ts/common` so any package can declare a `TracingManagerInterface`
7
+ * dependency or use the `@traced` decorator / `spanRunner` helper without taking a
8
+ * direct dep on `@pristine-ts/telemetry`. The concrete implementation
9
+ * (`TracingManager`, plus the tracers that consume traces) still lives in telemetry.
10
+ */
11
+ export interface TracingManagerInterface {
12
+ /**
13
+ * This property contains a reference to the active trace.
14
+ */
15
+ trace?: Trace;
16
+ /**
17
+ * This methods starts the Tracing. This should be the first method called before doing anything else.
18
+ * @param spanRootKeyname The keyname of the span at the root.
19
+ * @param traceId The trace id if there is one.
20
+ * @param context The context if there is one.
21
+ */
22
+ startTracing(spanRootKeyname?: string, traceId?: string, context?: {
23
+ [key: string]: string;
24
+ }): Span;
25
+ /**
26
+ * This method ends the trace entirely.
27
+ */
28
+ endTrace(): void;
29
+ /**
30
+ * This method starts a new span.
31
+ * @param keyname The keyname for this new span.
32
+ * @param parentKeyname The keyname of the parent span.
33
+ * @param parentId The id of the parent span.
34
+ * @param context The context if there is one.
35
+ */
36
+ startSpan(keyname: string, parentKeyname?: string, parentId?: string, context?: {
37
+ [key: string]: string;
38
+ }): Span;
39
+ /**
40
+ * This methods adds an already created Span to the trace. It assumes that it its hierarchy is correct.
41
+ * @param span The span to add.
42
+ */
43
+ addSpan(span: Span): Span;
44
+ /**
45
+ * This methods ends the span by setting the end date and by calling the tracers.
46
+ * It will also end the trace if the rootspan is being ended.
47
+ * @param span The span to end.
48
+ */
49
+ endSpan(span: Span): void;
50
+ /**
51
+ * This method ends the span using a keyname.
52
+ * @param keyname The keyname of the span to end.
53
+ */
54
+ endSpanKeyname(keyname: string): void;
55
+ /**
56
+ * Attaches a named, timestamped event to the most-recently-started in-progress span.
57
+ * Use for noteworthy moments inside a span's lifetime that don't warrant their own
58
+ * child span — "validation passed", "found 50 rows", etc. Logs a warning and drops
59
+ * the marker if no span is currently active.
60
+ */
61
+ addEventToCurrentSpan(message: string, attributes?: {
62
+ [key: string]: string;
63
+ }): void;
64
+ /**
65
+ * Returns the active trace's spans + their events as a flat, timestamp-sorted list.
66
+ * Public utility for custom tracers, debug endpoints, test helpers, or any consumer
67
+ * who wants "the active trace as a flat list" without walking the span tree manually.
68
+ * Returns an empty array when no active trace exists.
69
+ */
70
+ getCurrentTrail(): Array<{
71
+ kind: "span" | "event";
72
+ name: string;
73
+ date: Date;
74
+ attributes: {
75
+ [key: string]: string;
76
+ };
77
+ }>;
78
+ }
@@ -1,2 +1,5 @@
1
1
  export * from "./request";
2
2
  export * from "./response";
3
+ export * from "./span-event.model";
4
+ export * from "./span.model";
5
+ export * from "./trace.model";
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A named, timestamped marker attached to a `Span`. Represents a noteworthy moment
3
+ * inside the span's lifetime that doesn't warrant a child span of its own — e.g.
4
+ * "validation passed", "rate limit check ok", "found 50 rows in DB".
5
+ *
6
+ * Modeled after OpenTelemetry's "span events" concept: a `Span` carries `events: SpanEvent[]`
7
+ * alongside its `children: Span[]`. Renderers (the console/file tracer output, etc.) interleave
8
+ * events with spans by timestamp to produce a chronological trail of what happened during the span.
9
+ *
10
+ * Use `TracingManager.addEventToCurrentSpan(message, attributes?)` to add one — it finds
11
+ * the most-recently-started in-progress span and attaches the event there.
12
+ */
13
+ export declare class SpanEvent {
14
+ readonly message: string;
15
+ /**
16
+ * The timestamp in milliseconds at which the event was created. Used to interleave
17
+ * events with sibling spans when rendering a sorted trail.
18
+ */
19
+ readonly timestamp: number;
20
+ /**
21
+ * Free-form attributes attached to the event. String-keyed for cheap serialization,
22
+ * mirroring `Span.context`'s shape. `undefined` when the event carries no metadata.
23
+ */
24
+ readonly attributes?: {
25
+ [key: string]: string;
26
+ };
27
+ constructor(message: string, attributes?: {
28
+ [key: string]: string;
29
+ });
30
+ }
@@ -0,0 +1,90 @@
1
+ import { Trace } from "./trace.model";
2
+ import { SpanEvent } from "./span-event.model";
3
+ /**
4
+ * Minimal structural type for the back-reference Span keeps to whatever lifecycle owner
5
+ * created it. Lets `span.end()` delegate without importing the full TracingManagerInterface
6
+ * (which lives in @pristine-ts/telemetry). Telemetry's TracingManagerInterface satisfies
7
+ * this shape by having a compatible `endSpan` method.
8
+ */
9
+ export interface SpanLifecycleOwnerInterface {
10
+ endSpan(span: Span): void;
11
+ }
12
+ /**
13
+ * This model represents a span.
14
+ */
15
+ export declare class Span {
16
+ keyname: string;
17
+ /**
18
+ * The unique id of the span.
19
+ */
20
+ id: string;
21
+ /**
22
+ * The owner of the span (typically a TracingManager). Set when the span is created so
23
+ * `span.end()` can delegate back to the manager.
24
+ */
25
+ tracingManager?: SpanLifecycleOwnerInterface;
26
+ /**
27
+ * The trace the span is attached to.
28
+ */
29
+ trace?: Trace;
30
+ /**
31
+ * The timestamp in milliseconds at which the span was started.
32
+ */
33
+ startDate: number;
34
+ /**
35
+ * The timestamp in milliseconds at which the span was ended.
36
+ */
37
+ endDate?: number;
38
+ /**
39
+ * The parent span.
40
+ */
41
+ parentSpan?: Span;
42
+ /**
43
+ * The children spans.
44
+ */
45
+ children: Span[];
46
+ /**
47
+ * Named, timestamped markers attached to this span. Use these for noteworthy moments
48
+ * inside the span's lifetime that don't warrant their own child span — e.g.
49
+ * "validation passed", "found 50 rows in DB". Empty by default; populated by
50
+ * `TracingManager.addEventToCurrentSpan(...)`.
51
+ */
52
+ events: SpanEvent[];
53
+ /**
54
+ * The context associated with the span.
55
+ */
56
+ context: {
57
+ [key: string]: string;
58
+ };
59
+ /**
60
+ * Whether or not the span is in progress, meaning it has not ended.
61
+ */
62
+ inProgress: boolean;
63
+ /**
64
+ * This model represents a span.
65
+ * @param keyname The keyname of the span.
66
+ * @param id The unique id of the span.
67
+ * @param context The context to associate with the span.
68
+ */
69
+ constructor(keyname: string, id?: string, context?: {
70
+ [key: string]: string;
71
+ });
72
+ /**
73
+ * This method returns the duration of the span in milliseconds.
74
+ */
75
+ getDuration(): number;
76
+ /**
77
+ * This method ends the span.
78
+ */
79
+ end(): void;
80
+ /**
81
+ * This method sets the trace for the span and all of its children.
82
+ * @param trace The trace the span should be attached to.
83
+ */
84
+ setTrace(trace: Trace): void;
85
+ /**
86
+ * This method adds a child span to the current span. It only adds it if it's not already part of the children.
87
+ * @param span The span to add as a child.
88
+ */
89
+ addChild(span: Span): void;
90
+ }
@@ -0,0 +1,53 @@
1
+ import { Span } from "./span.model";
2
+ /**
3
+ * This model represents a trace.
4
+ */
5
+ export declare class Trace {
6
+ /**
7
+ * The unique id of the trace.
8
+ */
9
+ id: string;
10
+ /**
11
+ * The timestamp in milliseconds at which the trace was started.
12
+ */
13
+ startDate: number;
14
+ /**
15
+ * The timestamp in milliseconds at which the trace was ended.
16
+ */
17
+ endDate?: number;
18
+ /**
19
+ * The span that is at the root.
20
+ */
21
+ rootSpan?: Span;
22
+ /**
23
+ * Index of all spans in this trace by keyname, populated by `TracingManager.addSpan`.
24
+ * Lives on the Trace (not on a particular TracingManager instance) so any TracingManager
25
+ * reading the active trace through `EventContext.trace` sees the same index — required
26
+ * for cross-container span lookup (kernel-resolved manager vs per-event resolved manager).
27
+ */
28
+ spansByKeyname: {
29
+ [keyname: string]: Span[];
30
+ };
31
+ /**
32
+ * The context associated with the trace.
33
+ */
34
+ context?: {
35
+ [key: string]: string;
36
+ };
37
+ /**
38
+ * Whether or not the trace was ended.
39
+ */
40
+ hasEnded: boolean;
41
+ /**
42
+ * This model represents a trace.
43
+ * @param id The unique id of the trace.
44
+ * @param context The context associated with the trace.
45
+ */
46
+ constructor(id?: string, context?: {
47
+ [key: string]: string;
48
+ });
49
+ /**
50
+ * This returns the duration of the trace in miliseconds.
51
+ */
52
+ getDuration(): number;
53
+ }
@@ -0,0 +1,55 @@
1
+ import { TracingManagerInterface } from "../interfaces/tracing-manager.interface";
2
+ /**
3
+ * Options to scope a `runWithSpan` call beyond just naming the span.
4
+ */
5
+ export interface SpanRunnerOptions {
6
+ /** When set, attach the new span as a child of the most recent span with this keyname. */
7
+ parentKeyname?: string;
8
+ /** Disambiguates parents when multiple spans share the same `parentKeyname`. */
9
+ parentId?: string;
10
+ /** Free-form context recorded on the span and surfaced in the rendered output. */
11
+ context?: {
12
+ [key: string]: string;
13
+ };
14
+ }
15
+ /**
16
+ * Runs a function inside a span that is automatically ended when the function returns
17
+ * or throws.
18
+ *
19
+ * Two call shapes are supported:
20
+ *
21
+ * **Explicit form** (`runWithSpan(tracingManager, name, fn)`) — pass the manager you've
22
+ * already injected. Works anywhere, including outside an event context. Use this when
23
+ * you have a `TracingManager` reference in hand:
24
+ *
25
+ * ```ts
26
+ * return spanRunner.runWithSpan(this.tracingManager, "payment.charge",
27
+ * () => this.client.charge(amount));
28
+ * ```
29
+ *
30
+ * **ALS form** (`runWithSpan(name, fn)`) — auto-resolves the `TracingManager` from the
31
+ * active `EventContext`'s container. Concise; works when called from anywhere inside
32
+ * a Pristine event (controller, service, etc.) without needing the manager threaded
33
+ * through:
34
+ *
35
+ * ```ts
36
+ * return spanRunner.runWithSpan("payment.charge", () => this.client.charge(amount));
37
+ * ```
38
+ *
39
+ * If the ALS form is used outside any `EventContext` (e.g. a unit test that doesn't
40
+ * boot a kernel), no span is created and `fn` runs unchanged — same no-throw contract
41
+ * as the rest of the tracing layer.
42
+ *
43
+ * On thrown errors: the error's name/message is attached to the span's context (visible
44
+ * in the rendered tree/JSON output) and then re-thrown. The span is ended either way.
45
+ *
46
+ * Stateless — instantiate once and reuse, or use the exported singleton `spanRunner`.
47
+ */
48
+ export declare class SpanRunner {
49
+ runWithSpan<T>(tracingManager: TracingManagerInterface, spanKeyname: string, fn: () => Promise<T> | T, options?: SpanRunnerOptions): Promise<T>;
50
+ runWithSpan<T>(spanKeyname: string, fn: () => Promise<T> | T, options?: SpanRunnerOptions): Promise<T>;
51
+ }
52
+ /**
53
+ * Default singleton. Stateless so sharing is safe.
54
+ */
55
+ export declare const spanRunner: SpanRunner;
@@ -1,3 +1,4 @@
1
1
  export * from "./date.util";
2
2
  export * from "./enum.util";
3
3
  export * from "./metadata.util";
4
+ export * from "./span-runner";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pristine-ts/common",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "",
5
5
  "module": "dist/lib/esm/common.module.js",
6
6
  "main": "dist/lib/cjs/common.module.js",
@@ -63,5 +63,5 @@
63
63
  "src/*.{js,ts}"
64
64
  ]
65
65
  },
66
- "gitHead": "c741bb430ab8f6286068dc3870fcadf4cefd0023"
66
+ "gitHead": "f376d34e13c1b17b7764c0b47708148e4e51390b"
67
67
  }