Problem
TypeScript 6.0 (shipped in Deno v2.8.3) changed export = in ESM context from a warning (TS1203) to a hard error (TS1192). This causes deno check to fail on @prefresh/vite.
Root Cause
@prefresh/vite's package.json declares ESM support via exports.import:
{
"exports": {
".": {
"types": "./index.d.ts",
"import": "./src/index.js",
"require": "./src/index.js"
}
}
}
But index.d.ts uses CJS syntax:
declare const prefreshPlugin: (options?: Options) => Plugin;
export = prefreshPlugin; // CJS, not ESM export default
With moduleResolution: NodeNext, TS 6.0 sees exports.import -> treats the .d.ts as ESM -> export = in ESM -> TS1192 error.
Reproduce
Reproducible against stock tsc with NodeNext resolution:
tsc --moduleResolution NodeNext --module NodeNext test.ts
Where test.ts contains import prefresh from "@prefresh/vite".
Suggested Fix
Option A: Change export = prefreshPlugin to export default prefreshPlugin (v3.0.0 is already migrating toward ESM)
Option B: Remove the exports.import condition
Impact
Breaks type checking for all Deno v2.8.3+ users of Fresh (uses @prefresh/vite as a dependency). Fresh is temporarily working around with @ts-ignore.
Problem
TypeScript 6.0 (shipped in Deno v2.8.3) changed
export =in ESM context from a warning (TS1203) to a hard error (TS1192). This causesdeno checkto fail on@prefresh/vite.Root Cause
@prefresh/vite'spackage.jsondeclares ESM support viaexports.import:{ "exports": { ".": { "types": "./index.d.ts", "import": "./src/index.js", "require": "./src/index.js" } } }But
index.d.tsuses CJS syntax:With
moduleResolution: NodeNext, TS 6.0 seesexports.import-> treats the.d.tsas ESM ->export =in ESM -> TS1192 error.Reproduce
Reproducible against stock
tscwith NodeNext resolution:Where
test.tscontainsimport prefresh from "@prefresh/vite".Suggested Fix
Option A: Change
export = prefreshPlugintoexport default prefreshPlugin(v3.0.0 is already migrating toward ESM)Option B: Remove the
exports.importconditionImpact
Breaks type checking for all Deno v2.8.3+ users of Fresh (uses
@prefresh/viteas a dependency). Fresh is temporarily working around with@ts-ignore.