Skip to content

Commit

Permalink
feat: expose register entry
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Feb 9, 2025
1 parent ff84874 commit e1c9b73
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 33 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"types": "./dist/index.d.ts",
"exports": {
".": "./dist/index.js",
"./register": "./dist/register.js",
"./package.json": "./package.json"
},
"publishConfig": {
Expand Down
31 changes: 31 additions & 0 deletions src/api.ts
Original file line number Diff line number Diff line change
@@ -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()
}
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
33 changes: 2 additions & 31 deletions src/register.ts
Original file line number Diff line number Diff line change
@@ -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()
2 changes: 1 addition & 1 deletion tsdown.config.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand Down

0 comments on commit e1c9b73

Please # to comment.