From 32e606fef722f06f428058ad34ed40d1081bd3e4 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Mon, 18 Oct 2021 15:36:12 +0200 Subject: [PATCH] fix: inline `mlly.interopDefault` (resolves #48) --- src/jiti.ts | 3 +-- src/utils.ts | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/jiti.ts b/src/jiti.ts index b9c06362..910b2350 100644 --- a/src/jiti.ts +++ b/src/jiti.ts @@ -10,8 +10,7 @@ import createRequire from 'create-require' import semver from 'semver' import { addHook } from 'pirates' import objectHash from 'object-hash' -import { interopDefault } from 'mlly' -import { isDir, isWritable, md5, detectESMSyntax, detectLegacySyntax } from './utils' +import { interopDefault, isDir, isWritable, md5, detectESMSyntax, detectLegacySyntax } from './utils' import { TransformOptions, JITIOptions } from './types' const _EnvDebug = destr(process.env.JITI_DEBUG) diff --git a/src/utils.ts b/src/utils.ts index 426ede19..a6172d88 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -31,3 +31,39 @@ export function detectESMSyntax (code: string) { export function detectLegacySyntax (code: string) { return code.match(/\?\.|\?\?/) } + +export function isObject (val: any) { + return val !== null && typeof val === 'object' +} + +// TODO: Use mlly (https://github.com/unjs/jiti/issues/48) +export function interopDefault (sourceModule: any) { + if (!isObject(sourceModule) || !('default' in sourceModule)) { + return sourceModule + } + const newModule = sourceModule.default + for (const key in sourceModule) { + if (key === 'default') { + try { + if (!(key in newModule)) { + Object.defineProperty(newModule, key, { + enumerable: false, + configurable: false, + get () { return newModule } + }) + } + } catch (_err) {} + } else { + try { + if (!(key in newModule)) { + Object.defineProperty(newModule, key, { + enumerable: true, + configurable: true, + get () { return sourceModule[key] } + }) + } + } catch (_err) {} + } + } + return newModule +}