Package detail

@darkobits/interop-import-default

darkobits90Hippocratic1.0.0

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

readme

<picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/darkobits/interop-import-default/assets/441546/e0428430-0a46-41ba-b05a-d829e0e9f296" width="100%" > </picture>

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:

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:

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. 🌈

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

const wonky = interopImportDefault(wonkyExport);

// Use `wonky` as the developer intended.


changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

1.0.0 (2023-06-14)

🏗 Chores

📖 Documentation

0.1.1 (2023-02-22)

🏗 Chores

📖 Documentation

🐞 Bug Fixes

0.1.0 (2023-02-22)

✨ Features

  • Add interopImportDefault. (411827e)

📖 Documentation