# RESP & JavaScript

```json metadata
{
  "schema_version": 2,
  "title": "RESP \u0026 JavaScript",
  "description": "Converting RESP to and from JavaScript",
  "categories": ["docs","develop","stack","oss","rs","rc","oss","kubernetes","clients"],
  "tableOfContents": {"sections":[{"id":"javascript-to-resp-conversion","title":"JavaScript to RESP conversion"}]}

,
  "codeExamples": []
}
```


When running Redis commands from within a function using the `client.call` API, the reply is parsed as a resp3 reply and converted to a JS object using the following rules:

| resp 3            | JS object type                                                                                                                                 |
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| `status`          | `StringObject` with a field called `__reply_type` and value `status` (or error if failed to convert to utf8)                                   |
| `bulk string`     | JS `String` (or error if failed to convert to utf8)                                                                                            |
| `Error`           | Raise JS exception                                                                                                                             |
| `long`            | JS big integer                                                                                                                                 |
| `double`          | JS number                                                                                                                                      |
| `array`           | JS array                                                                                                                                       |
| `map`             | JS object                                                                                                                                      |
| `set`             | JS set                                                                                                                                         |
| `bool`            | JS boolean                                                                                                                                     |
| `big number`      | `StringObject` with a field called `__reply_type` and value `big_number`                                                                       |
| `verbatim string` | `StringObject` with 2 additional fields: 1. `__reply_type` and value `verbatim` 2. `__format` with the value of the ext in the verbatim string (or error if failed to convert to utf8) |
| `null`            | JS null                                                                                                                                        |
|                   |                                                                                                                                                |

When running Redis commands from within a function using the `client.callRaw` API, the reply is parsed as a resp3 reply and converted to a JS object using the following rules:

| resp 3            | JS object type                                                                                                                                 |
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| `status`          | JS `ArrayBuffer` with a field called `__reply_type` and value `status`                                                                        |
| `bulk string`     | JS `ArrayBuffer`                                                                                                                              |
| `Error`           | Raise JS exception                                                                                                                             |
| `long`            | JS big integer                                                                                                                                 |
| `double`          | JS number                                                                                                                                      |
| `array`           | JS array                                                                                                                                       |
| `map`             | JS object                                                                                                                                      |
| `set`             | JS set                                                                                                                                         |
| `bool`            | JS boolean                                                                                                                                     |
| `big number`      | `StringObject` with a field called `__reply_type` and value `big_number`                                                                       |
| `verbatim string` | JS `ArrayBuffer` with 2 additional fields: 1. `__reply_type` and value `verbatim` 2. `__format` with the value of the ext in the verbatim string |
| `null`            | JS null                                                                                                                                        |
|                   |                                                                                                                                                |

## JavaScript to RESP conversion

| JS type                                                          | RESP2         | RESP3                                  |
|------------------------------------------------------------------|---------------|----------------------------------------|
| `string`                                                         | `bulk string` | `bulk string`                          |
| `string` object with field `__reply_type=status`                 | `status`      | `status`                               |
| Exception                                                        | `error`       | `error`                                |
| `big integer`                                                    | `long`        | `long`                                 |
| `number`                                                         | `bulk string` | `double`                               |
| `array`                                                          | `array`       | `array`                                |
| `map`                                                            | `array`       | `map`                                  |
| `set`                                                            | `array`       | `set`                                  |
| `bool`                                                           | `long`        | `bool`                                 |
| `string` object with field`__reply_type=varbatim` and `__format=txt` | `bulk string` | `verbatim string` with format as `txt` |
| `null`                                                           | resp2 `null`  | resp3 `null`                           |

