> For the complete documentation index, see [llms.txt](https://modelico.javiercejudo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://modelico.javiercejudo.com/advanced/proxies.md).

# Proxies

Most built-in types in Modélico (List, Set, Map, EnumMap and Date) are wrappers around native structures. Except for a few built-in basic methods, it is necessary to retrieve those structures to access their properties and methods (eg. `list.inner().reduce`).

However, if your environment [supports ES2015 proxies](https://kangax.github.io/compat-table/es6/#test-Proxy), Modélico provides utilities to get around this:

* M.proxyDate
* M.proxyList
* M.proxySet
* M.proxyMap, M.proxyEnumMap, M.proxyStringMap

Example:

```javascript
import M from 'modelico'
const p = M.proxyDate

const defaultDate = M.Date.of(new Date('1988-04-16'))
const proxiedDate = p(defaultDate)

// without proxies
defaultDate.inner().getFullYear() // => 1988

// with proxies
proxiedDate.getFullYear() // => 1988
```

Please note that native methods that modify the structure in place will instead return a new Modélico object:

```javascript
// without proxies
const tmpDate = defaultDate.inner()
tmpDate.setFullYear(2000)
const defaultDate2 = M.Date.of(tmpDate)

defaultDate.inner().getFullYear()  // => 1988 (still)
defaultDate2.inner().getFullYear() // => 2000

// with proxies
const proxiedDate2 = proxiedDate.setFullYear(2000)

proxiedDate.getFullYear()  // => 1988 (still)
proxiedDate2.getFullYear() // => 2000
```

See [proxy tests](https://github.com/javiercejudo/modelico/tree/master/test/proxies) for more details.
