JSPM

@darkobits/interop-import-default

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 6
  • Score
    100M100P100Q50725F
  • License Hippocratic

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

Package Exports

  • @darkobits/interop-import-default
  • @darkobits/interop-import-default/dist/interop-import-default.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@darkobits/interop-import-default) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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.