@sentry/effect 10.63.0 → 10.65.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.
@@ -7,7 +7,7 @@ function getLogLevelTag(logLevel) {
7
7
  if (typeof logLevel === "string") {
8
8
  return logLevel;
9
9
  }
10
- if (logLevel && typeof logLevel === "object" && "_tag" in logLevel) {
10
+ if (core.isObjectLike(logLevel) && "_tag" in logLevel) {
11
11
  return logLevel._tag;
12
12
  }
13
13
  return "Info";
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../src/logger.ts"],"sourcesContent":["import { logger as sentryLogger } from '@sentry/core';\nimport * as Logger from 'effect/Logger';\nimport type * as LogLevel from 'effect/LogLevel';\n\nfunction getLogLevelTag(logLevel: LogLevel.LogLevel): LogLevel.LogLevel | 'Warning' {\n // Effect v4: logLevel is a string literal directly\n if (typeof logLevel === 'string') {\n return logLevel;\n }\n\n // Effect v3: logLevel has _tag property\n if (logLevel && typeof logLevel === 'object' && '_tag' in logLevel) {\n return (logLevel as { _tag: LogLevel.LogLevel })._tag;\n }\n\n return 'Info';\n}\n\n/**\n * Effect Logger that sends logs to Sentry.\n */\nexport const SentryEffectLogger = Logger.make(({ logLevel, message }) => {\n let msg: string;\n if (typeof message === 'string') {\n msg = message;\n } else if (Array.isArray(message) && message.length === 1) {\n const firstElement = message[0];\n msg = typeof firstElement === 'string' ? firstElement : JSON.stringify(firstElement);\n } else {\n msg = JSON.stringify(message);\n }\n\n const tag = getLogLevelTag(logLevel);\n\n switch (tag) {\n case 'Fatal':\n sentryLogger.fatal(msg);\n break;\n case 'Error':\n sentryLogger.error(msg);\n break;\n case 'Warning': // Effect v3\n case 'Warn': // Effect v4\n sentryLogger.warn(msg);\n break;\n case 'Info':\n sentryLogger.info(msg);\n break;\n case 'Debug':\n sentryLogger.debug(msg);\n break;\n case 'Trace':\n sentryLogger.trace(msg);\n break;\n case 'All':\n case 'None':\n break;\n default:\n tag satisfies never;\n }\n});\n"],"names":["sentryLogger"],"mappings":";;;;;AAIA,SAAS,eAAe,QAAA,EAA4D;AAElF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,IAAY,UAAU,QAAA,EAAU;AAClE,IAAA,OAAQ,QAAA,CAAyC,IAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,MAAM,qBAAqB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AACvE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,GAAA,GAAM,OAAA;AAAA,EACR,WAAW,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACzD,IAAA,MAAM,YAAA,GAAe,QAAQ,CAAC,CAAA;AAC9B,IAAA,GAAA,GAAM,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,EACrF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,GAAA,GAAM,eAAe,QAAQ,CAAA;AAEnC,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,SAAA;AAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAAA,WAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAAA,WAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAKA;AAEN,CAAC;;;;"}
1
+ {"version":3,"file":"logger.js","sources":["../../src/logger.ts"],"sourcesContent":["import { isObjectLike, logger as sentryLogger } from '@sentry/core';\nimport * as Logger from 'effect/Logger';\nimport type * as LogLevel from 'effect/LogLevel';\n\nfunction getLogLevelTag(logLevel: LogLevel.LogLevel): LogLevel.LogLevel | 'Warning' {\n // Effect v4: logLevel is a string literal directly\n if (typeof logLevel === 'string') {\n return logLevel;\n }\n\n // Effect v3: logLevel has _tag property\n if (isObjectLike(logLevel) && '_tag' in logLevel) {\n return (logLevel as { _tag: LogLevel.LogLevel })._tag;\n }\n\n return 'Info';\n}\n\n/**\n * Effect Logger that sends logs to Sentry.\n */\nexport const SentryEffectLogger = Logger.make(({ logLevel, message }) => {\n let msg: string;\n if (typeof message === 'string') {\n msg = message;\n } else if (Array.isArray(message) && message.length === 1) {\n const firstElement = message[0];\n msg = typeof firstElement === 'string' ? firstElement : JSON.stringify(firstElement);\n } else {\n msg = JSON.stringify(message);\n }\n\n const tag = getLogLevelTag(logLevel);\n\n switch (tag) {\n case 'Fatal':\n sentryLogger.fatal(msg);\n break;\n case 'Error':\n sentryLogger.error(msg);\n break;\n case 'Warning': // Effect v3\n case 'Warn': // Effect v4\n sentryLogger.warn(msg);\n break;\n case 'Info':\n sentryLogger.info(msg);\n break;\n case 'Debug':\n sentryLogger.debug(msg);\n break;\n case 'Trace':\n sentryLogger.trace(msg);\n break;\n case 'All':\n case 'None':\n break;\n default:\n tag satisfies never;\n }\n});\n"],"names":["isObjectLike","sentryLogger"],"mappings":";;;;;AAIA,SAAS,eAAe,QAAA,EAA4D;AAElF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAIA,iBAAA,CAAa,QAAQ,CAAA,IAAK,MAAA,IAAU,QAAA,EAAU;AAChD,IAAA,OAAQ,QAAA,CAAyC,IAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,MAAM,qBAAqB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AACvE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,GAAA,GAAM,OAAA;AAAA,EACR,WAAW,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACzD,IAAA,MAAM,YAAA,GAAe,QAAQ,CAAC,CAAA;AAC9B,IAAA,GAAA,GAAM,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,EACrF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,GAAA,GAAM,eAAe,QAAQ,CAAA;AAEnC,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,OAAA;AACH,MAAAC,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,SAAA;AAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAAA,WAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAAA,WAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,WAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAKA;AAEN,CAAC;;;;"}
@@ -25,7 +25,7 @@ function getErrorMessage(exit) {
25
25
  return void 0;
26
26
  }
27
27
  const cause = exit.cause;
28
- if (cause && typeof cause === "object" && "reasons" in cause && Array.isArray(cause.reasons)) {
28
+ if (core.isObjectLike(cause) && "reasons" in cause && Array.isArray(cause.reasons)) {
29
29
  const reasons = cause.reasons;
30
30
  for (const reason of reasons) {
31
31
  if (reason._tag === "Fail" && reason.error !== void 0) {
@@ -37,7 +37,7 @@ function getErrorMessage(exit) {
37
37
  }
38
38
  return "internal_error";
39
39
  }
40
- if (cause && typeof cause === "object" && "_tag" in cause) {
40
+ if (core.isObjectLike(cause) && "_tag" in cause) {
41
41
  const v3Cause = cause;
42
42
  if (v3Cause._tag === "Fail") {
43
43
  return String(v3Cause.error);
@@ -120,7 +120,7 @@ const isEffectV4 = (() => {
120
120
  try {
121
121
  const testExit = Exit.fail("test");
122
122
  const cause = testExit.cause;
123
- if (cause && typeof cause === "object" && "reasons" in cause) {
123
+ if (core.isObjectLike(cause) && "reasons" in cause) {
124
124
  return true;
125
125
  }
126
126
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sources":["../../src/tracer.ts"],"sourcesContent":["import type { Span } from '@sentry/core';\nimport { getActiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport type * as Context from 'effect/Context';\nimport * as Exit from 'effect/Exit';\nimport * as Option from 'effect/Option';\nimport * as EffectTracer from 'effect/Tracer';\n\nfunction deriveOrigin(name: string): string {\n if (name.startsWith('http.server') || name.startsWith('http.client')) {\n return 'auto.http.effect';\n }\n\n return 'auto.function.effect';\n}\n\ntype HrTime = [number, number];\n\nconst SENTRY_SPAN_SYMBOL = Symbol.for('@sentry/effect.SentrySpan');\n\nfunction nanosToHrTime(nanos: bigint): HrTime {\n const seconds = Number(nanos / BigInt(1_000_000_000));\n const remainingNanos = Number(nanos % BigInt(1_000_000_000));\n return [seconds, remainingNanos];\n}\n\ninterface SentrySpanLike extends EffectTracer.Span {\n readonly [SENTRY_SPAN_SYMBOL]: true;\n readonly sentrySpan: Span;\n}\n\nfunction isSentrySpan(span: EffectTracer.AnySpan): span is SentrySpanLike {\n return SENTRY_SPAN_SYMBOL in span;\n}\n\nfunction getErrorMessage(exit: Exit.Exit<unknown, unknown>): string | undefined {\n if (!Exit.isFailure(exit)) {\n return undefined;\n }\n\n const cause = exit.cause as unknown;\n\n // Effect v4: cause.reasons is an array of Reason objects\n if (\n cause &&\n typeof cause === 'object' &&\n 'reasons' in cause &&\n Array.isArray((cause as { reasons: unknown }).reasons)\n ) {\n const reasons = (cause as { reasons: Array<{ _tag?: string; error?: unknown; defect?: unknown }> }).reasons;\n for (const reason of reasons) {\n if (reason._tag === 'Fail' && reason.error !== undefined) {\n return String(reason.error);\n }\n if (reason._tag === 'Die' && reason.defect !== undefined) {\n return String(reason.defect);\n }\n }\n return 'internal_error';\n }\n\n // Effect v3: cause has _tag directly\n if (cause && typeof cause === 'object' && '_tag' in cause) {\n const v3Cause = cause as { _tag: string; error?: unknown; defect?: unknown };\n if (v3Cause._tag === 'Fail') {\n return String(v3Cause.error);\n }\n if (v3Cause._tag === 'Die') {\n return String(v3Cause.defect);\n }\n }\n\n return 'internal_error';\n}\n\nclass SentrySpanWrapper implements SentrySpanLike {\n public readonly [SENTRY_SPAN_SYMBOL]: true;\n public readonly _tag: 'Span';\n public readonly spanId: string;\n public readonly traceId: string;\n public readonly attributes: Map<string, unknown>;\n public readonly sampled: boolean;\n public readonly parent: Option.Option<EffectTracer.AnySpan>;\n public readonly links: Array<EffectTracer.SpanLink>;\n public status: EffectTracer.SpanStatus;\n public readonly sentrySpan: Span;\n public readonly annotations: Context.Context<never>;\n\n public constructor(\n public readonly name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n public readonly context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n public readonly kind: EffectTracer.SpanKind,\n existingSpan: Span,\n ) {\n this[SENTRY_SPAN_SYMBOL] = true as const;\n this._tag = 'Span' as const;\n this.attributes = new Map<string, unknown>();\n this.parent = parent;\n this.links = [...links];\n this.sentrySpan = existingSpan;\n this.annotations = context;\n\n const spanContext = this.sentrySpan.spanContext();\n this.spanId = spanContext.spanId;\n this.traceId = spanContext.traceId;\n this.sampled = this.sentrySpan.isRecording();\n this.status = {\n _tag: 'Started',\n startTime,\n };\n }\n\n public attribute(key: string, value: unknown): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.setAttribute(key, value as Parameters<Span['setAttribute']>[1]);\n this.attributes.set(key, value);\n }\n\n public addLinks(links: ReadonlyArray<EffectTracer.SpanLink>): void {\n this.links.push(...links);\n }\n\n public end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {\n this.status = {\n _tag: 'Ended',\n endTime,\n exit,\n startTime: this.status.startTime,\n };\n\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n if (Exit.isFailure(exit)) {\n const message = getErrorMessage(exit) ?? 'internal_error';\n this.sentrySpan.setStatus({ code: 2, message });\n } else {\n this.sentrySpan.setStatus({ code: 1 });\n }\n\n this.sentrySpan.end(nanosToHrTime(endTime));\n }\n\n public event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.addEvent(name, attributes as Parameters<Span['addEvent']>[1], nanosToHrTime(startTime));\n }\n}\n\nfunction createSentrySpan(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n): SentrySpanLike {\n const parentSentrySpan =\n Option.isSome(parent) && isSentrySpan(parent.value) ? parent.value.sentrySpan : (getActiveSpan() ?? null);\n\n const newSpan = startInactiveSpan({\n name,\n startTime: nanosToHrTime(startTime),\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: deriveOrigin(name),\n },\n ...(parentSentrySpan ? { parentSpan: parentSentrySpan } : {}),\n });\n\n return new SentrySpanWrapper(name, parent, context, links, startTime, kind, newSpan);\n}\n\n// Check if we're running Effect v4 by checking the Exit/Cause structure\n// In v4, causes have a 'reasons' array\n// In v3, causes have '_tag' directly on the cause object\nconst isEffectV4 = (() => {\n try {\n const testExit = Exit.fail('test') as unknown as { cause?: unknown };\n const cause = testExit.cause;\n // v4 causes have 'reasons' array, v3 causes have '_tag' directly\n if (cause && typeof cause === 'object' && 'reasons' in cause) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n})();\n\nconst makeSentryTracerV3 = (): EffectTracer.Tracer => {\n // Effect v3 API: span(name, parent, context, links, startTime, kind)\n return EffectTracer.make({\n span(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n ) {\n return createSentrySpan(name, parent, context, links, startTime, kind);\n },\n context(execution: () => unknown, fiber: { currentSpan?: EffectTracer.AnySpan }) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return execution();\n }\n return withActiveSpan(currentSpan.sentrySpan, execution);\n },\n } as unknown as EffectTracer.Tracer);\n};\n\nconst makeSentryTracerV4 = (): EffectTracer.Tracer => {\n const EFFECT_EVALUATE = '~effect/Effect/evaluate' as const;\n\n return EffectTracer.make({\n span(options) {\n return createSentrySpan(\n options.name,\n options.parent,\n options.annotations,\n options.links,\n options.startTime,\n options.kind,\n );\n },\n context(primitive, fiber) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return primitive[EFFECT_EVALUATE](fiber);\n }\n return withActiveSpan(currentSpan.sentrySpan, () => primitive[EFFECT_EVALUATE](fiber));\n },\n });\n};\n\n/**\n * Effect Layer that sets up the Sentry tracer for Effect spans.\n */\nexport const SentryEffectTracer = isEffectV4 ? makeSentryTracerV4() : makeSentryTracerV3();\n"],"names":["getActiveSpan","startInactiveSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","withActiveSpan"],"mappings":"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"}
1
+ {"version":3,"file":"tracer.js","sources":["../../src/tracer.ts"],"sourcesContent":["import type { Span } from '@sentry/core';\nimport {\n isObjectLike,\n getActiveSpan,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\nimport type * as Context from 'effect/Context';\nimport * as Exit from 'effect/Exit';\nimport * as Option from 'effect/Option';\nimport * as EffectTracer from 'effect/Tracer';\n\nfunction deriveOrigin(name: string): string {\n if (name.startsWith('http.server') || name.startsWith('http.client')) {\n return 'auto.http.effect';\n }\n\n return 'auto.function.effect';\n}\n\ntype HrTime = [number, number];\n\nconst SENTRY_SPAN_SYMBOL = Symbol.for('@sentry/effect.SentrySpan');\n\nfunction nanosToHrTime(nanos: bigint): HrTime {\n const seconds = Number(nanos / BigInt(1_000_000_000));\n const remainingNanos = Number(nanos % BigInt(1_000_000_000));\n return [seconds, remainingNanos];\n}\n\ninterface SentrySpanLike extends EffectTracer.Span {\n readonly [SENTRY_SPAN_SYMBOL]: true;\n readonly sentrySpan: Span;\n}\n\nfunction isSentrySpan(span: EffectTracer.AnySpan): span is SentrySpanLike {\n return SENTRY_SPAN_SYMBOL in span;\n}\n\nfunction getErrorMessage(exit: Exit.Exit<unknown, unknown>): string | undefined {\n if (!Exit.isFailure(exit)) {\n return undefined;\n }\n\n const cause = exit.cause as unknown;\n\n // Effect v4: cause.reasons is an array of Reason objects\n if (isObjectLike(cause) && 'reasons' in cause && Array.isArray((cause as { reasons: unknown }).reasons)) {\n const reasons = (cause as { reasons: Array<{ _tag?: string; error?: unknown; defect?: unknown }> }).reasons;\n for (const reason of reasons) {\n if (reason._tag === 'Fail' && reason.error !== undefined) {\n return String(reason.error);\n }\n if (reason._tag === 'Die' && reason.defect !== undefined) {\n return String(reason.defect);\n }\n }\n return 'internal_error';\n }\n\n // Effect v3: cause has _tag directly\n if (isObjectLike(cause) && '_tag' in cause) {\n const v3Cause = cause as { _tag: string; error?: unknown; defect?: unknown };\n if (v3Cause._tag === 'Fail') {\n return String(v3Cause.error);\n }\n if (v3Cause._tag === 'Die') {\n return String(v3Cause.defect);\n }\n }\n\n return 'internal_error';\n}\n\nclass SentrySpanWrapper implements SentrySpanLike {\n public readonly [SENTRY_SPAN_SYMBOL]: true;\n public readonly _tag: 'Span';\n public readonly spanId: string;\n public readonly traceId: string;\n public readonly attributes: Map<string, unknown>;\n public readonly sampled: boolean;\n public readonly parent: Option.Option<EffectTracer.AnySpan>;\n public readonly links: Array<EffectTracer.SpanLink>;\n public status: EffectTracer.SpanStatus;\n public readonly sentrySpan: Span;\n public readonly annotations: Context.Context<never>;\n\n public constructor(\n public readonly name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n public readonly context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n public readonly kind: EffectTracer.SpanKind,\n existingSpan: Span,\n ) {\n this[SENTRY_SPAN_SYMBOL] = true as const;\n this._tag = 'Span' as const;\n this.attributes = new Map<string, unknown>();\n this.parent = parent;\n this.links = [...links];\n this.sentrySpan = existingSpan;\n this.annotations = context;\n\n const spanContext = this.sentrySpan.spanContext();\n this.spanId = spanContext.spanId;\n this.traceId = spanContext.traceId;\n this.sampled = this.sentrySpan.isRecording();\n this.status = {\n _tag: 'Started',\n startTime,\n };\n }\n\n public attribute(key: string, value: unknown): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.setAttribute(key, value as Parameters<Span['setAttribute']>[1]);\n this.attributes.set(key, value);\n }\n\n public addLinks(links: ReadonlyArray<EffectTracer.SpanLink>): void {\n this.links.push(...links);\n }\n\n public end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {\n this.status = {\n _tag: 'Ended',\n endTime,\n exit,\n startTime: this.status.startTime,\n };\n\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n if (Exit.isFailure(exit)) {\n const message = getErrorMessage(exit) ?? 'internal_error';\n this.sentrySpan.setStatus({ code: 2, message });\n } else {\n this.sentrySpan.setStatus({ code: 1 });\n }\n\n this.sentrySpan.end(nanosToHrTime(endTime));\n }\n\n public event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.addEvent(name, attributes as Parameters<Span['addEvent']>[1], nanosToHrTime(startTime));\n }\n}\n\nfunction createSentrySpan(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n): SentrySpanLike {\n const parentSentrySpan =\n Option.isSome(parent) && isSentrySpan(parent.value) ? parent.value.sentrySpan : (getActiveSpan() ?? null);\n\n const newSpan = startInactiveSpan({\n name,\n startTime: nanosToHrTime(startTime),\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: deriveOrigin(name),\n },\n ...(parentSentrySpan ? { parentSpan: parentSentrySpan } : {}),\n });\n\n return new SentrySpanWrapper(name, parent, context, links, startTime, kind, newSpan);\n}\n\n// Check if we're running Effect v4 by checking the Exit/Cause structure\n// In v4, causes have a 'reasons' array\n// In v3, causes have '_tag' directly on the cause object\nconst isEffectV4 = (() => {\n try {\n const testExit = Exit.fail('test') as unknown as { cause?: unknown };\n const cause = testExit.cause;\n // v4 causes have 'reasons' array, v3 causes have '_tag' directly\n if (isObjectLike(cause) && 'reasons' in cause) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n})();\n\nconst makeSentryTracerV3 = (): EffectTracer.Tracer => {\n // Effect v3 API: span(name, parent, context, links, startTime, kind)\n return EffectTracer.make({\n span(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n ) {\n return createSentrySpan(name, parent, context, links, startTime, kind);\n },\n context(execution: () => unknown, fiber: { currentSpan?: EffectTracer.AnySpan }) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return execution();\n }\n return withActiveSpan(currentSpan.sentrySpan, execution);\n },\n } as unknown as EffectTracer.Tracer);\n};\n\nconst makeSentryTracerV4 = (): EffectTracer.Tracer => {\n const EFFECT_EVALUATE = '~effect/Effect/evaluate' as const;\n\n return EffectTracer.make({\n span(options) {\n return createSentrySpan(\n options.name,\n options.parent,\n options.annotations,\n options.links,\n options.startTime,\n options.kind,\n );\n },\n context(primitive, fiber) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return primitive[EFFECT_EVALUATE](fiber);\n }\n return withActiveSpan(currentSpan.sentrySpan, () => primitive[EFFECT_EVALUATE](fiber));\n },\n });\n};\n\n/**\n * Effect Layer that sets up the Sentry tracer for Effect spans.\n */\nexport const SentryEffectTracer = isEffectV4 ? makeSentryTracerV4() : makeSentryTracerV3();\n"],"names":["isObjectLike","getActiveSpan","startInactiveSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","withActiveSpan"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { logger } from '@sentry/core';
1
+ import { logger, isObjectLike } from '@sentry/core';
2
2
  import * as Logger from 'effect/Logger';
3
3
 
4
4
  function getLogLevelTag(logLevel) {
5
5
  if (typeof logLevel === "string") {
6
6
  return logLevel;
7
7
  }
8
- if (logLevel && typeof logLevel === "object" && "_tag" in logLevel) {
8
+ if (isObjectLike(logLevel) && "_tag" in logLevel) {
9
9
  return logLevel._tag;
10
10
  }
11
11
  return "Info";
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../src/logger.ts"],"sourcesContent":["import { logger as sentryLogger } from '@sentry/core';\nimport * as Logger from 'effect/Logger';\nimport type * as LogLevel from 'effect/LogLevel';\n\nfunction getLogLevelTag(logLevel: LogLevel.LogLevel): LogLevel.LogLevel | 'Warning' {\n // Effect v4: logLevel is a string literal directly\n if (typeof logLevel === 'string') {\n return logLevel;\n }\n\n // Effect v3: logLevel has _tag property\n if (logLevel && typeof logLevel === 'object' && '_tag' in logLevel) {\n return (logLevel as { _tag: LogLevel.LogLevel })._tag;\n }\n\n return 'Info';\n}\n\n/**\n * Effect Logger that sends logs to Sentry.\n */\nexport const SentryEffectLogger = Logger.make(({ logLevel, message }) => {\n let msg: string;\n if (typeof message === 'string') {\n msg = message;\n } else if (Array.isArray(message) && message.length === 1) {\n const firstElement = message[0];\n msg = typeof firstElement === 'string' ? firstElement : JSON.stringify(firstElement);\n } else {\n msg = JSON.stringify(message);\n }\n\n const tag = getLogLevelTag(logLevel);\n\n switch (tag) {\n case 'Fatal':\n sentryLogger.fatal(msg);\n break;\n case 'Error':\n sentryLogger.error(msg);\n break;\n case 'Warning': // Effect v3\n case 'Warn': // Effect v4\n sentryLogger.warn(msg);\n break;\n case 'Info':\n sentryLogger.info(msg);\n break;\n case 'Debug':\n sentryLogger.debug(msg);\n break;\n case 'Trace':\n sentryLogger.trace(msg);\n break;\n case 'All':\n case 'None':\n break;\n default:\n tag satisfies never;\n }\n});\n"],"names":["sentryLogger"],"mappings":";;;AAIA,SAAS,eAAe,QAAA,EAA4D;AAElF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,IAAY,UAAU,QAAA,EAAU;AAClE,IAAA,OAAQ,QAAA,CAAyC,IAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,MAAM,qBAAqB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AACvE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,GAAA,GAAM,OAAA;AAAA,EACR,WAAW,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACzD,IAAA,MAAM,YAAA,GAAe,QAAQ,CAAC,CAAA;AAC9B,IAAA,GAAA,GAAM,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,EACrF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,GAAA,GAAM,eAAe,QAAQ,CAAA;AAEnC,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,SAAA;AAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAAA,MAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAAA,MAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAKA;AAEN,CAAC;;;;"}
1
+ {"version":3,"file":"logger.js","sources":["../../src/logger.ts"],"sourcesContent":["import { isObjectLike, logger as sentryLogger } from '@sentry/core';\nimport * as Logger from 'effect/Logger';\nimport type * as LogLevel from 'effect/LogLevel';\n\nfunction getLogLevelTag(logLevel: LogLevel.LogLevel): LogLevel.LogLevel | 'Warning' {\n // Effect v4: logLevel is a string literal directly\n if (typeof logLevel === 'string') {\n return logLevel;\n }\n\n // Effect v3: logLevel has _tag property\n if (isObjectLike(logLevel) && '_tag' in logLevel) {\n return (logLevel as { _tag: LogLevel.LogLevel })._tag;\n }\n\n return 'Info';\n}\n\n/**\n * Effect Logger that sends logs to Sentry.\n */\nexport const SentryEffectLogger = Logger.make(({ logLevel, message }) => {\n let msg: string;\n if (typeof message === 'string') {\n msg = message;\n } else if (Array.isArray(message) && message.length === 1) {\n const firstElement = message[0];\n msg = typeof firstElement === 'string' ? firstElement : JSON.stringify(firstElement);\n } else {\n msg = JSON.stringify(message);\n }\n\n const tag = getLogLevelTag(logLevel);\n\n switch (tag) {\n case 'Fatal':\n sentryLogger.fatal(msg);\n break;\n case 'Error':\n sentryLogger.error(msg);\n break;\n case 'Warning': // Effect v3\n case 'Warn': // Effect v4\n sentryLogger.warn(msg);\n break;\n case 'Info':\n sentryLogger.info(msg);\n break;\n case 'Debug':\n sentryLogger.debug(msg);\n break;\n case 'Trace':\n sentryLogger.trace(msg);\n break;\n case 'All':\n case 'None':\n break;\n default:\n tag satisfies never;\n }\n});\n"],"names":["sentryLogger"],"mappings":";;;AAIA,SAAS,eAAe,QAAA,EAA4D;AAElF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,IAAK,MAAA,IAAU,QAAA,EAAU;AAChD,IAAA,OAAQ,QAAA,CAAyC,IAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,MAAM,qBAAqB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AACvE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,GAAA,GAAM,OAAA;AAAA,EACR,WAAW,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACzD,IAAA,MAAM,YAAA,GAAe,QAAQ,CAAC,CAAA;AAC9B,IAAA,GAAA,GAAM,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,EACrF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,GAAA,GAAM,eAAe,QAAQ,CAAA;AAEnC,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,SAAA;AAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAAA,MAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAAA,MAAA,CAAa,KAAK,GAAG,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAAA,MAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA;AAKA;AAEN,CAAC;;;;"}
@@ -1 +1 @@
1
- {"type":"module","version":"10.63.0","sideEffects":false}
1
+ {"type":"module","version":"10.65.0","sideEffects":false}
@@ -1,4 +1,4 @@
1
- import { withActiveSpan, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
1
+ import { isObjectLike, withActiveSpan, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
2
2
  import * as Exit from 'effect/Exit';
3
3
  import * as Option from 'effect/Option';
4
4
  import * as EffectTracer from 'effect/Tracer';
@@ -23,7 +23,7 @@ function getErrorMessage(exit) {
23
23
  return void 0;
24
24
  }
25
25
  const cause = exit.cause;
26
- if (cause && typeof cause === "object" && "reasons" in cause && Array.isArray(cause.reasons)) {
26
+ if (isObjectLike(cause) && "reasons" in cause && Array.isArray(cause.reasons)) {
27
27
  const reasons = cause.reasons;
28
28
  for (const reason of reasons) {
29
29
  if (reason._tag === "Fail" && reason.error !== void 0) {
@@ -35,7 +35,7 @@ function getErrorMessage(exit) {
35
35
  }
36
36
  return "internal_error";
37
37
  }
38
- if (cause && typeof cause === "object" && "_tag" in cause) {
38
+ if (isObjectLike(cause) && "_tag" in cause) {
39
39
  const v3Cause = cause;
40
40
  if (v3Cause._tag === "Fail") {
41
41
  return String(v3Cause.error);
@@ -118,7 +118,7 @@ const isEffectV4 = (() => {
118
118
  try {
119
119
  const testExit = Exit.fail("test");
120
120
  const cause = testExit.cause;
121
- if (cause && typeof cause === "object" && "reasons" in cause) {
121
+ if (isObjectLike(cause) && "reasons" in cause) {
122
122
  return true;
123
123
  }
124
124
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sources":["../../src/tracer.ts"],"sourcesContent":["import type { Span } from '@sentry/core';\nimport { getActiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport type * as Context from 'effect/Context';\nimport * as Exit from 'effect/Exit';\nimport * as Option from 'effect/Option';\nimport * as EffectTracer from 'effect/Tracer';\n\nfunction deriveOrigin(name: string): string {\n if (name.startsWith('http.server') || name.startsWith('http.client')) {\n return 'auto.http.effect';\n }\n\n return 'auto.function.effect';\n}\n\ntype HrTime = [number, number];\n\nconst SENTRY_SPAN_SYMBOL = Symbol.for('@sentry/effect.SentrySpan');\n\nfunction nanosToHrTime(nanos: bigint): HrTime {\n const seconds = Number(nanos / BigInt(1_000_000_000));\n const remainingNanos = Number(nanos % BigInt(1_000_000_000));\n return [seconds, remainingNanos];\n}\n\ninterface SentrySpanLike extends EffectTracer.Span {\n readonly [SENTRY_SPAN_SYMBOL]: true;\n readonly sentrySpan: Span;\n}\n\nfunction isSentrySpan(span: EffectTracer.AnySpan): span is SentrySpanLike {\n return SENTRY_SPAN_SYMBOL in span;\n}\n\nfunction getErrorMessage(exit: Exit.Exit<unknown, unknown>): string | undefined {\n if (!Exit.isFailure(exit)) {\n return undefined;\n }\n\n const cause = exit.cause as unknown;\n\n // Effect v4: cause.reasons is an array of Reason objects\n if (\n cause &&\n typeof cause === 'object' &&\n 'reasons' in cause &&\n Array.isArray((cause as { reasons: unknown }).reasons)\n ) {\n const reasons = (cause as { reasons: Array<{ _tag?: string; error?: unknown; defect?: unknown }> }).reasons;\n for (const reason of reasons) {\n if (reason._tag === 'Fail' && reason.error !== undefined) {\n return String(reason.error);\n }\n if (reason._tag === 'Die' && reason.defect !== undefined) {\n return String(reason.defect);\n }\n }\n return 'internal_error';\n }\n\n // Effect v3: cause has _tag directly\n if (cause && typeof cause === 'object' && '_tag' in cause) {\n const v3Cause = cause as { _tag: string; error?: unknown; defect?: unknown };\n if (v3Cause._tag === 'Fail') {\n return String(v3Cause.error);\n }\n if (v3Cause._tag === 'Die') {\n return String(v3Cause.defect);\n }\n }\n\n return 'internal_error';\n}\n\nclass SentrySpanWrapper implements SentrySpanLike {\n public readonly [SENTRY_SPAN_SYMBOL]: true;\n public readonly _tag: 'Span';\n public readonly spanId: string;\n public readonly traceId: string;\n public readonly attributes: Map<string, unknown>;\n public readonly sampled: boolean;\n public readonly parent: Option.Option<EffectTracer.AnySpan>;\n public readonly links: Array<EffectTracer.SpanLink>;\n public status: EffectTracer.SpanStatus;\n public readonly sentrySpan: Span;\n public readonly annotations: Context.Context<never>;\n\n public constructor(\n public readonly name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n public readonly context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n public readonly kind: EffectTracer.SpanKind,\n existingSpan: Span,\n ) {\n this[SENTRY_SPAN_SYMBOL] = true as const;\n this._tag = 'Span' as const;\n this.attributes = new Map<string, unknown>();\n this.parent = parent;\n this.links = [...links];\n this.sentrySpan = existingSpan;\n this.annotations = context;\n\n const spanContext = this.sentrySpan.spanContext();\n this.spanId = spanContext.spanId;\n this.traceId = spanContext.traceId;\n this.sampled = this.sentrySpan.isRecording();\n this.status = {\n _tag: 'Started',\n startTime,\n };\n }\n\n public attribute(key: string, value: unknown): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.setAttribute(key, value as Parameters<Span['setAttribute']>[1]);\n this.attributes.set(key, value);\n }\n\n public addLinks(links: ReadonlyArray<EffectTracer.SpanLink>): void {\n this.links.push(...links);\n }\n\n public end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {\n this.status = {\n _tag: 'Ended',\n endTime,\n exit,\n startTime: this.status.startTime,\n };\n\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n if (Exit.isFailure(exit)) {\n const message = getErrorMessage(exit) ?? 'internal_error';\n this.sentrySpan.setStatus({ code: 2, message });\n } else {\n this.sentrySpan.setStatus({ code: 1 });\n }\n\n this.sentrySpan.end(nanosToHrTime(endTime));\n }\n\n public event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.addEvent(name, attributes as Parameters<Span['addEvent']>[1], nanosToHrTime(startTime));\n }\n}\n\nfunction createSentrySpan(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n): SentrySpanLike {\n const parentSentrySpan =\n Option.isSome(parent) && isSentrySpan(parent.value) ? parent.value.sentrySpan : (getActiveSpan() ?? null);\n\n const newSpan = startInactiveSpan({\n name,\n startTime: nanosToHrTime(startTime),\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: deriveOrigin(name),\n },\n ...(parentSentrySpan ? { parentSpan: parentSentrySpan } : {}),\n });\n\n return new SentrySpanWrapper(name, parent, context, links, startTime, kind, newSpan);\n}\n\n// Check if we're running Effect v4 by checking the Exit/Cause structure\n// In v4, causes have a 'reasons' array\n// In v3, causes have '_tag' directly on the cause object\nconst isEffectV4 = (() => {\n try {\n const testExit = Exit.fail('test') as unknown as { cause?: unknown };\n const cause = testExit.cause;\n // v4 causes have 'reasons' array, v3 causes have '_tag' directly\n if (cause && typeof cause === 'object' && 'reasons' in cause) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n})();\n\nconst makeSentryTracerV3 = (): EffectTracer.Tracer => {\n // Effect v3 API: span(name, parent, context, links, startTime, kind)\n return EffectTracer.make({\n span(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n ) {\n return createSentrySpan(name, parent, context, links, startTime, kind);\n },\n context(execution: () => unknown, fiber: { currentSpan?: EffectTracer.AnySpan }) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return execution();\n }\n return withActiveSpan(currentSpan.sentrySpan, execution);\n },\n } as unknown as EffectTracer.Tracer);\n};\n\nconst makeSentryTracerV4 = (): EffectTracer.Tracer => {\n const EFFECT_EVALUATE = '~effect/Effect/evaluate' as const;\n\n return EffectTracer.make({\n span(options) {\n return createSentrySpan(\n options.name,\n options.parent,\n options.annotations,\n options.links,\n options.startTime,\n options.kind,\n );\n },\n context(primitive, fiber) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return primitive[EFFECT_EVALUATE](fiber);\n }\n return withActiveSpan(currentSpan.sentrySpan, () => primitive[EFFECT_EVALUATE](fiber));\n },\n });\n};\n\n/**\n * Effect Layer that sets up the Sentry tracer for Effect spans.\n */\nexport const SentryEffectTracer = isEffectV4 ? makeSentryTracerV4() : makeSentryTracerV3();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracer.js","sources":["../../src/tracer.ts"],"sourcesContent":["import type { Span } from '@sentry/core';\nimport {\n isObjectLike,\n getActiveSpan,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\nimport type * as Context from 'effect/Context';\nimport * as Exit from 'effect/Exit';\nimport * as Option from 'effect/Option';\nimport * as EffectTracer from 'effect/Tracer';\n\nfunction deriveOrigin(name: string): string {\n if (name.startsWith('http.server') || name.startsWith('http.client')) {\n return 'auto.http.effect';\n }\n\n return 'auto.function.effect';\n}\n\ntype HrTime = [number, number];\n\nconst SENTRY_SPAN_SYMBOL = Symbol.for('@sentry/effect.SentrySpan');\n\nfunction nanosToHrTime(nanos: bigint): HrTime {\n const seconds = Number(nanos / BigInt(1_000_000_000));\n const remainingNanos = Number(nanos % BigInt(1_000_000_000));\n return [seconds, remainingNanos];\n}\n\ninterface SentrySpanLike extends EffectTracer.Span {\n readonly [SENTRY_SPAN_SYMBOL]: true;\n readonly sentrySpan: Span;\n}\n\nfunction isSentrySpan(span: EffectTracer.AnySpan): span is SentrySpanLike {\n return SENTRY_SPAN_SYMBOL in span;\n}\n\nfunction getErrorMessage(exit: Exit.Exit<unknown, unknown>): string | undefined {\n if (!Exit.isFailure(exit)) {\n return undefined;\n }\n\n const cause = exit.cause as unknown;\n\n // Effect v4: cause.reasons is an array of Reason objects\n if (isObjectLike(cause) && 'reasons' in cause && Array.isArray((cause as { reasons: unknown }).reasons)) {\n const reasons = (cause as { reasons: Array<{ _tag?: string; error?: unknown; defect?: unknown }> }).reasons;\n for (const reason of reasons) {\n if (reason._tag === 'Fail' && reason.error !== undefined) {\n return String(reason.error);\n }\n if (reason._tag === 'Die' && reason.defect !== undefined) {\n return String(reason.defect);\n }\n }\n return 'internal_error';\n }\n\n // Effect v3: cause has _tag directly\n if (isObjectLike(cause) && '_tag' in cause) {\n const v3Cause = cause as { _tag: string; error?: unknown; defect?: unknown };\n if (v3Cause._tag === 'Fail') {\n return String(v3Cause.error);\n }\n if (v3Cause._tag === 'Die') {\n return String(v3Cause.defect);\n }\n }\n\n return 'internal_error';\n}\n\nclass SentrySpanWrapper implements SentrySpanLike {\n public readonly [SENTRY_SPAN_SYMBOL]: true;\n public readonly _tag: 'Span';\n public readonly spanId: string;\n public readonly traceId: string;\n public readonly attributes: Map<string, unknown>;\n public readonly sampled: boolean;\n public readonly parent: Option.Option<EffectTracer.AnySpan>;\n public readonly links: Array<EffectTracer.SpanLink>;\n public status: EffectTracer.SpanStatus;\n public readonly sentrySpan: Span;\n public readonly annotations: Context.Context<never>;\n\n public constructor(\n public readonly name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n public readonly context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n public readonly kind: EffectTracer.SpanKind,\n existingSpan: Span,\n ) {\n this[SENTRY_SPAN_SYMBOL] = true as const;\n this._tag = 'Span' as const;\n this.attributes = new Map<string, unknown>();\n this.parent = parent;\n this.links = [...links];\n this.sentrySpan = existingSpan;\n this.annotations = context;\n\n const spanContext = this.sentrySpan.spanContext();\n this.spanId = spanContext.spanId;\n this.traceId = spanContext.traceId;\n this.sampled = this.sentrySpan.isRecording();\n this.status = {\n _tag: 'Started',\n startTime,\n };\n }\n\n public attribute(key: string, value: unknown): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.setAttribute(key, value as Parameters<Span['setAttribute']>[1]);\n this.attributes.set(key, value);\n }\n\n public addLinks(links: ReadonlyArray<EffectTracer.SpanLink>): void {\n this.links.push(...links);\n }\n\n public end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {\n this.status = {\n _tag: 'Ended',\n endTime,\n exit,\n startTime: this.status.startTime,\n };\n\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n if (Exit.isFailure(exit)) {\n const message = getErrorMessage(exit) ?? 'internal_error';\n this.sentrySpan.setStatus({ code: 2, message });\n } else {\n this.sentrySpan.setStatus({ code: 1 });\n }\n\n this.sentrySpan.end(nanosToHrTime(endTime));\n }\n\n public event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {\n if (!this.sentrySpan.isRecording()) {\n return;\n }\n\n this.sentrySpan.addEvent(name, attributes as Parameters<Span['addEvent']>[1], nanosToHrTime(startTime));\n }\n}\n\nfunction createSentrySpan(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n): SentrySpanLike {\n const parentSentrySpan =\n Option.isSome(parent) && isSentrySpan(parent.value) ? parent.value.sentrySpan : (getActiveSpan() ?? null);\n\n const newSpan = startInactiveSpan({\n name,\n startTime: nanosToHrTime(startTime),\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: deriveOrigin(name),\n },\n ...(parentSentrySpan ? { parentSpan: parentSentrySpan } : {}),\n });\n\n return new SentrySpanWrapper(name, parent, context, links, startTime, kind, newSpan);\n}\n\n// Check if we're running Effect v4 by checking the Exit/Cause structure\n// In v4, causes have a 'reasons' array\n// In v3, causes have '_tag' directly on the cause object\nconst isEffectV4 = (() => {\n try {\n const testExit = Exit.fail('test') as unknown as { cause?: unknown };\n const cause = testExit.cause;\n // v4 causes have 'reasons' array, v3 causes have '_tag' directly\n if (isObjectLike(cause) && 'reasons' in cause) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n})();\n\nconst makeSentryTracerV3 = (): EffectTracer.Tracer => {\n // Effect v3 API: span(name, parent, context, links, startTime, kind)\n return EffectTracer.make({\n span(\n name: string,\n parent: Option.Option<EffectTracer.AnySpan>,\n context: Context.Context<never>,\n links: ReadonlyArray<EffectTracer.SpanLink>,\n startTime: bigint,\n kind: EffectTracer.SpanKind,\n ) {\n return createSentrySpan(name, parent, context, links, startTime, kind);\n },\n context(execution: () => unknown, fiber: { currentSpan?: EffectTracer.AnySpan }) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return execution();\n }\n return withActiveSpan(currentSpan.sentrySpan, execution);\n },\n } as unknown as EffectTracer.Tracer);\n};\n\nconst makeSentryTracerV4 = (): EffectTracer.Tracer => {\n const EFFECT_EVALUATE = '~effect/Effect/evaluate' as const;\n\n return EffectTracer.make({\n span(options) {\n return createSentrySpan(\n options.name,\n options.parent,\n options.annotations,\n options.links,\n options.startTime,\n options.kind,\n );\n },\n context(primitive, fiber) {\n const currentSpan = fiber.currentSpan;\n if (currentSpan === undefined || !isSentrySpan(currentSpan)) {\n return primitive[EFFECT_EVALUATE](fiber);\n }\n return withActiveSpan(currentSpan.sentrySpan, () => primitive[EFFECT_EVALUATE](fiber));\n },\n });\n};\n\n/**\n * Effect Layer that sets up the Sentry tracer for Effect spans.\n */\nexport const SentryEffectTracer = isEffectV4 ? makeSentryTracerV4() : makeSentryTracerV3();\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAgP9C;;GAEG;AACH,eAAO,MAAM,kBAAkB,qBAA2D,CAAC"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AA2O9C;;GAEG;AACH,eAAO,MAAM,kBAAkB,qBAA2D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/effect",
3
- "version": "10.63.0",
3
+ "version": "10.65.0",
4
4
  "description": "Official Sentry SDK for Effect",
5
5
  "repository": "git://github.com/getsentry/sentry-javascript.git",
6
6
  "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/effect",
@@ -57,9 +57,9 @@
57
57
  "access": "public"
58
58
  },
59
59
  "dependencies": {
60
- "@sentry/browser": "10.63.0",
61
- "@sentry/core": "10.63.0",
62
- "@sentry/node-core": "10.63.0"
60
+ "@sentry/browser": "10.65.0",
61
+ "@sentry/core": "10.65.0",
62
+ "@sentry/node-core": "10.65.0"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "effect": "^3.0.0 || ^4.0.0-beta.50"