API Docs for: 5.4.0-beta.5+07ce8abc
Show:

File: ../packages/serializer/src/-private/transforms/boolean.ts

/**
  @module @ember-data/serializer
*/

import { TransformName } from '@warp-drive/core-types/symbols';

/**
  The `BooleanTransform` class is used to serialize and deserialize
  boolean attributes on Ember Data record objects. This transform is
  used when `boolean` is passed as the type parameter to the
  [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.

  Usage

  ```app/models/user.js
  import Model, { attr } from '@ember-data/model';

  export default class UserModel extends Model {
    @attr('boolean') isAdmin;
    @attr('string') name;
    @attr('string') email;
  }
  ```

  By default, the boolean transform only allows for values of `true` or
  `false`. You can opt into allowing `null` values for
  boolean attributes via `attr('boolean', { allowNull: true })`

  ```app/models/user.js
  import Model, { attr } from '@ember-data/model';

  export default class UserModel extends Model {
    @attr('string') email;
    @attr('string') username;
    @attr('boolean', { allowNull: true }) wantsWeeklyEmail;
  }
  ```

  @class BooleanTransform
  @public
 */
export class BooleanTransform {
  deserialize(serialized: boolean | null | number | string, options?: { allowNull?: boolean }): boolean | null {
    if ((serialized === null || serialized === undefined) && options?.allowNull === true) {
      return null;
    }

    if (typeof serialized === 'boolean') {
      return serialized;
    } else if (typeof serialized === 'string') {
      return /^(true|t|1)$/i.test(serialized);
    } else if (typeof serialized === 'number') {
      return serialized === 1;
    } else {
      return false;
    }
  }

  serialize(deserialized: boolean | null, options?: { allowNull?: boolean }): boolean | null {
    if ((deserialized === null || deserialized === undefined) && options?.allowNull === true) {
      return null;
    }

    return Boolean(deserialized);
  }

  [TransformName] = 'boolean' as const;

  static create() {
    return new this();
  }
}