open-index/open-npm huggingface dataset:
npm package: @nolert/notify
Description: A lightweight util library for creating notifications for the web developed using vanilla Javascript and plain CSS
Author: Hariharan Radhakrishnan
Latest version: 1.1.1

# @nolert/notify

A lightweight utility library for creating notifications for the web developed using vanilla Javascript and plain CSS.

## Installation & Setup

[**View the live demo**](https://blackistheneworange.github.io/nolert-notify/)

Install the plugin from npm:

```sh
npm install @nolert/notify
```

Import the css file in your root file:
```js
import "@nolert/notify/dist/style.min.css";
```

Then import the plugin in your js file:

```js
import notify from "@nolert/notify";
```

If you want to import it directly in your html file, add the below script tag in your html file:

```html
<script src="@nolert/notify/dist/script.min.js"></script>
<!-- The element can be accessed using NolertNotify variable -->
<script>
    NolertNotify.setConfig({});
    NolertNotify.trigger({message: "My custom message"});
</script>
```
## Setting config at root
```js
notify.setConfig({
    display:("solo" | "stack"),
    cssOverrides:{borderRadius:"4px",zIndex:100}, /*custom overrides (only borderRadius & zIndex are supported as of now)*/
    type: ("info" | "success" | "warning" | "danger" | "dark" | "light"), 
    position: ("top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right"), 
    autoClose: (true | false), /*determine whether the notification should close automatically or not*/
    closeButton: (true | false), /*determine whether to show close button or not*/
    closeIn: 3000, /*time for the notification to close automatically in milliseconds*/
    iconType: ("info" | "success" | "warning" | "danger"),
    noIcon: (true | false) /*determine whether to show default notification icon or not*/
});
```

## Basic usage

```js
notify.trigger({
    message: "My custom message", /*Message to be displayed*/
    type: ("info" | "success" | "warning" | "danger" | "dark" | "light"), 
    position: ("top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right"), 
    autoClose: (true | false), /*determine whether the notification should close automatically or not*/
    closeButton: (true | false), /*determine whether to show close button or not*/
    closeIn: 3000, /*time for the notification to close automatically in milliseconds*/
    iconType: ("info" | "success" | "warning" | "danger"),
    noIcon: (true | false) /*determine whether to show default notification icon or not*/
});
```
npm package: @noliaki/css-cubic-bezier-variable
Description: css cubic bezier variables
Latest version: 1.1.0

# css-cubic-bezier-variable

## Install

```sh
$ npm install -D @noliaki/css-cubic-bezier-variable
$ yarn add @noliaki/css-cubic-bezier-variable
```

## Usage

See [`./example/README.md`](./example/README.md)
npm package: @noliaki/eslint-config-prettier
Description: ## Install
Author: noliaki
Latest version: 0.4.1

# eslint-config-prettier

## Install

```sh
$ yarn add @noliaki/eslint-config-prettier
```

## Usage

`.eslintrc.json`

```json
{
  "extends": ["@noliaki/eslint-config-prettier"]
}
```
npm package: @noliaki/eslint-config-typescript
Description: ## Install
Latest version: 0.1.0

# @noliaki/eslint-config-typescript

## Install

```sh
$ yarn add @noliaki/eslint-config-typescript -D
```

## Usage

`.eslintrc.json`

```json
{
  "extends": ["@noliaki/eslint-config-typescript"]
}
```
npm package: @noliaki/eslint-config-typescript-prettier
Description: ```sh $ yarn add @noliaki/eslint-config-typescript-prettier -D ```
Latest version: 0.2.0

# eslint-config-typescript-prettier

```sh
$ yarn add @noliaki/eslint-config-typescript-prettier -D
```

## Usage

`.eslintrc.json`

```json
{
  "extends": ["@noliaki/eslint-config-typescript-prettier"]
}
```
npm package: @noliaki/tslint-config
Description: ## Install
Author: noliaki
Latest version: 0.0.2

# @noliaki/tslint-config

## Install

```sh
$ yarn add -D @noliaki/tslint-config
```

## Usage

`tslint.json`

```json
{
  "extends": ["@noliaki/tslint-config"]
}
```
npm package: @noliaki/tslint-config-prettier
Description: ## Install
Author: noliaki
Latest version: 0.0.1

# @noliaki/tslint-config-prettier

## Install

```sh
$ yarn add -D @noliaki/tslint-config-prettier
```

## Usage

`tslint.json`

```json
{
  "extends": ["@noliaki/tslint-config-prettier"]
}
```
npm package: @nolievip/allindex-uikit
Description: Set of UI components for pancake projects
Latest version: 3.0.5

# AnoSwap UIkit

[![Version](https://img.shields.io/npm/v/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit) [![Size](https://img.shields.io/bundlephobia/min/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit)

Pancake UIkit is a set of React components and hooks used to build pages on Pancake's apps. It also contains a theme file for dark and light mode.

## Install

`yarn add @pancakeswap-libs/uikit`

## Setup

### Theme

Before using Pancake UIkit, you need to provide the theme file to styled-component.

```
import { ThemeProvider } from 'styled-components'
import { light, dark } from '@pancakeswap-libs/uikit'
...
<ThemeProvider theme={isDark}>...</ThemeProvider>
```

### Reset

A reset CSS is available as a global styled component.

```
import { ResetCSS } from '@pancakeswap-libs/uikit'
...
<ResetCSS />
```

### Types

This project is built with Typescript and export all the relevant types.

## How to use the UIkit

If you want to use components from the UIkit, check the [Storybook documentation](https://pancakeswap.github.io/pancake-uikit/)
npm package: @nolievip/allindex-uikit-3
Description: Set of UI components for pancake projects
Latest version: 0.0.8

# AnoSwap UIkit

[![Version](https://img.shields.io/npm/v/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit) [![Size](https://img.shields.io/bundlephobia/min/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit)

Pancake UIkit is a set of React components and hooks used to build pages on Pancake's apps. It also contains a theme file for dark and light mode.

## Install

`yarn add @pancakeswap-libs/uikit`

## Setup

### Theme

Before using Pancake UIkit, you need to provide the theme file to styled-component.

```
import { ThemeProvider } from 'styled-components'
import { light, dark } from '@pancakeswap-libs/uikit'
...
<ThemeProvider theme={isDark}>...</ThemeProvider>
```

### Reset

A reset CSS is available as a global styled component.

```
import { ResetCSS } from '@pancakeswap-libs/uikit'
...
<ResetCSS />
```

### Types

This project is built with Typescript and export all the relevant types.

## How to use the UIkit

If you want to use components from the UIkit, check the [Storybook documentation](https://pancakeswap.github.io/pancake-uikit/)
npm package: @noliknolik/ngx-metrika
Description: A simple Yandex Mertika (Яндекс Метрика) package for Angular 6+.
Author: Andrey Kolkov
Latest version: 0.5.3
Deprecated: false

# Angular Yandex Metrika

A simple Yandex Mertika (Яндекс Метрика) [tag.js](https://yandex.ru/support/metrika/) package for Angular 6+. 

## Install

Install via [npm][npm] package manager

```
npm install @noliknolik/ngx-metrika --save
```

Add the package to your `app.module.ts`.
Then simple add property `yaCounterId` to the `environment` constant or use inline

```ts
import { RouterModule } from '@angular/router';
import { NgxMetrikaModule } from '@noliknolik/ngx-metrika';

@NgModule({
  imports: [
    RouterModule.forRoot([]),
    NgxMetrikaModule.forRoot({
      id: environment.yaCounterId,
      ...      
      defer: true,
      webvisor: true,
      clickmap: true,
      trackLinks: true,
      accurateTrackBounce: true,
    })
  ]
})
```

## Pageviews

The package will listen to route changes by default, you just need to instantiate service in the root of the project. 

```ts
export class AppComponent {
  constructor(private ym: NgxMetrikaService) { }
}
```

NgxMetrika is a service that also allows you to track pageviews manually. 

```ts
this.ym.hit.emit();

// or with custom params

this.ym.hit.emit({url: '/custom',{
  title: 'Lesson Feed',  
  referer: 'https://angularfirebase.com/lessons'
}});
```

## ReachGoal

[ReachGoal](https://yandex.ru/support/metrika/objects/reachgoal.html) expect an action. 

```ts
this.ym.reachGoal.next({target: 'TARGET_NAME'})
```

You can optionally pass in addtional params.

```ts
function goalCallback () {
        console.log('request to Metrika sent successfully');
    }
const options: CommonOptions = {     
         params: {
            productId: product.id,
            productName: product.name,
         },
         callback: goalCallback,
      }
this.ym.reachGoal.next({target: 'ADD_TO_CART', options});
```

## Goal Directive

Many analytics events are tracked based on user interaction, such as button clicks. Just tell it which DOM event to track.  

```html
<button ymGoal trackOn="click">Track Me</button>
```

This will register a general Target in Yandex Metrika based on the target name.

You can pass optional params to the directive like so:

```html
<div ymGoal     
     target="PROGUCT_DRAGGED"     
     [params]="{ targetLabel: 'Something cool just happened' }">

   Some Product...
   
</div>
```

The directive will produce the following event on dragstart. 

## Demo
Demo is here [demo][demo]

Working code for this demo at stackblitz [example](https://stackblitz.com/edit/ngx-metrika)

[npm]: https://www.npmjs.com/
[demo]: https://ngx-metrika.stackblitz.io
[example]: https://stackblitz.com/edit/ngx-metrika
npm package: @nolimitcli/cli
Description: No subscription. Just code. AI chat powered by watching ads.
Author: Buzzer Network
Latest version: 2.1.3

# @nolimitcli/cli

No subscription. Just code.

## Install

```bash
npx @nolimitcli/cli
```

Or install globally:

```bash
npm install -g @nolimitcli/cli
nolimit
```

## Usage

Just run the command and start chatting:

```
  ┌─────────────────────────────┐
  │       NoLimit v2.0.0        │
  │   No subscription. Just code. │
  └─────────────────────────────┘

  Balance: 2K tokens

  Commands: /earn · /balance · /help · /quit
  ─────────────────────────────────

› Write a function to reverse a string

  function reverse(str) {
    return str.split('').reverse().join('');
  }

  ─ 89 tokens used

›
```

## Commands

| Command | Description |
|---------|-------------|
| `/earn` | Watch an ad to earn 8K tokens |
| `/balance` | Check your token balance |
| `/clear` | Clear the screen |
| `/help` | Show all commands |
| `/quit` | Exit |

## How it works

1. First run auto-authenticates (2K welcome tokens)
2. Type anything to chat with AI
3. When tokens run low, type `/earn`
4. Watch a 30-second ad in your browser
5. Continue chatting

No subscription. No credit card. Just code.

## Links

- [nolimit.dev](https://nolimit.dev)
- [GitHub](https://github.com/buzzernetwork/nolimit)
npm package: @nolleh/simple-csv-parser
Description: csv string to javascript object
Author: nolleh
Latest version: 1.0.3

[![Coverage Status](https://github.com/nolleh/simple-csv-parser/raw/gh-pages/badges/coverage-jest%20coverage.svg?raw=true)](https://nolleh.github.io/simple-csv-parser/badges/coverage-jest%20coverage.svg?raw=true)
[![npm version](https://badge.fury.io/js/@nolleh%2Fsimple-csv-parser.svg)](https://badge.fury.io/js/@nolleh%2Fsimple-csv-parser)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Overview

`simple-csv-parser`
for javascript / typescript.  
marshal/serialize csv string to Object.

## Usage

No need other dependency. super simple usage.

```typescript
class Message {
  name: string;
  message: string;
  constructor(name: string, message: string) {
    this.name = name;
    this.message = message;
  }
}

const messages: Message[] = CsvParser.toObject<Message>(
  `name,message\r\nnolleh,"hello, world"`
);

// do something with messages...
const messages = CsvParser.toObject<Message>(
  `name,message\r\nnolleh,"hello, world"\nnolleh,hello2`
);
console.log({ messages });
```

result is

```bash
{
  messages: [
    { name: 'nolleh', message: 'hello, world' },
    { name: 'nolleh', message: 'hello2' }
  ]
}
```

if input string is malformed csv, then it return empty array.
npm package: @noloco/n8n-nodes-noloco
Description: n8n community node for Noloco - a no-code platform for building internal tools and client portals
Author: Noloco
Latest version: 1.0.3

# @noloco/n8n-nodes-noloco

This is an n8n community node. It lets you use Noloco in your n8n workflows.

[Noloco](https://noloco.io) is a no-code platform for building internal tools and client portals. Connect your data sources and build custom applications without writing code.

[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

[Installation](#installation)  
[Operations](#operations)  
[Credentials](#credentials)  
[Compatibility](#compatibility)  
[Resources](#resources)

## Installation

Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

## Operations

This package includes two nodes:

### Noloco (Action Node)

Perform operations on Noloco records:

- **Create**: Create a new record in a collection
- **Delete**: Delete an existing record from a collection
- **Get**: Get a single record by ID
- **Get Many**: Get many records from a collection with optional filtering, sorting, and pagination
- **Search**: Search for records by field values
- **Update**: Update an existing record in a collection

### Noloco Trigger (Polling Trigger)

Start workflows when records change:

- **Record Created**: Triggers when a new record is created in a table
- **Record Updated**: Triggers when an existing record is updated in a table

## Credentials

To use this node, you need to configure Noloco API credentials with two API keys:

### Prerequisites

1. You must have access to a Noloco app
2. You need to generate API keys from your app's settings

### Setting Up Credentials

1. In your Noloco app, go to **Settings** > **Integrations & API Keys**
2. Copy the **Account API Key** - this authenticates your Noloco account
3. Copy the **App API Key** - this authenticates access to the specific app
4. In n8n, create new Noloco API credentials and paste both keys

For more details, see the [Noloco API Keys Guide](https://guides.noloco.io/settings/integrations-and-api-keys#api-keys).

## Compatibility

- Tested with n8n version 1.0+
- Requires Noloco REST API v1

## Resources

- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
- [Noloco Documentation](https://guides.noloco.io/)
- [Noloco API Keys Guide](https://guides.noloco.io/settings/integrations-and-api-keys#api-keys)
- [Noloco Website](https://noloco.io)
npm package: @nolotus/react-native-leveldb
Description: hi
Author: nolotus
Latest version: 0.1.6

# react-native-leveldb

hi

## Installation

```sh
npm install react-native-leveldb
```

## Usage


```js
import { multiply } from 'react-native-leveldb';

// ...

const result = multiply(3, 7);
```


## Contributing

See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.

## License

MIT

---

Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
npm package: @nolotz/nuxt-typo3
Description: <p align="center">   <picture>     <source media="(prefers-color-scheme: dark)" srcset="https://t3headless.macopedia.io/nuxt-typo3/logo-dark.svg">     <img alt="T3H Logo'" src="https://t3headless.macopedia.io/nuxt-typo3/logo-light.svg" width="500">   </pi
Latest version: 2.1.6

<p align="center">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://t3headless.macopedia.io/nuxt-typo3/logo-dark.svg">
    <img alt="T3H Logo'" src="https://t3headless.macopedia.io/nuxt-typo3/logo-light.svg" width="500">
  </picture>
</p>

# nuxt-typo3

TYPO3 Headless Frontend Rendering module based on Nuxt and Vue.js

- ✨ [Release Notes](https://github.com/TYPO3-Headless/nuxt-typo3/releases)

- 📖 [Documentation](https://t3headless.macopedia.io/nuxt-typo3)

## Features

+ 🌐 Handling of dynamic API Routes provided by Headless EXT
+ 🖼️ Frontend and backend layouts
+ 🧩 Support for most standard TYPO3 Content Elements
+ ✨ Easily customizable
+ 🌍 Multilanguage support
+ 📈 SEO Support
+ 🚀 Server Side ready

## Setup

Learn how to setup nuxt-typo3 module in your Nuxt 3 application.

You can also use the playground on [StackBlitz](https://stackblitz.com/edit/nuxt-starter-fpc2gq?file=app.vue)

## Kickstart nuxt-typo3 project

You can use the `nuxi init` command to initialize a fresh Nuxt project with the required nuxt-typo3 setup. Learn more about [nuxi](https://nuxt.com/docs/api/commands/init)

```bash [npx]
npx nuxi@latest init -t gh:TYPO3-Headless/nuxt-typo3-starter <project-name>
```

## Instalation nuxt-typo3 module

Add `@t3headless/nuxt-typo3` dev dependency to your project:

```bash
npx nuxi@latest module add typo3
```

Then, add `@t3headless/nuxt-typo3` to the [`modules`](https://nuxt.com/docs/guide/concepts/modules) section of your Nuxt configuration:

```ts [nuxt.config.ts]
export default defineNuxtConfig({
  modules: ['@t3headless/nuxt-typo3'],
  typo3: {
    api: {
      baseUrl: 'https://api.t3pwa.com'
    }
  }
})
```

---

Check out the [Nuxt 3 documentation](https://nuxt.com/docs/guide/concepts/modules) for more information about installing and using modules.

## Development

- Run `npm run dev:prepare` to generate type stubs.
- Use `npm run dev` to start [playground](./playground) in development mode.
npm package: @nols1000/vidstack
Description: UI component library for building high-quality, accessible video and audio experiences on the web. (Patched with Twitch provider and server/worker export fix)
Latest version: 1.12.13-next-patched.53

# Vidstack

[![package-badge]][package]
[![discord-badge]][discord]

Vidstack is a video/audio platform for frontend developers to build high-quality and accessible
experiences on the web.

## 📖 Docs

You can find our documentation at [vidstack.io](https://www.vidstack.io).

## 📝 License

Vidstack is [MIT licensed](./LICENSE).

[vime]: https://github.com/vime-js/vime
[plyr]: https://github.com/sampotts/plyr
[package]: https://www.npmjs.com/package/vidstack
[package-badge]: https://img.shields.io/npm/v/vidstack/next?style=flat-square
[discord]: https://discord.gg/QAjfh2gZE4
[discord-badge]: https://img.shields.io/discord/742612686679965696?color=%235865F2&label=%20&logo=discord&logoColor=white&style=flat-square
npm package: @noltron000/numbers
Description: a package library for numbers :)
Author: noltron000
Latest version: 0.0.1
Deprecated: WARNING: This project has been renamed to 'arithmetical'. Install using 'arithmetical' instead.

[![Coverage Status](https://coveralls.io/repos/github/noltron000/numbers/badge.svg?branch=master)](https://coveralls.io/github/noltron000/numbers?branch=master)
![](https://img.shields.io/github/issues/noltron000/numbers)
![](https://img.shields.io/github/forks/noltron000/numbers)
![](https://img.shields.io/github/stars/noltron000/numbers)
![](https://img.shields.io/github/license/noltron000/numbers)
![](https://img.shields.io/twitter/url/https/github.com%2Fnoltron000%2Fnumbers)

# Numbers &amp; Math Livbrary
> Check out this package on [`npm`]() &amp; [`GitHub`](https://github.com/noltron000/numbers)!
npm package: @nolwenture/enumify
Description: This simply removes the outdated es2015 preset from bable requirements
Author: Antti Vikman
Latest version: 1.0.3
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Why this fork exists?

This simply removes the outdated es2015 preset from bable requirements

# Enumify

A JavaScript library for enums. To be used by transpiled ES6 (e.g. via Babel).

The approach taken by Enumify is heavily inspired by Java enums.

## The basics

Install:

```text
npm install enumify
```

Use:

```js
import {Enum} from 'enumify';

class Color extends Enum {}
Color.initEnum(['RED', 'GREEN', 'BLUE']);

console.log(Color.RED); // Color.RED
console.log(Color.GREEN instanceof Color); // true

new Color();
    // Error: Enum classes can’t be instantiated
```

## Properties of enum classes

Enums get a static property `enumValues`, which contains an Array with all enum values:

```js
for (const c of Color.enumValues) {
    console.log(c);
}
// Output:
// Color.RED
// Color.GREEN
// Color.BLUE
```

The inherited tool method `enumValueOf()` maps names to values:

```js
console.log(Color.enumValueOf('RED') === Color.RED); // true
true
```

## Properties of enum values

Enumify adds two properties to every enum value:

* `name`: the name of the enum value.

    ```repl
    > Color.BLUE.name
    'BLUE'
    ```

* `ordinal`: the position of the enum value within the Array `enumValues`.

    ```repl
    > Color.BLUE.ordinal
    2
    ```

## Adding properties to enum values

`initEnum()` also accepts an object as its parameter. That enables you to add properties to enum values:

```js
class TicTacToeColor extends Enum {}

// Alas, data properties don’t work, because the enum
// values (TicTacToeColor.X etc.) don’t exist when
// the object literals are evaluated.
TicTacToeColor.initEnum({
    O: {
        get inverse() { return TicTacToeColor.X },
    },
    X: {
        get inverse() { return TicTacToeColor.O },
    },
});

console.log(TicTacToeColor.O.inverse); // TicTacToeColor.X
```

## More information

* The directory `test/` contains examples.
npm package: @noma.to/qwik-mock
Description: Small utility to mock Qwik QRLs
Latest version: 1.1.1

# Qwik Mock

Qwik Mock is a small utility to mock Qwik QRLs. It is currently experimental and should be used with caution.

Head over to [qtl-docs-repo] to learn how to use it.

[qtl-docs-repo]: https://github.com/ianlet/qwik-testing-library/blob/main/README.md
npm package: @noma/cli
Description: ## Installation
Latest version: 1.1.5

# @noma/cli

## Installation

```bash
$ npm install @noma/cli
```

## Usage

### Execute

Syntax:

```bash
$ noma [id] [options]
```

Execute main module defined in `package.json`:

```bash
$ noma
```

or

```bash
$ noma .
```

Execute `foobar.js` module:

```bash
$ noma ./foobar.js
```

### Debug

```bash
$ noma --debug
```

### Help

```bash
$ noma --help
```

### Version

```bash
$ noma --version
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/core
Description: ## Installation
Latest version: 1.1.5

# @noma/core

## Installation

```bash
$ npm install @noma/core
```

## Usage

```javascript
import core '@noma/core';

const id = './src/main.js';

const options = {
  debug: true, // false
};

const context = await core(id, options);
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-config
Description: ## Install
Latest version: 1.1.5

# @noma/helper-config

## Install

```bash
$ npm install @noma/helper-config
```

## Usage

1. Import `@noma/helper-config` in your code before using any environment variables.

```javascript
import '@noma/helper-config';
```

2. Add `noma` to `package.json`.

```json
{
  "noma": {
    "plugins": ["@noma/http"]
  }
}
```
npm package: @noma/helper-debug
Description: Create a debug instance with package name as namespace. See the [debug](https://www.npmjs.com/package/debug) package for more information.
Latest version: 1.1.5

# @noma/helper-debug

Create a debug instance with package name as namespace. See the [debug](https://www.npmjs.com/package/debug) package for more information.

## Installation

```bash
$ npm install @noma/helper-debug
```

## Usage

`package.json`:

```json
{
  "name": "@foo/bar"
}
```

`main.js`:

```javascript
import { createDebug, enableDebug } from '@noma/helper-debug';

const debug = createDebug();
enableDebug();

debug('Hello %s', 'World');
```

```bash
$ node ./main.js

@foo/bar Hello World
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-env
Description: ## Installation
Latest version: 1.1.5

# @noma/helper-env

## Installation

```bash
$ npm install @noma/helper-env
```

## Usage

Create an `env.json` file.

```json
{
  "PORT": 8080
}
```

and add it to `.gitignore`

```text
env.json
```

Import `@noma/helper-env` in your code before using any environment variables.

```javascript
import '@noma/helper-env';

console.log(process.env.PORT); // 8080
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-json
Description: JSON Helpers
Latest version: 1.1.4

# @noma/helper-json

## Installation

```bash
$ npm install @noma/helper-json
```

^## Usage

```javascript
const data = await loadJsonFile('./data.json');
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-modules
Description: ## Installation
Latest version: 1.1.5

# @noma/helper-modules

## Installation

```bash
$ npm install @noma/helper-modules
```

## Usage

### loadModule

foo/bar.js:

```javascript
export function baz() {}
```

main.js:

```javascript
import { loadModule } '@noma/helper-modules';

const { baz } = await loadModule('./foo/bar.js');
```

### resolveModule

foo/bar.js:

```javascript
export function baz() {}
```

main.js:

```javascript
import { resolveModule } '@noma/helper-modules';

const path = await resolveModule('./foo/bar.js');
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-objects
Description: ## Installation
Latest version: 1.1.5

# @noma/helper-objects

## Installation

```bash
$ npm install @noma/helper-objects
```

^## Usage

```javascript
import { mergeObjects, interpolateObject, interpolateString, isObject } '@noma/helper-objects';
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/helper-packages
Description: ## Installation
Latest version: 1.1.5

# @noma/helper-packages

## Installation

```bash
$ npm install @noma/helper-packages
```

^## Usage

```javascript
import { loadPackageObj } '@noma/helper-packages';
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/plugin-amqplib
Description: Creates `AMQP` connections with [amqplib](https://www.npmjs.com/package/amqplib).
Latest version: 1.1.4

# @noma/plugin-amqplib

Creates `AMQP` connections with [amqplib](https://www.npmjs.com/package/amqplib).

## Usage

main.js:

```js
export default async function main({ amqplib }) {
  const { connection, connections } = mongodb;
}
```
### Configuring the default AMQP connection

config/default.yml:

```yml
amqplib:
  connections:
    default:
      connectionString: "amqp://default"
```

main.js:

```js
export default async function main({ amqplib }) {
  const { connection, connections } = amqplib;
}
```

### Configuring multiple AMQP connections

config/default.yml:

```yml
amqplib:
  connections:
    primary:
      connectionString: "amqp://primary"
    secondary:
      connectionString: "amqp://secondary"
            
```

main.js:

```js
export default async function main({ amqplib }) {
  const { connections } = amqplib;
  const { primary, secondary } = connections;
}
```

### Removing the default AMQP connection

config/default.yml:

```yml
amqplib:
  connections:
    default: null
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/plugin-express
Description: Creates [express.js](https://expressjs.com/) [applications](https://expressjs.com/en/4x/api.html#app) and optionally binds to one or more [HTTP](../plugin-http/README.md) and/or [HTTPS](../plugin-https/README.md) servers' `request` event listeners.
Latest version: 1.1.4

# @noma/plugin-express

Creates [express.js](https://expressjs.com/) [applications](https://expressjs.com/en/4x/api.html#app) and optionally binds to one or more [HTTP](../plugin-http/README.md) and/or [HTTPS](../plugin-https/README.md) servers' `request` event listeners.


## Usage

main.js:

``` js
export default async function main({ express }) {
  express.app.get('/', (req, res) => {
    res.send('hello world')
  })
}
```

### Configuring the default app

config/default.yml:

``` yml
http:
  servers:
    other:
      port: 8080
express:
  apps:
    default:
      servers:
        - other
```

main.js:

``` js
export default async function main({ express }) {
  express.app.get('/', (req, res) => {
    res.send('hello world')
  })
}
```

### Configuring multiple apps

config/default.yml:

``` yml
https:
  servers:
    default:
      port: 8080
    app:
      port: 8081
    api:
      port: 8082
express:
  apps:
    default:
      servers:
        - default
        - app
        - api
    app:
      servers:
        - app
    api:
      servers:
        - api
```

main.js:

``` js
export default async function main({ express }) {
  express.apps.default.get('/', (req, res, next) => {
    res.set('X-Express-App-Name', 'default')

    next()
  })

  express.apps.app.get('/', (req, res, next) => {
    res.set('X-Express-App-Name', 'app')

    res.end()
  })

  express.apps.api.get('/', (req, res, next) => {
    res.set('X-Express-App-Name', 'api')

    res.end()
  })
}
```

### Removing the default app

config/default.yml:

``` yml
express:
  apps:
    default: null
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/plugin-http
Description: Creates HTTP servers and listens on configured ports.
Latest version: 1.1.4

# @noma/plugin-http

Creates HTTP servers and listens on configured ports.

## Usage

main.js:

``` js
export default async function main({ http }) {
  http.server.on('request', (req, res) => {
    res.send('hello world')
  })
}
```

### Configuring the default HTTP server

config/default.yml:

``` yml
http:
  servers:
    default:
      port: 80
```

main.js:

``` js
export default async function main({ http }) {
  assert(http.server.port === 80)
  assert(http.servers.default.port === 80)

  http.server.on('request', (req, res) => {
    res.send('hello world')
  })
}
```

### Configuring multiple HTTP servers

config/default.yml:

``` yml
http:
  servers:
    app:
      port: 8001
    api:
      port: 8002
```

main.js:

``` js
export default async function main({ http }) {
  const { app, api } = http.servers;

  assert(app.port === 8001)
  assert(api.port === 8002)

  app.on('request', (req, res) => {
    res.set('X-Http-Server-Name', 'app')
    res.end()
  })

  api.on('request', (req, res) => {
    res.set('X-Http-Server-Name', 'api')
    res.end()
  })
}
```

### Removing the default HTTP server

config/default.yml:

``` yml
http:
  servers:
    default: null
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/plugin-mongodb
Description: Manage MongoDB Connections, Indexes and Schemas with the [mongodb](https://www.npmjs.com/package/mongodb) Node.js driver.
Latest version: 2.0.4

# @noma/plugin-mongodb

Manage MongoDB Connections, Indexes and Schemas with the [mongodb](https://www.npmjs.com/package/mongodb) Node.js driver.

## Usage

main.js:

```js
export default async function main({ mongodb }) {
  const { client, collections, connectionString, db, connections } = mongodb;
}
```
### Configuring the default connection

config/default.yml:

```yml
mongodb:
  connections:
    default:
      collections:
        users:
          indexes:
            - - id: 1
              - unique: 1
            - - name: 1
              - unique: 1
          validator:
            $jsonSchema:
              type: object
              properties:
                id:
                  type: integer
                name:
                  type: string
          validationAction: error
          validationLevel: strict
      connectionString: "mongodb://default"
      useNewUrlParser: true
      useUnifiedTopology: true
          
```

main.js:

```js
export default async function main({ mongodb }) {
  const { client, collections, connections, connectionString, db } = mongodb;
}
```

### Configuring multiple MongoDB connections

config/default.yml:

```yml
mongodb:
  connections:
    primary:
      connectionString: "mongodb://primary"
    secondary:
      connectionString: "mongodb://secondary"
            
```

main.js:

```js
export default async function main({ mongodb }) {
  const { connections } = mongodb;
  const { primary, secondary } = connections;
}
```

### Removing the default MongoDB connection

config/default.yml:

```yml
mongodb:
  connections:
    default: null
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma/plugin-ws
Description: Creates [ws](https://www.npmjs.com/package/ws).
Latest version: 1.1.4

# @noma/plugin-ws

Creates [ws](https://www.npmjs.com/package/ws).

## Usage

main.js:

``` js
export default async function main({ ws }) {
  ws.server.on('connection', socket => {
    socket.send('default')
  })
}
```

### Configuring the default server

config/default.yml:

``` yml
http:
  servers:
    other:
      port: 8080
ws:
  servers:
    default:
      httpServer: other
```

main.js:

``` js
export default async function main({ ws }) {
  ws.server.on('connection', socket => {
    socket.send('default')
  })
}
```

### Configuring multiple servers

config/default.yml:

``` yml
http:
  servers:
    app:
      port: 8081
    api:
      port: 8082
ws:
  servers:
    app:
      httpServer: app
    api:
      httpServer: api
```

main.js:

``` js
export default async function main({ ws }) {
  ws.servers.app.on('connection', socket => {
    socket.send('app')
  })

  ws.servers.api.on('connection', socket => {
    socket.send('api')
  })
}
```

### Removing the default app

config/default.yml:

``` yml
ws:
  servers:
    default: null
```

## License

Copyright 2021 Jonatan Pedersen 

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @noma4i/react-native-logs
Description: Simple CLI utility for viewing React Native Metro bundler logs in real-time
Author: noma4i
Latest version: 1.0.0

# React Native Logs

Simple CLI tool for viewing React Native Metro bundler logs in real-time. Start once and forget — automatically reconnects and saves logs to file.

[![npm version](https://badge.fury.io/js/react-native-logs.svg)](https://badge.fury.io/js/react-native-logs)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

![React Native Logs in action](assets/example.png)

## Features

- 🚀 Start once, runs continuously with auto-reconnection
- 🎨 Color-coded log levels with clean output
- 💾 Saves logs to file automatically
- 🤖 Clean format perfect for AI debugging
- ⚙️ Configure via CLI args or environment variables

## Installation

```bash
# Install globally
npm install -g @noma4i/react-native-logs
# or
yarn global add @noma4i/react-native-logs

# Use without installing
npx @noma4i/react-native-logs
# or
yarn dlx @noma4i/react-native-logs
```

## Usage

```bash
rn-logs
```

## Options

```bash
# Custom Metro port
rn-logs --port 8082

# Timeout and reconnect settings
rn-logs --timeout 10000 --reconnect 2000

# Max log file lines
rn-logs --max-lines 500

# Environment variables
RN_LOGS_PORT=8082 rn-logs

# Help
rn-logs --help
```

## Log Files

Logs are saved to `./logs/metro.log` with timestamps and clean formatting — perfect for AI debugging.

## License

MIT © [noma4i](https://github.com/noma4i)