All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.build.cjs.asyncContext.stackStrategy.js.map Maven / Gradle / Ivy

There is a newer version: 8.39.0
Show newest version
{"version":3,"file":"stackStrategy.js","sources":["../../../src/asyncContext/stackStrategy.ts"],"sourcesContent":["import type { Client, Scope as ScopeInterface } from '@sentry/types';\nimport { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes';\nimport { Scope } from '../scope';\n\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport type { AsyncContextStrategy } from './types';\n\ninterface Layer {\n  client?: Client;\n  scope: ScopeInterface;\n}\n\n/**\n * This is an object that holds a stack of scopes.\n */\nexport class AsyncContextStack {\n  private readonly _stack: [Layer, ...Layer[]];\n  private _isolationScope: ScopeInterface;\n\n  public constructor(scope?: ScopeInterface, isolationScope?: ScopeInterface) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n  public withScope(callback: (scope: ScopeInterface) => T): T {\n    const scope = this._pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          this._popScope();\n          return res;\n        },\n        e => {\n          this._popScope();\n          throw e;\n        },\n      );\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n  public getClient(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n  public getScope(): ScopeInterface {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n  public getIsolationScope(): ScopeInterface {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1] as Layer;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n  private _pushScope(): ScopeInterface {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n  private _popScope(): boolean {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack(): AsyncContextStack {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback: (scope: ScopeInterface) => T): T {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope: ScopeInterface, callback: (scope: ScopeInterface) => T): T {\n  const stack = getAsyncContextStack() as AsyncContextStack;\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope(callback: (isolationScope: ScopeInterface) => T): T {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nexport function getStackAsyncContextStrategy(): AsyncContextStrategy {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: (_isolationScope: ScopeInterface, callback: (isolationScope: ScopeInterface) => T) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n"],"names":["scope","Scope","isThenable","getMainCarrier","getSentryCarrier","getDefaultCurrentScope","getDefaultIsolationScope"],"mappings":"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"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy