API Docs for: 5.4.0-alpha.76+f2a8fbf0
Show:

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

/**
  @module @ember-data/serializer
*/
import EmberObject from '@ember/object';

import type { LegacyAttributeField } from '@warp-drive/core-types/schema/fields';

/**
  The `Transform` class is used to serialize and deserialize model
  attributes when they are saved or loaded from an
  adapter. Subclassing `Transform` is useful for creating custom
  attributes. All subclasses of `Transform` must implement a
  `serialize` and a `deserialize` method.

  Example

  ```app/transforms/temperature.js

  // Converts centigrade in the JSON to fahrenheit in the app
  export default class TemperatureTransform {
    deserialize(serialized, options) {
      return (serialized *  1.8) + 32;
    }

    serialize(deserialized, options) {
      return (deserialized - 32) / 1.8;
    }

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

  Usage

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

  export default class RequirementModel extends Model {
    @attr('string') name;
    @attr('temperature') temperature;
  }
  ```

  The options passed into the `attr` function when the attribute is
  declared on the model is also available in the transform.

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

  export default class PostModel extends Model {
    @attr('string') title;
    @attr('markdown', {
      markdown: {
        gfm: false,
        sanitize: true
      }
    })
    markdown;
  }
  ```

  ```app/transforms/markdown.js
  export default class MarkdownTransform {
    serialize(deserialized, options) {
      return deserialized.raw;
    }

    deserialize(serialized, options) {
      let markdownOptions = options.markdown || {};

      return marked(serialized, markdownOptions);
    }

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

  @class Transform
  @public
 */
/**
  When given a deserialized value from a record attribute this
  method must return the serialized value.

  Example

  ```javascript
  serialize(deserialized, options) {
    return deserialized ? null : Number(deserialized);
  }
  ```

  @method serialize
  @public
  @param deserialized The deserialized value
  @param options hash of options passed to `attr`
  @return The serialized value
*/
/**
  When given a serialized value from a JSON object this method must
  return the deserialized value for the record attribute.

  Example

  ```javascript
  deserialize(serialized, options) {
    return empty(serialized) ? null : Number(serialized);
  }
  ```

  @method deserialize
  @public
  @param serialized The serialized value
  @param options hash of options passed to `attr`
  @return The deserialized value
*/
export interface Transform {
  serialize(value: unknown, options: LegacyAttributeField['options']): unknown;
  deserialize(value: unknown, options: LegacyAttributeField['options']): unknown;
}
export const Transform = EmberObject;