# @darkobits/interop-import-default

> TypeScript-friendly utility for extracting default exports from tricky packages.

Latest version **1.0.0** (published 2023-06-14) · Hippocratic license · 0 weekly downloads

## Install

```sh
npm install @darkobits/interop-import-default
pnpm add @darkobits/interop-import-default
yarn add @darkobits/interop-import-default
bun add @darkobits/interop-import-default
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2023-06-14 |
| First published | 2023-02-22 |
| Weekly downloads | 0 |
| License | Hippocratic |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=16 |
| Dependencies | 0 |
| Unpacked size | 24.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | darkobits |
| Maintainers | darkobits |

## Links

- npm: https://www.npmjs.com/package/@darkobits/interop-import-default
- Repository: https://github.com/darkobits/interop-import-default
- Homepage: https://github.com/darkobits/interop-import-default#readme
- Issues: https://github.com/darkobits/interop-import-default/issues
- npm.io page: https://npm.io/package/@darkobits/interop-import-default

## Recent versions

- 1.0.0 (latest) — 2023-06-14
- 0.1.1 — 2023-02-22
- 0.1.0 — 2023-02-22

## README

<p align="center">
  <picture>
    <source
      media="(prefers-color-scheme: dark)"
      srcset="https://github.com/darkobits/interop-import-default/assets/441546/e0428430-0a46-41ba-b05a-d829e0e9f296"
      width="100%"
    >
    <img
      src="https://github.com/darkobits/interop-import-default/assets/441546/202dc310-db00-4b70-be03-0165f944ccd1"
      width="100%"
    >
  </picture>
</p>
<p align="center">
  <a
    href="https://www.npmjs.com/package/@darkobits/interop-import-default"
  ><img
    src="https://img.shields.io/npm/v/@darkobits/interop-import-default.svg?style=flat-square"
  ></a>
  <a
    href="https://github.com/darkobits/interop-import-default/actions?query=workflow%3Aci"
  ><img
    src="https://img.shields.io/github/actions/workflow/status/darkobits/interop-import-default/ci.yml?style=flat-square"
  ></a>
  <a
    href="https://app.codecov.io/gh/darkobits/interop-import-default/branch/master"
  ><img
    src="https://img.shields.io/codecov/c/github/darkobits/interop-import-default/master?style=flat-square&color=brightgreen"
  ></a>
  <a
    href="https://depfu.com/repos/github/darkobits/interop-import-default"
  ><img
    src="https://img.shields.io/depfu/darkobits/interop-import-default?style=flat-square"
  ></a>
  <a
    href="https://conventionalcommits.org"
  ><img
    src="https://img.shields.io/static/v1?label=commits&message=conventional&style=flat-square&color=398AFB"
  ></a>
  <a
    href="https://firstdonoharm.dev"
  ><img
    src="https://img.shields.io/static/v1?label=license&message=hippocratic&style=flat-square&color=753065"
  ></a>
</p>

# Install

```
$ npm i @darkobits/interop-import-default
```

# Use

This function is intended to gracefully address issues with the default exports of packages that may
have been transpiled/bundled improperly or were simply transpiled to run in an environment that has
built-in support for addressing this kind of issue.

This problem can often rear its head when working in mixed CJS / ESM environments.

### Before / Ideal:

```ts
import wonky from 'wonky';

// Use `wonky` as the developer intended.
```

Sometimes, based on the Node version running this code and how the code was transpiled/bundled, a
package's default export may be on a property key `default` on the value imported.

### Naive TypeScript Fix:

```ts
import wonkyExport from 'wonky';
const wonky = wonkyExport.default;

// Now, typeof wonky is incorrect; IntelliSense is broken, and
// TypeScript will throw errors.
```

Furthermore, you may run into cases where your code behaves differently in different runtime
environments, especially if you are authoring a library and you don't know how your code will be
transpiled by the end user. Some bundlers have built-in interop features that address this issue, but
running the same code in Node will produce an error.

Even worse, TypeScript can miss this error at compile-time, mistakenly thinking that the default
export of a package is the value we expected it to be rather than an object with a nested `default`
property.

This function is designed to be used as a **runtime dependency** that will address both of these\
problems. First, it ensures your code runs the same way in both types of environments by returning the
provided value as-is if it doesn't contain a `default` key. Second, it type-casts the return value as
the type of the parameter provided, so TypeScript will always be happy. 🌈

```ts
import wonkyExport from 'wonky';
import { interopImportDefault } from '@darkobits/interop-import-default';

const wonky = interopImportDefault(wonkyExport);

// Use `wonky` as the developer intended.
```

<br />
<a href="#top">
  <img src="https://user-images.githubusercontent.com/441546/189774318-67cf3578-f4b4-4dcc-ab5a-c8210fbb6838.png" style="max-width: 100%;">
</a>

---
_Source: https://npm.io/package/@darkobits/interop-import-default · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
