public constructor()

in src/blob/lease/LeaseExpiredState.ts [17:144]


  public constructor(lease: ILease, context: Context) {
    if (context.startTime === undefined) {
      throw RangeError(
        `LeaseExpiredState:constructor() error, context.startTime is undefined.`
      );
    }

    if (lease.leaseState === LeaseStateType.Expired) {
      /*
       * LeaseState: Expired
       * LeaseStatus: Unlocked
       * LeaseDurationType: undefined
       * LeaseExpireTime: undefined
       * LeaseDurationSeconds: number
       * LeaseBreakTime: undefined
       * LeaseId: uuid
       */
      if (lease.leaseStatus !== LeaseStatusType.Unlocked) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming lease status ${lease.leaseStatus} is not ${LeaseStatusType.Unlocked}.`
        );
      }

      if (lease.leaseId === undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseId ${lease.leaseId} should not be undefined.`
        );
      }

      if (lease.leaseExpireTime !== undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseExpireTime ${lease.leaseExpireTime} is undefined.`
        );
      }

      if (
        lease.leaseDurationSeconds === undefined ||
        lease.leaseDurationSeconds === -1
      ) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseDurationSeconds ${lease.leaseDurationSeconds} is undefined or -1 (infinite).`
        );
      }

      if (lease.leaseDurationType !== undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseDurationType ${lease.leaseDurationType} is not undefined.`
        );
      }

      if (lease.leaseBreakTime !== undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseBreakTime ${lease.leaseBreakTime} is not undefined.`
        );
      }

      // Deep copy
      super({ ...lease }, context);
    } else if (lease.leaseState === LeaseStateType.Leased) {
      /*
       * LeaseState: Leased
       * LeaseStatus: Locked
       * LeaseDurationType: Fixed
       * LeaseExpireTime: now >= timestamp
       * LeaseDurationSeconds: number (not -1)
       * LeaseBreakTime: undefined
       * LeaseId: uuid
       */
      if (lease.leaseStatus !== LeaseStatusType.Locked) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming lease status ${lease.leaseStatus} is not ${LeaseStatusType.Locked}.`
        );
      }

      if (lease.leaseId === undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseId ${lease.leaseId} should not be undefined.`
        );
      }

      if (
        lease.leaseExpireTime === undefined ||
        context.startTime < lease.leaseExpireTime
      ) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseExpireTime ${lease.leaseExpireTime} is undefined, or larger than current time ${context.startTime}.`
        );
      }

      if (
        lease.leaseDurationSeconds === undefined ||
        lease.leaseDurationSeconds === -1
      ) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseDurationSeconds ${lease.leaseDurationSeconds} is undefined or -1 (infinite).`
        );
      }

      if (lease.leaseDurationType !== LeaseDurationType.Fixed) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseDurationType ${lease.leaseDurationType} is not ${LeaseDurationType.Fixed}.`
        );
      }

      if (lease.leaseBreakTime !== undefined) {
        throw RangeError(
          `LeaseExpiredState:constructor() error, incoming leaseBreakTime ${lease.leaseBreakTime} is not undefined.`
        );
      }

      super(
        {
          leaseId: lease.leaseId,
          leaseState: LeaseStateType.Expired,
          leaseStatus: LeaseStatusType.Unlocked,
          leaseDurationType: undefined,
          leaseDurationSeconds: lease.leaseDurationSeconds,
          leaseExpireTime: undefined,
          leaseBreakTime: undefined
        },
        context
      );
    } else {
      throw RangeError(
        `LeaseExpiredState:constructor() error, incoming lease state ${lease.leaseState} is neither ${LeaseStateType.Expired} or ${LeaseStateType.Leased}.`
      );
    }
  }