diff --git a/package.json b/package.json index d6b000d..3f65ad2 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "types": "./dist/index.d.ts", "exports": { ".": "./dist/index.js", + "./register": "./dist/register.js", "./package.json": "./package.json" }, "publishConfig": { diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 0000000..41350d8 --- /dev/null +++ b/src/api.ts @@ -0,0 +1,31 @@ +import module from 'node:module' +import process from 'node:process' +import type { Data } from './loader/index.ts' +import type { MessageLog } from './loader/rpc.ts' + +export function register(): void { + if (!module.register) { + throw new Error( + `This version of Node.js (${process.version}) does not support module.register(). Please upgrade to Node v18.19 or v20.6 and above.`, + ) + } + + const { port1, port2 } = new MessageChannel() + const data: Data = { + port: port2, + } + const transferList = [port2] + module.register('./loader/index.js', { + parentURL: import.meta.url, + data, + transferList, + }) + + port1.on('message', (message: MessageLog) => { + switch (message.type) { + case 'log': + console.info('[port log]', message.message) + } + }) + port1.unref() +} diff --git a/src/index.ts b/src/index.ts index ee0fbcc..de642ad 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import type { UnloaderConfig } from './loader/config.ts' export * from './plugin.ts' -export * from './register.ts' +export * from './api.ts' export * from './loader/config.ts' export function defineConfig(config: UnloaderConfig): UnloaderConfig { diff --git a/src/register.ts b/src/register.ts index 41350d8..8baf16f 100644 --- a/src/register.ts +++ b/src/register.ts @@ -1,31 +1,2 @@ -import module from 'node:module' -import process from 'node:process' -import type { Data } from './loader/index.ts' -import type { MessageLog } from './loader/rpc.ts' - -export function register(): void { - if (!module.register) { - throw new Error( - `This version of Node.js (${process.version}) does not support module.register(). Please upgrade to Node v18.19 or v20.6 and above.`, - ) - } - - const { port1, port2 } = new MessageChannel() - const data: Data = { - port: port2, - } - const transferList = [port2] - module.register('./loader/index.js', { - parentURL: import.meta.url, - data, - transferList, - }) - - port1.on('message', (message: MessageLog) => { - switch (message.type) { - case 'log': - console.info('[port log]', message.message) - } - }) - port1.unref() -} +import { register } from './api' +register() diff --git a/tsdown.config.ts b/tsdown.config.ts index 5da3577..7112327 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from 'tsdown' export default defineConfig({ - entry: ['./src/index.ts', './src/loader/index.ts'], + entry: ['./src/index.ts', './src/register.ts', './src/loader/index.ts'], format: 'esm', target: 'node18.19', clean: true,