@rvoh/dream
    Preparing search index...

    Class ObjectSerializerBuilder<MaybeNullDataType, PassthroughDataType, DataType>

    Type Parameters

    Index

    Constructors

    Properties

    attributes: (
        | InternalAnyTypedSerializerAttribute
        | InternalAnyTypedSerializerDelegatedAttribute
        | InternalAnyTypedSerializerCustomAttribute
        | InternalAnyTypedSerializerRendersOne<DataType, keyof DataType & string>
        | InternalAnyTypedSerializerRendersMany<DataType, keyof DataType & string>
    )[] = []
    passthroughData: PassthroughDataType = ...

    Methods

    • Includes an attribute from the data object in the serialized output.

      For ObjectSerializer, the openapi option is always required since type inference is not available for plain objects or ViewModels.

      Type Parameters

      • AttributeName extends string

      Parameters

      • name: AttributeName

        The attribute name from the data object

      • options: NonAutomaticSerializerAttributeOptionsWithPossibleDecimalRenderOption

        Configuration options:

        • openapi - (required) OpenAPI schema definition for the attribute
        • as - Rename the attribute key in the serialized output and OpenAPI shape
        • default - Value to use when the attribute is undefined
        • precision - Round decimal values to the specified number of decimal places (0–9) during rendering; does not affect the OpenAPI shape
        • required - Set to false to mark the attribute as optional in the OpenAPI schema; when omitted, attributes are required by default, meaning undefined values will serialize as null

      Returns ObjectSerializerBuilder<MaybeNullDataType, PassthroughDataType, DataType>

      The serializer builder for method chaining

      // Required OpenAPI schema
      .attribute('email', {
      openapi: { type: 'string', format: 'email' }
      })

      // With default value
      .attribute('status', {
      openapi: { type: 'string' },
      default: 'active'
      })

      // Rename output key
      .attribute('email', {
      openapi: { type: 'string' },
      as: 'userEmail'
      })

      // Round decimal to 2 places
      .attribute('price', {
      openapi: 'decimal',
      precision: 2
      })

      // Mark as optional in OpenAPI (omitted from response when undefined)
      .attribute('nickname', {
      openapi: 'string',
      required: false
      })
    • Includes a computed value in the serialized output.

      Executes a callback function to generate a custom attribute value. The openapi option is always required since the return type cannot be inferred.

      Unlike DreamSerializerBuilder's customAttribute, this version does not support as or precision.

      Parameters

      • name: string

        The attribute name for the computed value

      • fn: () => unknown

        Callback function that returns the computed value

      • options: Omit<NonAutomaticSerializerAttributeOptions, "as"> & { flatten?: boolean }

        Configuration options:

        • openapi - (required) OpenAPI schema definition for the computed value
        • default - Value to use when the callback returns undefined
        • flatten - When true, spreads the returned object's properties directly into the parent serialized output instead of nesting them under name; the openapi option should then define each flattened property individually
        • required - Set to false to mark the attribute as optional in the OpenAPI schema; when omitted, attributes are required by default

      Returns ObjectSerializerBuilder<MaybeNullDataType, PassthroughDataType, DataType>

      The serializer builder for method chaining

      // Simple computed value
      .customAttribute('fullName', () =>
      `${user.firstName} ${user.lastName}`,
      { openapi: { type: 'string' } }
      )

      // Flattened object properties
      .customAttribute('coordinates', () => ({ lat: 40.7, lng: -74.0 }), {
      flatten: true,
      openapi: {
      lat: { type: 'number' },
      lng: { type: 'number' }
      }
      })
    • Includes an attribute from a nested object in the serialized output.

      Accesses targetName.name on the data object. The openapi option is always required. When the target object or the delegated attribute is null/undefined, the resolution order is:

      1. default if provided → renders the default value
      2. required: false → omits the key entirely from the rendered output
      3. otherwise → renders null

      optional and required are not aliases — they encode different things and can be used together:

      • optional: true is an OpenAPI-only marker (no runtime effect). It declares that the rendered value may be null. Use this when you want the key to always be present but the value to be nullable in the schema.
      • required: false affects both runtime and OpenAPI. At runtime, when the resolved value is undefined, the key is omitted from the rendered output. In OpenAPI, the field is marked as not required.

      Type Parameters

      Parameters

      • targetName: TargetName

        The property name containing the target object

      • name: AttributeName

        The attribute name within the target object

      • options: NonAutomaticSerializerAttributeOptions & { precision?: RoundingPrecision } & {
            optional?: boolean;
        }

        Configuration options:

        • openapi - (required) OpenAPI schema definition for the attribute
        • as - Rename the attribute key in the serialized output and OpenAPI shape (e.g., delegating 'profile', 'avatarUrl' with as: 'avatar' outputs the value under avatar)
        • default - Value to use when the target object or its attribute is null/undefined
        • optional - Set to true to mark the value as nullable in the OpenAPI schema (wraps the type in anyOf: [schema, { type: 'null' }]). OpenAPI-only — the key is still rendered (as null)
        • precision - Round decimal values to the specified number of decimal places (0–9) during rendering; does not affect the OpenAPI shape
        • required - Set to false to omit the key from the rendered output when the resolved value is undefined, and to mark the field as not required in the OpenAPI schema

      Returns ObjectSerializerBuilder<MaybeNullDataType, PassthroughDataType, DataType>

      The serializer builder for method chaining

      // Delegate to user.email
      .delegatedAttribute('user', 'email', {
      openapi: { type: 'string', format: 'email' }
      })

      // With default value for null target or attribute
      .delegatedAttribute('profile', 'displayName', {
      openapi: { type: 'string' },
      default: 'Anonymous User'
      })

      // Rename the output key
      .delegatedAttribute('profile', 'avatarUrl', {
      openapi: 'string',
      as: 'avatar'
      })
    • Executes the serializer and returns the serialized output.

      Processes all defined attributes, custom attributes, delegated attributes, and associations to produce the final serialized object.

      Parameters

      • passthrough: any = {}

        Additional data to pass through to nested serializers (e.g., locale, current user context)

      • opts: SerializerRendererOpts = {}

        Rendering options for customizing the serialization process

      Returns Record<string, any> | null

      The serialized object, suitable for JSON responses

      const result = UserViewModelSerializer(userVm).render()
      // Returns: { id: '123', email: 'user@example.com', ... }

      // With passthrough data for nested serializers
      const result = UserViewModelSerializer(userVm).render({ currentUserId: '456' })