diff --git a/package.json b/package.json index a60cdaf..1434178 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "description": "Node.js Adapter for Hono", "main": "dist/index.js", "types": "dist/index.d.ts", + "bin": { + "hono-node-server": "./dist/serve.js" + }, "files": [ "dist" ], diff --git a/src/serve.ts b/src/serve.ts new file mode 100644 index 0000000..c13a1ad --- /dev/null +++ b/src/serve.ts @@ -0,0 +1,27 @@ +import { realpathSync } from 'node:fs' +import { parseArgs } from 'node:util' +import { serve } from './server' + +const { values, positionals } = parseArgs({ + options: { + port: { type: 'string' }, + }, + allowPositionals: true, +}) + +if (positionals.length === 0) { + throw new Error('Please specify the path to the app file.') +} + +const appFilePath = realpathSync(positionals[0]) +import(appFilePath).then(({ default: app }) => { + serve( + { + fetch: app.fetch, + port: values.port ? Number.parseInt(values.port) : undefined, + }, + (info) => { + console.log(`Listening on http://localhost:${info.port}`) + } + ) +}) diff --git a/tsup.config.ts b/tsup.config.ts index dcd44ca..bff62c5 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,10 +1,21 @@ import { defineConfig } from 'tsup' +import type { Options } from 'tsup' -export default defineConfig({ - entry: ['./src/**/*.ts'], +const options: Options = { format: ['esm', 'cjs'], dts: true, splitting: false, sourcemap: false, clean: true, -}) +} +export default defineConfig([ + { + entry: ['./src/**/*.ts', '!./src/serve.ts'], + ...options, + }, + { + entry: ['./src/serve.ts'], + ...options, + banner: { js: '#!/usr/bin/env node' }, + }, +])