npm package: @flightdev/adapter-node
Description: Node.js adapter for Flight Framework - deploy to any Node.js server
Author: Flight Contributors
Latest version: 0.0.7

# @flightdev/adapter-node

Node.js deployment adapter for Flight Framework. Deploy to any Node.js hosting environment.

## Table of Contents

- [Installation](#installation)
- [Quick Start](#quick-start)
- [Configuration](#configuration)
- [Build Output](#build-output)
- [Running in Production](#running-in-production)
- [Docker](#docker)
- [Environment Variables](#environment-variables)
- [API Reference](#api-reference)
- [License](#license)

---

## Installation

```bash
npm install @flightdev/adapter-node
```

---

## Quick Start

```typescript
// flight.config.ts
import { defineConfig } from '@flightdev/core';
import node from '@flightdev/adapter-node';

export default defineConfig({
    adapter: node(),
});
```

Build and run:

```bash
flight build
node .output/server/index.mjs
```

---

## Configuration

```typescript
node({
    // Server entry point (optional, auto-generated)
    entry: './src/server.ts',
    
    // Host to bind
    host: '0.0.0.0',
    
    // Port to listen on
    port: 3000,
    
    // Enable gzip/brotli compression
    precompress: true,
    
    // Environment variable prefix for public vars
    envPrefix: 'PUBLIC_',
    
    // Enable cluster mode for multi-core
    cluster: false,
    
    // Number of workers (default: CPU cores)
    workers: 4,
});
```

---

## Build Output

After building, the adapter generates:

```
.output/
├── server/
│   ├── index.mjs          # Server entry point
│   ├── chunks/            # Code-split chunks
│   └── assets/            # Static assets (if embedded)
├── client/
│   ├── assets/            # Hashed static files
│   └── index.html         # SPA fallback
└── package.json           # Production dependencies
```

---

## Running in Production

### Direct Node.js

```bash
# Build
npm run build

# Start (single process)
node .output/server/index.mjs

# Start with cluster mode
NODE_CLUSTER=true node .output/server/index.mjs
```

### PM2

```bash
# Install PM2
npm install -g pm2

# Start
pm2 start .output/server/index.mjs --name my-app

# Cluster mode
pm2 start .output/server/index.mjs -i max --name my-app

# Save and setup startup
pm2 save
pm2 startup
```

### Systemd

```ini
# /etc/systemd/system/myapp.service
[Unit]
Description=My Flight App
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node .output/server/index.mjs
Restart=on-failure
Environment=NODE_ENV=production
Environment=PORT=3000

[Install]
WantedBy=multi-user.target
```

---

## Docker

### Dockerfile

```dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/.output .output
COPY --from=builder /app/package*.json ./
RUN npm ci --omit=dev
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]
```

### Build and Run

```bash
docker build -t my-flight-app .
docker run -p 3000:3000 my-flight-app
```

---

## Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `PORT` | Server port | `3000` |
| `HOST` | Server host | `0.0.0.0` |
| `NODE_ENV` | Environment | `production` |
| `NODE_CLUSTER` | Enable cluster | `false` |
| `NODE_WORKERS` | Cluster workers | CPU cores |

---

## API Reference

### Adapter Options

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `entry` | `string` | auto | Custom server entry |
| `host` | `string` | `'0.0.0.0'` | Bind host |
| `port` | `number` | `3000` | Listen port |
| `precompress` | `boolean` | `true` | Enable compression |
| `cluster` | `boolean` | `false` | Multi-process mode |
| `workers` | `number` | CPU count | Worker processes |

---

## License

MIT