View Source BridgeEx.Graphql.LanguageConventions (bridge_ex v2.4.0)

This defines an adapter that supports GraphQL query documents in their conventional (in JS) camelCase notation, while allowing the schema to be defined using conventional (in Elixir) snake_case notation, and transforming the names as needed for lookups, results, and error messages.

For example, this document:

{
  myUser: createUser(userId: 2) {
    firstName
    lastName
  }
}

Would map to an internal schema that used the following names:

  • create_user instead of createUser
  • user_id instead of userId
  • first_name instead of firstName
  • last_name instead of lastName

Likewise, the result of executing this (camelCase) query document against our (snake_case) schema would have its names transformed back into camelcase on the way out:

%{
  data: %{
    "myUser" => %{
      "firstName" => "Joe",
      "lastName" => "Black"
    }
  }
}

Note variables are a client-facing concern (they may be provided as parameters), so variable names should match the convention of the query document (eg, camelCase).

Summary

Functions

Link to this function

to_external_name(internal_name, role)

View Source

Callback implementation for Absinthe.Adapter.to_external_name/2.

Link to this function

to_internal_name(external_name, role)

View Source

Converts a camelCase to snake_case

iex> to_internal_name("test", :read) "test"

iex> to_internal_name("testTTT", :read) "test_t_t_t"

iex> to_internal_name("testTest", :read) "test_test"

iex> to_internal_name("testTest1", :read) "test_test_1"

iex> to_internal_name("testTest11", :read) "test_test_11"

iex> to_internal_name("testTest11Pippo", :read) "test_test_11_pippo"

iex> to_internal_name("camelCase23Snake4344", :read) "camel_case_23_snake_4344"