Check out v4 of the Fauna CLI

v4 of the Fauna CLI is now in beta.

The new version introduces enhancements to the developer experience, including an improved authentication workflow. To get started, check out the CLI v4 quick start.

eventSource.map()

Learn: Event Feeds and Event Streams

Apply a function to each element of an event source's tracked Set.

Signature

map(functionBody: (mapper: A) => B) => EventSource<B>

Description

map() applies an anonymous, read-only function to each element of an existing event source's tracked Set.

map() returns a new event source. The new event source emits events that contain transformed elements in the event’s data property.

map() does not change the calling event source.

Use cases

Common uses for map() include:

  • Transforming document structures for specific client needs

  • Combining multiple fields into a single value

  • Formatting data for external systems

Parameters

Parameter Type Required Description

functionBody

Function

Yes

Anonymous, read-only function that operates on an existing event source's tracked Set elements.

Writes are not permitted in the function.

functionBody parameters:

Parameter Type Required Description

mapper

Any

Set element to process

Return value

Type Description

EventSource

String-encoded token for the new event source. The event source emits events for the original tracked Set. The emitted events contain transformations from the provided function.

Examples

Basic example

Customer collection documents have the following structure:

{
  id: "111",
  coll: Customer,
  ts: Time("2099-06-25T12:14:29.440Z"),
  cart: Order("412653216549831168"),
  orders: "hdW...",
  name: 'Alice Appleseed',
  email: 'alice.appleseed@example.com',
  address: {
    street: '87856 Mendota Court',
    city: 'Washington',
    state: 'DC',
    postalCode: '20220',
    country: 'US'
  }
}

The following query uses map() to transform the document structure in events:

Customer.all()
  .eventSource()
  .map(
    customer => {
      name: customer.name,
      // Transformation. Combines `address.city` and `address.state`
      // into a single `city` string.
      city: "#{customer.address.city}, #{customer.address.state}"
    }
  )
// String-encoded token for the new event source
"g9WD1YPG..."

When consumed as an Event Feed or Event Stream, the event source emits events with the transformed value in the data property:

{
  "type": "update",
  // The `data` prop contains transformed
  // `city` values.
  "data": {
    "name": "Alice Appleseed",
    "city": "Washington, DC"
  },
  "txn_ts": 1730318669480000,
  "cursor": "gsG...",
  "stats": {
    "read_ops": 2,
    "storage_bytes_read": 738,
    "compute_ops": 1,
    "processing_time_ms": 9,
    "rate_limits_hit": []
  }
}

Is this article helpful? 

Tell Fauna how the article can be improved:
Visit Fauna's forums or email docs@fauna.com

Thank you for your feedback!