lib_shim_specs_transaction.js

/*
 * Copyright 2024 New Relic Corporation. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

'use strict'

const SegmentSpec = require('./segment')

/* eslint-disable jsdoc/require-property-description */
/**
 * @typedef {object} TransactionSpecParams
 * @mixes SegmentSpecParams
 * @property {boolean} [nest]
 * @property {string} [type]
 */

/**
 * Spec that describes the type of agent transaction to be created by the
 * function being wrapped by {@link TransactionShim.bindCreateTransaction}.
 */
class TransactionSpec extends SegmentSpec {
  /**
   * Indicates if the transaction being created is allowed to be nested within
   * another transaction of the same type. If `false`, the default, the
   * transaction will only be created if there is no existing transaction, or
   * the current transaction is of a different type. If `true`, the transaction
   * will be created regardless of the current transaction's type.
   *
   * @type {boolean}
   */
  nest

  /**
   * The type of the transaction to create. Must be one of the values from
   * {@link TransactionShim.TRANSACTION_TYPES}.
   *
   * @type {string}
   */
  type

  /* eslint-disable jsdoc/require-param-description */
  /**
   * @param {TransactionSpecParams} params
   */
  constructor(params) {
    super(params)

    this.nest = params.nest ?? false

    if (typeof params.type !== 'string') {
      throw Error('params.type must be a string')
    }
    this.type = params.type
  }
}

module.exports = TransactionSpec