Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fanar

Debug receiver for Node.js — see what your app is doing, instantly.

Send any value from your Node.js app and watch it appear in the Fanar desktop app in real time. Zero dependencies. Works with plain Node, Express, Fastify, and NestJS.


Install

npm install @fanar-app/fanar

Requires the Fanar desktop app running on your machine.


Usage

import fanar from '@fanar-app/fanar'

// Primitives
fanar('hello world')
fanar(42)
fanar(true)

// Objects — renders as a collapsible JSON tree
fanar({ user, orders, meta })

// Exceptions — renders with clickable stack frames that open in VS Code
fanar(new Error('something went wrong'))

// SQL queries — syntax highlighted, bindings listed, slow queries flagged red
fanar.query('SELECT * FROM users WHERE id = ?', { bindings: [userId], duration: 12 })

// Timers
const t = fanar.time('render')
// ... do work ...
t.stop()

// Named label and color for any payload
fanar(data).label('after transform').color('purple')

// Clear the desktop app
await fanar.clear()

Request context

Automatically group all fanar() calls within a single request. Register the middleware once:

Express / Fastify

app.use(fanar.middleware())

Standalone (no HTTP framework)

fanar.run(() => {
  fanar('inside this closure — all calls share a request ID')
})

NestJS

import { FanarModule, FanarTypeOrmLogger, withFanar, Fanar } from '@fanar-app/fanar/nestjs'

Module setup:

// Inline config
FanarModule.forRoot({ enabled: true, host: 'localhost', port: 23517 })

// From ConfigService
FanarModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: (config: ConfigService) => ({
    enabled: config.get('NODE_ENV') !== 'production',
  }),
  inject: [ConfigService],
})

Once imported, a global interceptor fires after every request and sends: method, path, status, duration, and query count.

TypeORM — automatic query logging:

// data-source.ts
import { FanarTypeOrmLogger } from '@fanar-app/fanar/nestjs'

export const AppDataSource = new DataSource({
  // ...
  logger: new FanarTypeOrmLogger(),
})

Prisma — automatic query logging:

import { withFanar } from '@fanar-app/fanar/nestjs'

export const prisma = withFanar(
  new PrismaClient({ log: [{ emit: 'event', level: 'query' }] })
)

Method tracing:

import { Fanar } from '@fanar-app/fanar/nestjs'

@Injectable()
export class OrderService {
  @Fanar()
  async createOrder(dto: CreateOrderDto) {
    // method name, args, return value, and duration sent automatically
  }
}

Configuration

fanar.configure({ host: 'localhost', port: 23517 })

Or set at startup — the desktop app also accepts FANAR_PORT as an environment variable.


License

MIT

About

Node.js and NestJS client for Fanar

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages