# February 27, 2024

## 0.12.6

**`(fix):`** In Node.js environments the SDK will default to using `node-fetch`. The
SDK depends on v2 of node-fetch to stay CJS compatible.

Previously the SDK was doing `require("node-fetch")` but it should be
`require("node-fetch").default` based on
[https://github.com/node-fetch/node-fetch/issues/450#issuecomment-387045223](https://github.com/node-fetch/node-fetch/issues/450#issuecomment-387045223).

## 0.12.5

**`(feat):`** Introduce a custom configuration called `tolerateRepublish` which supports running
npm publish with the flag `--tolerateRepublish`. This flag allows you to publish
on top of an existing npm package.

To turn on this flag, update your generators.yml:

```yaml
groups:
  generators:
    - name: fernapi/fern-typscript-node-sdk
      version: 0.12.5
      ...
      config:
        tolerateRepublish: true
```

## 0.12.4

**`(fix):`** Previously reference.md was just leveraging the function name for the reference, now it leverages the full package-scoped path, mirroring how the function would be used in reality.

```ts
seedExamples.getException(...)

// is now

seedExamples.file.notification.service.getException(...)
```

**`(fix):`** Previously SDK code snippets would not support generation with undiscriminated unions. Now, it does.

## 0.12.2

**`(fix):`** Previously SDK code snippets would not take into account default parameter values
and would always include a `{}`. This was odd and didn't represent how a developer
would use the SDK. Now, the snippets check for default parameter values and omit
if there are no fields specified.

```ts
// Before
client.users.list({});

// After
client.users.list();
```

## 0.12.1

**`(fix):`** Optional objects in deep query parameters were previously being incorrectly
serialized. Before this change, optional objects were just being JSON.stringified
which would send the incorrect contents over the wire.

```ts
// Before
if (foo != null) {
  _queryParams["foo"] = JSON.stringify(foo);
}

// After
if (foo != null) {
  _queryParams["foo"] = foo;
}

// After (with serde layer)
if (foo != null) {
  _queryParams["foo"] = serializers.Foo.jsonOrThrow(foo, {
    skipValidation: false,
    breadcrumbs: ["request", "foo"]
  });
}
```