Skip to content

ESM Register API

The ESM Register API allows you to manually register the enhancement at runtime. But note, this only affects ESM (.mjs/.mts, and .js/.ts when package.json#type is module).

Usage

js
import { register } from 'tsx/esm/api'

// Register tsx enhancement
const unregister = register()

await import('./file.ts')

// Unregister when needed
unregister()

Scoped registration

If you want to register without affecting the entire runtime environment, you can add a namespace.

When a namespace is provided, it will return a private import() method for you to load files with:

js
import { register } from 'tsx/esm/api'

const api = register({
    // Pass in a unique namespace
    namespace: Date.now().toString()
})

// Pass in the request and the current file path
// Since this is namespaced, it will not cache hit from prior imports
const loaded = await api.import('./file.ts', import.meta.url)

// This is using the same namespace as above, so it will yield a cache hit
const loaded2 = await api.import('./file.ts', import.meta.url)

api.unregister()

Tracking loaded files

Detect files that get loaded with the onImport hook. This can be useful when you want to track dependencies when setting up a watcher.

ts
register({
    onImport: (file: string) => {
        console.log(file) // 'file:///foo.ts'
    }
})