# Add-on Arguments
> C API for validating, extracting, and transforming (to native C types) function arguments provided to a strided array Node-API add-on interface.
## Usage
```javascript
var headerDir = require( '@stdlib/strided/napi/addon-arguments' );
```
#### headerDir
Absolute file path for the directory containing header files for C APIs.
```javascript
var dir = headerDir;
// returns
```
## Examples
```javascript
var headerDir = require( '@stdlib/strided/napi/addon-arguments' );
console.log( headerDir );
// =>
```
* * *
## C APIs
### Usage
```c
#include "stdlib/strided/napi/addon_arguments.h"
```
#### stdlib_strided_napi_addon_arguments( env, argv, nargs, nin, \*arrays[], \*shape, \*strides, \*types, \*err )
Validates, extracts, and transforms (to native C types) function arguments provided to a strided array Node-API add-on interface.
```c
#include
#include
#include
// ...
/**
* Receives JavaScript callback invocation data.
*
* @param env environment under which the function is invoked
* @param info callback data
* @return Node-API value
*/
napi_value addon( napi_env env, napi_callback_info info ) {
napi_status status;
// ...
int64_t nargs = 7;
int64_t nin = 2;
// Get callback arguments:
size_t argc = 7;
napi_value argv[ 7 ];
status = napi_get_cb_info( env, info, &argc, argv, NULL, NULL );
assert( status == napi_ok );
// ...
// Initialize destination arrays:
uint8_t *arrays[ 3 ];
int64_t strides[ 3 ];
int64_t shape[ 1 ];
int32_t types[ 3 ];
// Process the provided arguments:
napi_value err;
status = stdlib_strided_napi_addon_arguments( env, argv, nargs, nin, arrays, shape, strides, types, &err );
assert( status == napi_ok );
// ...
}
// ...
```
The function accepts the following arguments:
- **env**: `[in] napi_env` environment under which the function is invoked.
- **argv**: `[in] napi_value*` strided function arguments.
- **nargs**: `[in] int64_t` total number of expected arguments.
- **nin**: `[in] int64_t` number of input strided array arguments.
- **arrays**: `[out] uint8_t**` destination array for storing pointers to both input and output strided byte arrays.
- **shape**: `[out] int64_t*` destination array for storing the array shape (dimensions).
- **strides**: `[out] int64_t*` destination array for storing array strides (in bytes) for each strided array.
- **types**: `[out] int32_t*` destination array for storing strided array argument data types.
- **err**: `[out] napi_value*` pointer for storing a JavaScript error.
```c
napi_status stdlib_strided_napi_addon_arguments( const napi_env env, const napi_value *argv, const int64_t nargs, const int64_t nin, uint8_t *arrays[], int64_t *shape, int64_t *strides, int32_t *types, napi_value *err );
```
The function returns a `napi_status` status code indicating success or failure (returns `napi_ok` if success).
### Notes
- The function assumes the following argument order:
```text
[ N, ia1, is1, ia2, is2, ..., oa1, os1, oa2, os2, ... ]
```
where
- `N` is the number of elements over which to iterate.
- `ia#` is an input strided array.
- `is#` is a corresponding input strided array stride (in units of elements).
- `oa#` is an output strided array.
- `os#` is a corresponding output strided array stride (in units of elements).
- The function may return one of the following JavaScript errors:
- `TypeError`: first argument must be an integer.
- `TypeError`: input array stride argument must be an integer.
- `TypeError`: output array stride argument must be an integer.
- `TypeError`: input array argument must be a typed array.
- `TypeError`: output array argument must be a typed array.
- `RangeError`: input array argument must have sufficient elements based on the associated stride and the number of indexed elements.
- `RangeError`: output array argument must have sufficient elements based on the associated stride and the number of indexed elements.