open-index/open-npm huggingface dataset:
npm package: @slvn/neon
Description: Neon est un générateur de code front-end basé sur Node.js, spécialisé dans Tailwind CSS.
Latest version: 1.0.8

# Neon

Neon est un générateur de code front-end basé sur Node.js, spécialisé dans Tailwind CSS.  

Il permet aux développeurs de créer rapidement des sites web modernes et cohérents à partir d'une intention utilisateur.


## Installation


Installez Neon globalement via npm :


```bash

npm install -g neon


Commandes


Créer un projet


neon create <nom-du-projet>


Cette commande crée un dossier <nom-du-projet> contenant :


int.txt : fichier où tu décris l’intention du site


readme.md : ce fichier


index.js : script qui génère le build



Générer le build


cd <nom-du-projet>

neon build int.txt


Exécute index.js avec le fichier d’intention int.txt et génère le code HTML/Tailwind correspondant.


Exemple


neon create mysite

cd mysite

# Écrire l'intention dans int.txt

neon build int.txt
npm package: @slvrio/storyblok
Description: A collection of tools for Storyblok
Author: Yevhenii Kshevitskyi
Latest version: 0.1.0

# Storyblok Tools

## Installation

Make sure you have Node `>= 18.0.0` installed.

```sh
$ npm i @slvrio/storyblok
```

## Generate TypeScript Type Definitions

The `generateTypescriptTypedefs` function creates a TypeScript definitions file based on the provided Storyblok component schemas. It also returns the generated TypeScript types as a string.

### Example Usage

```ts
import { generateTypescriptTypedefs } from '@slvrio/storyblok'

const tsTypes = await generateTypescriptTypedefs({
  jsonSchemas: [
    /* Your Storyblok JSON schemas */
  ],
  destinationFilePath: './types/storyblok-types.d.ts',
  typeNamesPrefix: 'MyPrefix',
  typeNamesSuffix: 'Storyblok',
  JSONSchemaToTSCustomOptions: { additionalProperties: false },
})

console.log(tsTypes) // Logs the generated TypeScript types as a string
```

### Options

- `jsonSchemas` (required): An array of Storyblok JSON schemas.
- `destinationFilePath` (optional, default: `storyblok-component-types.d.ts`): Path to the generated TypeScript file.
- `typeNamesPrefix` (optional): A prefix for all generated type names.
- `typeNamesSuffix` (optional, default: `Storyblok`): A suffix for all generated type names.
- `JSONSchemaToTSCustomOptions` (optional): Custom options for the `json-schema-to-typescript` library.
- `customFieldTypesParserPath` (optional): Path to a script that defines custom field type parsing logic.

#### JSON Schema to TypeScript Options

This library uses `json-schema-to-typescript` under the hood. You can customize its behavior by passing a JSON file with configuration options.

Example JSON configuration to disable `additionalProperties`:

```json
{
  "additionalProperties": false
}
```

#### Custom Field Types Parser

Storyblok Custom Field Types do not have inherent JSONSchema definitions. You can provide a parser function that maps Custom Field Types to JSONSchema.

Example parser implementation:

```js
export default function (key, obj) {
  switch (obj.field_type) {
    case 'my-custom-field-type-name':
      return {
        [key]: {
          type: 'object',
          properties: {
            color: { type: 'string' },
          },
          required: ['color'],
        },
      }
    default:
      return {}
  }
}
```

This function should be provided via the `customFieldTypesParserPath` option.
npm package: @slvrio/storyblok-mcp-client
Description: Storyblok MCP client
Author: Yevhenii Kshevitskyi
Latest version: 0.0.1

# 📖 Storyblok MCP Client

The **Storyblok MCP Client** is a command-line tool that allows you to interact seamlessly with Storyblok's API using the **Model-Context-Protocol (MCP)** framework.

## Features

- 🏗️ Create and manage Storyblok spaces
- 🔍 Retrieve components and type definitions

## Setup

### Cursor IDE Integration

1. Open **Cursor IDE** settings
2. Navigate to the `MCP` tab
3. Click on `Add new MCP server`
4. Fill in the fields:

   - **Name:** Any name
   - **Type:** `command`
   - **Command:** `npx -y @slvrio/storyblok-mcp-client`

5. Click **Save**

## Usage

> In chat (`cmd+i`), type the tool name (e.g., `list_spaces`, `get_component`) and execute it with (`cmd+enter`).

## Available Tools

- **`spaces_create`** — Create a new Storyblok space.
- **`spaces_get`** — Retrieve a list of Storyblok spaces.
- **`components_get`** — Fetch all components within a space.
- **`component_get`** — Retrieve a specific component by ID.
- **`typedefs_get`** — Generate TypeScript type definitions for components.

## Environment Variables

Ensure you have the following environment variables set up before using the tool:

- `STORYBLOK_PERSONAL_API_TOKEN` – Your Storyblok Personal API Token
- `STORYBLOK_SPACE_ID` (optional) – The space ID (if not provided via command arguments)

> **Note.** You can also pass `token` and `space_id` as script arguments, see example below.

## Example

```sh
npx -y @slvrio/storyblok-mcp-client --token YOUR_PERSONAL_API_TOKEN --space_id YOUR_SPACE_ID
```

This command initializes the MCP client with the provided API token and space ID, allowing you to execute Storyblok-related operations effortlessly.
npm package: @slvrio/wod
Description: Fetch Crossfit WOD
Author: Yevhenii Kshevitskyi
Latest version: 0.1.0

# 🏋️ WOD Tool — Your Daily CrossFit Companion

Stay on top of your training with WOD Tool — a simple CLI utility that fetches the Workout of the Day straight from the official CrossFit website.

**Features:**

- 🏋️ Automatically grabs the latest WOD
- ⏳ No distractions, just today's workout in seconds

**@slvrio/wod** is a utility package designed to facilitate synchronous communication through standard input and output streams using the **Model-Context-Protocol (MCP)** framework. This package integrates seamlessly with command-line interfaces and IDE environments such as **Cursor IDE**.

## Setup

### Cursor IDE integration

1. Open **Cursor IDE** settings
2. Navigate to `MCP` tab
3. Click on `Add new MCP server`
4. Fill in the fields:

   - **Name:** Any name
   - **Type:** `command`
   - **Command:** `npx -y @slvrio/wod`

5. Click **Save**

## Usage

> In chat (`cmd+i`), type `wod` and run the **wod tool** (`cmd+enter`)
npm package: @slvssb/eas-github-cache
Description: A custom build cache provider for Expo CLI. Uses GitHub to store builds.
Latest version: 1.0.0

# EAS Remote Build Cache Provider - GitHub

## 🚀 How to use

1. **Create a GitHub Personal Access Token** with **repo** permissions:

   - Go to [GitHub Settings › Developer settings › Personal access tokens](https://github.com/settings/tokens).
   - Click **Generate new token**, select the **repo** scope, and copy the token.
   - Set it in your shell:
     ```bash
     export GITHUB_TOKEN=YOUR_TOKEN_HERE
     ```

2. **To use the EAS remote build provider plugin, install the `@slvssb/eas-github-cache` package as a developer dependency:**

   ```bash
   npm install --save-dev @slvssb/eas-github-cache
   ```

3. **Configure your Expo project**:

   - Open `app.json`.
   - Update the `remoteBuildCache` block under the `expo` key:

   ```json
   {
     "expo": {
       ...
       "experiments": {
         "remoteBuildCache": {
           "provider": {
               "plugin": "@slvssb/eas-github-cache",
               "options": {
                 "owner": "<YOUR_GITHUB_USERNAME>",
                 "repo": "<YOUR_REPO_NAME>"
               }
            }
         }
       }
     }
   }
   ```

   - Replace `<YOUR_GITHUB_USERNAME>` and `<YOUR_REPO_NAME>` with your details.

> **Tip:** If you’d rather not create prereleases in your main repository, point `repo` to a separate GitHub project or private repo and update the `repo` option in `remoteBuildCache`.
npm package: @slvssb/react-native-tiktok-business
Description: React native module to integrate TikTok business SDK
Author: Selva
Latest version: 0.1.1

# React Native TikTok Business

TikTok Business SDK for React Native.
In debug mode, events should appear in the "Test Event" tab.

## Installation

```bash
npm install @slvssb/react-native-tiktok-business
yarn add @slvssb/react-native-tiktok-business
bun add @slvssb/react-native-tiktok-business
```

## Expo config plugin:

For Expo apps, you'll need to add both the plugin configuration and the required iOS privacy permission:

```json
{
  "expo": {
    "plugins": [
      [
        "@slvssb/react-native-tiktok-business",
        {
          "ios": {
            "appId": "YOUR_APP_ID",
            "tiktokAppId": "YOUR_TIKTOK_APP_ID",
            "disableAppTrackingDialog": true // Optional, defaults to false
          },
          "android": {
            "appId": "YOUR_APP_ID",
            "tiktokAppId": "YOUR_TIKTOK_APP_ID"
          }
        }
      ]
    ],
    "ios": {
      "infoPlist": {
        "NSUserTrackingUsageDescription": "This identifier will be used to provide a more personalized experience for you."
      }
    }
  }
}
```

The `NSUserTrackingUsageDescription` is required for iOS devices to request tracking authorization. Without this permission string, the tracking dialog will not be shown to users.

## Usage

```typescript
import TiktokBusiness from "@slvssb/react-native-tiktok-business"

// Identify a user
TiktokBusiness.identify("user-external-id", "username", "phone", "email")

// Clear user identification
TiktokBusiness.logout()

// Request tracking authorization (iOS only)
const status = await TiktokBusiness.requestTrackingAuthorization()

// Check if debug mode is enabled
const isDebug = TiktokBusiness.isDebugMode()

// Manually flush events (iOS only)
TiktokBusiness.flush()

// Track a simple event
TiktokBusiness.trackEvent("purchase")

// Track event with custom data
TiktokBusiness.trackEvent("purchase_completed", "order-123", [
  { key: "currency", value: "USD" },
  { key: "value", value: "99.99" },
  { key: "quantity", value: "1" },
  { key: "price", value: "99.99" },
])
```
npm package: @slydock/poly-js
Description: Library for polygons operations
Author: Slydoch
Latest version: 0.2.0

# Poly-JS
Poly-JS is a library for manipulating 2D polygons and vertices

# Features

1. 2D vertices operations
2. 2D lines operations
3. 2D polygons operations
4. 2D rect operations
5. 2D circle operations

# Installation
``npm i @slydock/poly-js``

# Basic Usage

For any component need, you'll need to import the plugin
```javascript
const {
	Vector2,
	Line,
	Polygon,
	Rect,
	Circle
} = require('@slydock/poly-js');
```

# Documentation

https://slydoch.github.io/poly-js/
npm package: @slyduck/cli
Description: CLI tool for SlyDuck - Coming Soon
Author: SlyDuck
Latest version: 0.0.1

# @slyduck/cli

CLI tool for [SlyDuck](https://slyduck.com) - Keep your vibe projects swimming.

## Coming Soon

```bash
npx @slyduck/cli init
```

This CLI will help you:
- Install the SlyDuck monitoring snippet
- Connect your project to SlyDuck
- Check project status

## Links

- Website: https://slyduck.com
- Documentation: https://slyduck.com/docs
npm package: @slyduck/snippet
Description: SlyDuck monitoring snippet for React/Next.js - Coming Soon
Author: SlyDuck
Latest version: 0.0.1

# @slyduck/snippet

React/Next.js component for [SlyDuck](https://slyduck.com) monitoring.

## Coming Soon

```bash
npm install @slyduck/snippet
```

```tsx
import { SlyDuckSnippet } from '@slyduck/snippet'

export default function Layout({ children }) {
  return (
    <html>
      <head>
        <SlyDuckSnippet siteId="your_site_id" />
      </head>
      <body>{children}</body>
    </html>
  )
}
```

## Links

- Website: https://slyduck.com
- Documentation: https://slyduck.com/docs
npm package: @slyedoc/angular-odata
Description: OData service for Angular2
Author: Patrick Towles
Latest version: 0.0.45

# angular2-odata
The project is in an early and untested stage at the moment.
The goal is to create a fluent API for querying, creating, updating and deleting OData resources in Angular2.
OData service for Angular

##Usage example:
Get the package from NPM:
```
npm install @slyedoc/angular-odata --save
```

To set baseUrl and import:

app.module.ts
```
  import {ODataModule} from "@slyedoc/angular-odata";
  ...
  imports: [
    ...
    ODataModule.forRoot({baseUrl: 'http://localhost/odata'})
  ]
```

An example interface and example
```
//An example model interface
interface INotification {
    Id: number;
    CommentId: number;
    Comment: IComment;
    FromId: number;
    From: IResource;
    Priority: number;
    SendDate: Date;
    IsArchived: boolean;
    Text: string;
}

//An example component
@Component({
  ...
})
export class NotyListComponent{
    private odata:ODataService<INotification>;
    constructor(private odataFactory:ODataServiceFactory, ...){
        this.odata = this.odataFactory.CreateService<INotification>("notification");
    }
    
    getOneNoty(id:int){
        this.odata.Get(id).Select("Id,Text").Expand("From,To").Exec()
        .subscribe(
            singleNoty=>{...},
            error=>{...}
        );
    }
      
      
    getNotys(){
        this.odata
        .Query()                    //Creates a query object
        .Top(this.top)    
        .Skip(this.skip)
        .Expand("Comment,From")
        .OrderBy("SendDate desc")
        .Filter(this.filterString)
        .Exec()                     //Fires the request
        .subscribe(                 //Subscribes to Observable<Array<T>>
        notys => {
            this.notys = notys;     //Do something with the result
        },
        error => {
            ...                     //Local error handler
        });
    
    }
}
```
npm package: @slyg/sketch-parser
Description: sketchapp document parser
Author: mrpeak
Latest version: 1.1.2

# sketch-parser

Eliminate the differences in the output of the following two ways：

* run sketchtool
* unzip `.sketch` and read `.json`

![version](https://img.shields.io/npm/v/sketch-parser.svg)
![Node.js](https://img.shields.io/badge/node.js-%3E=_6.0-green.svg)
![Sketch.app document](https://img.shields.io/badge/sketchapp--document-43+-brightgreen.svg)
[![Build Status](https://api.travis-ci.org/MrPeak/sketch-parser.svg?branch=master)](https://travis-ci.org/travis-ci/travis-web)

## Class: Parser

### new Parser(filePath, [needSketchTool])

* filePath `<String>`
* [needSketchTool] `<Boolean>`

Creates a new Parser object.

And sets the **parser.filePath** property to the provided sketch file path, maybe sets the **parser.needSketchTool** property to the provided option.

### parser.needSketchTool

* needSketchTool `<Boolean>`

Whether or not need *sketchtool* to get data, the default value is `true`.

### parser.getDocumentData();

Returns a whole document's data.

### parser.getPageDataList();

Returns a list containing all the page data.

## license

MIT
npm package: @slyk/slyk-sdk-node
Description: Slyk Node.js SDK
Author: Slyk
Latest version: 0.20.0

<div>
	<br>
	<br>
	<p align="center"><a href="https://slyk.io/"><img width="150" src="docs/media/slyk.png" alt="Slyk"></a></p>
	<br>
	<p align="center"><a href="https://slyk.io/"><img width="50" src="docs/media/logo.png" alt="Slyk"></a> - Node.js SDK </p>
	<br>
	<p align="center">
		<img alt="node" src="https://img.shields.io/node/v/@slyk/slyk-sdk-node">
		<img alt="NPM" src="https://img.shields.io/npm/l/@slyk/slyk-sdk-node">
		<img alt="Travis (.org) branch" src="https://img.shields.io/travis/slykio/slyk-sdk-node/master">
		<img alt="Coveralls github" src="https://img.shields.io/coveralls/github/slykio/slyk-sdk-node?branch=master">
  </p>
</div>

## Table of contents
- [Install](#install)
- [Usage](#usage)
- [Available methods](docs/methods.md)

This library allows you to quickly integrate **Slyk** with your Node.js application.

For additional information and documentation please visit our [developers page](https://developers.slyk.io).

## Install

```
$ yarn add @slyk/slyk-sdk-node
```

The `slyk-sdk-node` requires node **v8.12** or higher.

## Usage

### Example

```js
const slykSDK = require('@slyk/slyk-sdk-node');

(function() {
  const slyk = slykSDK({ apikey: 'api-key' });

  slyk.wallet.get('8399340e-8c1f-4c4f-94e0-81a5ee0378e1')
    .then(function(wallet) {
      wallet.getBalance({ filter: { assetCode: 'in:btc,usd' } })
        .then(function(balance) {
          console.log(balance);
        });
    });
})();
```

### ES8 Example

```js
import slykSDK from '@slyk/slyk-sdk-node';

(async () => {
  const slyk = slykSDK({ apikey: 'api-key' });
  const wallet = await slyk.wallet.get('8399340e-8c1f-4c4f-94e0-81a5ee0378e1');
  const balance = await wallet.getBalance({ filter: { assetCode: 'in:btc,usd' } });

  console.log(balance);
})();
```

### Result

```json
[
  { "amount": "0.50000000", "assetCode": "btc" },
  { "amount": "25.50000000", "assetCode": "usd" }
]
```
npm package: @slynch13/usedebounce
Description: Hook that implements debounce functionality
Author: slynch13
Latest version: 3.0.1

# @slynch13/usedebounce

> Hook that implements debounce functionality

[![NPM](https://img.shields.io/npm/v/@slynch13/usedebounce.svg)](https://www.npmjs.com/package/@slynch13/usedebounce) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save @slynch13/usedebounce
```

## Usage

```jsx
import React, { useState, useEffect } from 'react'
import { useDebounce } from '@slynch13/usedebounce'
import { useInterval } from '@slynch13/useinterval'

const App = () => {
  let [state, setState] = useState(0)
  let [count, setCount] = useState(0)
  let [speed, setSpeed] = useState(1000)
  let delay = 1000
  const debounced = useDebounce((display) => {
    setState(x => x + 1)
  }, delay)
  let interval = useInterval(() => {
    setCount(x => x + 1)
    debounced()
  }, 500)

  useEffect(() => {
    if (count % 100 < 10) {
      setSpeed(500)
    } else if (count % 100 < 20) {
      setSpeed(1000)
    } else if (count % 100 < 30) {
      setSpeed(2000)
    } else {
      setSpeed(100)
    }
  }, [count])
  useEffect(() => {
    interval.changeTimeout(speed)
  }, [speed])
  return (
    <div>
      <div>Delay: {delay}ms</div>
      <div>Speed: {speed}ms</div>
      <div>State: {state}</div>
      <div>Executed: {count}</div>
    </div>
  )
}
export default App
```

## License

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

---

This hook is created using [create-react-hook](https://github.com/hermanya/create-react-hook).
npm package: @slynch13/useinterval
Description: React hook for setting up an interval
Author: slynch13
Latest version: 1.0.0

# useinterval

> React hook for setting up an interval

[![NPM](https://img.shields.io/npm/v/useinterval.svg)](https://www.npmjs.com/package/useinterval) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save useinterval
```

## Usage

```jsx
import React, { useState } from 'react'
import { useInterval } from 'useinterval'

const App = () => {
  let [example, setExample] = useState(0)
  useInterval(() => {
    setExample(x => setExample(x + 1))
  }, 1000)
  return (
    <div>
      {example}
    </div>
  )
}
export default App
```

## License

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

---

This hook is created using [create-react-hook](https://github.com/hermanya/create-react-hook).
npm package: @slynch13/usethrottle
Description: React hook for to throttle functions
Author: slynch13
Latest version: 1.1.0

# usethrottle

> React hook for to throttle functions

[![NPM](https://img.shields.io/npm/v/usethrottle.svg)](https://www.npmjs.com/package/usethrottle) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save usethrottle
```

## Usage

```jsx
import React, { useState, useEffect } from 'react'
import { useThrottle } from 'usethrottle'

const App = () => {
  let [example, setExample] = useState(0)
  const throttled = useThrottle((x) => setExample(x), 1000)
  useEffect(() => {
    throttled(example + 1)
  }, [example])
  return (
    <div>
      {example}
    </div>
  )
}
export default App

```

## License

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

---

This hook is created using [create-react-hook](https://github.com/hermanya/create-react-hook).
npm package: @slyncio/app-config
Description: App config loader
Author: Slync, Inc.
Latest version: 1.0.1

# Simple App Config for your applications

## Installation
Using npm in your app directory:
```shell
$ npm i --save @slyncio/app-config
```

## Setup
* Create a root config directory
* While this defaults to directory named `config` in your app directory, it can be overrriden by setting `APP_CONFIG_ROOT` env variable relative to current working directory
* Your default config files (`.json` or `.js`) should be under `<config root>/default` directory

## Usage
* Sample json in `<config root>/default/db.json`

  ```json
  {
    "host": "foo.bar.com",
    "port": 5432,
    "tables": ["users", "role", "tokens"],
    "user": {
      "name": "dbuser",
      "password": "frhhbwfefwef"
    }
  }

  ```

* Config usage in your app

  ```javascript
  const Config = require('@slyncio/app-config')()

  const dbHost = Config.get('db.host') // foo.bar.com
  const rTable = Config.get('db.tables[1]') // role
  const username = Config.get('db.user.name') // dbuser
  ```

## Environment specific config
* Environment specific configs can be used to override the default ones
* You can create any environment directories under the `config` folder
* Current environment is determined by `NODE_ENV` or `APP_CONFIG_ENV` environment variables
* The default environment is set to `development`

## Environment variable overrides
* Create a directory names `env` under `<config root>`
* Run `./node_modules/.bin/app-config` to auto generate config files with environment variables
* You can chose a custom prefix by doing this `APP_CONFIG_VAR_PREFIX=<CUSTOM_PREFIX> ./node_modules/.bin/app-config`

### License


Copyright (c) 2018 Slync, Inc. https://slync.io

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: @slynhq/geo
Description: Geo middleware for Next.js
Author: @slynhq
Latest version: 1.0.1

# @slynhq/geo

A lightweight Next.js package for accessing geolocation data from Vercel's edge network headers.

## Features

- Get complete geolocation data (city, country, region, coordinates, continent)
- Individual helper functions for specific geolocation data
- Middleware compatibility
- TypeScript support
- Zero dependencies

## Installation

```bash
npm install @slynhq/geo
# or
yarn add @slynhq/geo
# or
pnpm add @slynhq/geo
```

## Usage

### Get Complete Geolocation Data

```typescript
import { getGeoLocation } from "@slynhq/geo";

// In a route handler
export async function GET() {
  const geo = await getGeoLocation();
  return Response.json({ geo });
}
```

The `getGeoLocation()` function returns an object with the following properties:

- `city`: City name
- `country`: Country code (e.g., 'US', 'GB')
- `countryRegion`: Country region
- `latitude`: Latitude coordinate
- `longitude`: Longitude coordinate
- `region`: Region name
- `userAgent`: User agent string
- `continent`: Continent name

### Individual Helper Functions

```typescript
import { getCountry, getCity, getRegion, getContinent } from "@slynhq/geo";

// Get country code
const country = await getCountry(); // e.g., 'US'

// Get city name
const city = await getCity(); // e.g., 'San Francisco'

// Get region name
const region = await getRegion(); // e.g., 'California'

// Get continent name
const continent = await getContinent(); // e.g., 'North America'
```

### Middleware Usage

```typescript
import { getGeo } from "@slynhq/geo";
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

export function middleware(request: NextRequest) {
  const geo = getGeo(request);
  // Use geo data in middleware
  return NextResponse.next();
}
```

### Get All Headers

```typescript
import { getAllHeaders } from "@slynhq/geo";

export async function GET() {
  const headers = await getAllHeaders();
  return Response.json({ headers });
}
```

## Requirements

- Next.js 13 or later
- Vercel deployment (for geolocation headers)

## Note

This package relies on Vercel's edge network headers for geolocation data. It will only work when deployed on Vercel's platform.

## License

MIT
npm package: @slynhq/ua
Description: A utility package to get user agents
Author: @slynhq
Latest version: 1.0.0

# @slynhq/ua

A lightweight utility package for parsing and handling user agents. This package provides easy access to browser, OS, device, and engine information from user agent strings.

## Installation

```bash
npm install @slynhq/ua
# or
yarn add @slynhq/ua
# or
pnpm add @slynhq/ua
```

## Usage

```typescript
import { getUserAgent } from "@slynhq/ua";

// Get user agent information
const userAgentInfo = getUserAgent(userAgentString, screenWidth);

// Example output:
// {
//   os: "Windows",
//   browser: "Chrome",
//   cpu: "x64",
//   engine: "Blink",
//   version: "120.0.0.0",
//   device: "Desktop" // or "Mobile" or "Tablet" based on width
// }
```

## API Reference

### `getUserAgent(userAgent: string, width?: number)`

Parses a user agent string and returns detailed information about the browser, OS, and device.

#### Parameters

- `userAgent` (string): The user agent string to parse
- `width` (number, optional): Screen width in pixels to determine device type

#### Returns

An object containing:

- `os`: Operating system name
- `browser`: Browser name
- `cpu`: CPU architecture
- `engine`: Browser engine name
- `version`: Engine version
- `device`: Device type ("Desktop", "Tablet", or "Mobile")

#### Device Type Determination

The package determines device type based on the provided width:

- Mobile: width < 768px
- Tablet: width >= 768px and < 1024px
- Desktop: width >= 1024px or no width provided

## Requirements

- Next.js >= 13.0.0
- Node.js >= 14.0.0

## License

MIT © @slynhq
npm package: @slynova/flydrive-gcs
Description: Google Cloud Storage driver for @slynova/flydrive
Author: Romain Lanz
Latest version: 1.0.3

<p align="center">
  <img src="https://user-images.githubusercontent.com/2793951/54391096-418f4500-46a4-11e9-8d0c-b00ff7ba4198.png" alt="flydrive">
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/@slynova/flydrive-gcs"><img src="https://img.shields.io/npm/dm/@slynova/flydrive-gcs.svg?style=flat-square" alt="Download"></a>
  <a href="https://www.npmjs.com/package/@slynova/flydrive-gcs"><img src="https://img.shields.io/npm/v/@slynova/flydrive-gcs.svg?style=flat-square" alt="Version"></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/npm/l/@slynova/flydrive-gcs.svg?style=flat-square" alt="License"></a>
</p>

`flydrive` is a framework-agnostic package which provides a powerful wrapper to manage file Storage in [Node.js](https://nodejs.org).

This package is the driver for Google Cloud Storage.

---

## Getting Started

This package is available in the npm registry.
It can easily be installed with `npm` or `yarn`.

```bash
$ npm i @slynova/flydrive-gcs
# or
$ yarn add @slynova/flydrive-gcs
```

```javascript
const { GoogleCloudStorage } = require('@slynova/flydrive-gcs');
const { StorageManager } = require('@slynova/flydrive');
const storage = new StorageManager({
  // ...

  gcs: {
    driver: 'gcs',
    config: {
      keyFilename: process.env.GCS_KEYFILENAME,
      bucket: process.env.GCS_BUCKET,
    },
  },
});

storage.registerDriver('gcs', GoogleCloudStorage);
```
npm package: @slynova/flydrive-s3
Description: AWS S3 driver for @slynova/flydrive
Author: Romain Lanz
Latest version: 1.0.3

<p align="center">
  <img src="https://user-images.githubusercontent.com/2793951/54391096-418f4500-46a4-11e9-8d0c-b00ff7ba4198.png" alt="flydrive">
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/@slynova/flydrive-s3"><img src="https://img.shields.io/npm/dm/@slynova/flydrive-s3.svg?style=flat-square" alt="Download"></a>
  <a href="https://www.npmjs.com/package/@slynova/flydrive-s3"><img src="https://img.shields.io/npm/v/@slynova/flydrive-s3.svg?style=flat-square" alt="Version"></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/npm/l/@slynova/flydrive-s3.svg?style=flat-square" alt="License"></a>
</p>

`flydrive` is a framework-agnostic package which provides a powerful wrapper to manage file Storage in [Node.js](https://nodejs.org).

This package is the driver for Amazon S3 and other compatible services.

---

## Getting Started

This package is available in the npm registry.
It can easily be installed with `npm` or `yarn`.

```bash
$ npm i @slynova/flydrive-s3
# or
$ yarn add @slynova/flydrive-s3
```

```javascript
const { AmazonWebServicesS3Storage } = require('@slynova/flydrive-s3');
const { StorageManager } = require('@slynova/flydrive');
const storage = new StorageManager({
  // ...

  s3: {
    driver: 's3',
    config: {
      key: process.env.S3_KEY,
      endpoint: process.env.S3_ENDPOINT,
      secret: process.env.S3_SECRET,
      bucket: process.env.S3_BUCKET,
      region: process.env.S3_REGION,
    },
  },
});

storage.registerDriver('s3', AmazonWebServicesS3Storage);
```
npm package: @slynova/hash
Description: Flexible and Fluent framework-agnostic driver based system for password hashing algorithms.
Author: Romain Lanz
Latest version: 0.1.0

# Hash

<p align="center">
  <a href="https://www.npmjs.com/package/@slynova/hash"><img src="https://img.shields.io/npm/dm/@slynova/hash.svg?style=flat-square" alt="Download"></a>
  <a href="https://www.npmjs.com/package/@slynova/hash"><img src="https://img.shields.io/npm/v/@slynova/hash.svg?style=flat-square" alt="Version"></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/npm/l/@slynova/hash.svg?style=flat-square" alt="License"></a>
</p>

`hash` is a framework-agnostic package which provides a powerful wrapper for password hashing algorithms in [Node.js](https://nodejs.org).

There are currently 2 drivers available:

- Argon2
- Bcrypt

---

## Getting Started

This package is available in the npm registry.
It can easily be installed with `npm` or `yarn`.

```bash
$ npm i @slynova/hash
# or
$ yarn add @slynova/hash
```

When you require the package in your file, it will give you access to the `HashManager` class.
This class is a facade for the package and should be instantiated with a [configuration object](https://github.com/Slynova-Org/hash/blob/master/test/stubs/config.ts).

```javascript
const { HashManager } = require('@slynova/HashManager')
const hash = new HashManager(config)
```

Once you instantiated the manager, you can use the `HashManager#use()` method to retrieve a driver an use it.

```javascript
hash.use() // Returns the default driver (specified in the config)
hash.use('argon2') // Returns the argon2 driver
hash.use('bcrypt', customConfig) // Overwrite the default configuration of the driver
```

## Driver's API

Each driver implements the Interface [`Hash`](https://github.com/Slynova-Org/hash/blob/master/src/Hash.ts).

### Methods

<details>
<summary markdown="span"><code>make(value: string, config?: Argon2Config | BcryptConfig): Promise&lt;string&gt;</code></summary>

This method will hash a plain value using the provided driver.

```javascript
await hash.use('bcrypt').make('foo')
// $2b$10$RFgHztUoooIJEhuR4/e3ue4lZg36HYcIY2D7ptjB494FI/ctohaa6
```

</details>

<details>
<summary markdown="span"><code>verify(value: string, hash: string): Promise&lt;boolean&gt;</code></summary>

This method will verify an existing hash with the plain value using the provided driver.

```javascript
await hash.use('bcrypt').verify('$2b$10$RFgHztUoooIJEhuR4/e3ue4lZg36HYcIY2D7ptjB494FI/ctohaa6', 'foo')
```

</details>

## Contribution Guidelines

Any pull requests or discussions are welcome.
Note that every pull request providing new feature or correcting a bug should be created with appropriate unit tests.
npm package: @slynova/slug
Description: Transforms any text into an uri-safe string.
Author: Romain Lanz
Latest version: 1.1.2

# node-slug

Transforms any text into an uri-safe string.

---

## Getting Started

This package is available in the Node Package Repository and can be easily installed with [npm](https://docs.npmjs.com/getting-started/what-is-npm) or [yarn](https://yarnpkg.com).

```bash
$ npm i @slynova/slug
# or
$ yarn add @slynova/slug
```

Then require the `slug()` method directly from the package.

```javascript
const slug = require('@slynova/slug')

slug('1 < 2') // 1-less-2
slug('Hey! How are you') // hey-how-are-you
slug('tôi tên là đức tạ') // toi-ten-la-duc-ta
slug('learn adonis in 30minutes') // learn-adonis-in-30-minutes
```

## Extending char map

To extend the char map you can use the static method `extends`

```javascript
const slug = require('@slynova/slug')

slug.extends({'💙': 'love'})
slug('i 💙 you') // i-love-you
```

## Contribution Guidelines

Any pull requests or discussions are welcome.<br>
Note that every pull request providing a new feature or correcting a bug should be created with appropriate unit tests.
npm package: @slynova/symfony-encore
Description: Wrapper of Symfony Encore for AdonisJS
Author: Romain Lanz
Latest version: 0.3.1

# AdonisJS - Symfony Encore

This package wraps [Symfony Encore](https://symfony.com/doc/current/frontend.html) to make it work seamlessly with AdonisJS.

## Getting Started

This package is available in the npm registry. It can easily be installed with `npm` or `yarn`.

```bash
$ npm i @slynova/symfony-encore
# or
$ yarn add @slynova/symfony-encore
```

Then, you need to scaffold the package using the `node ace invoke` command.

```bash
$ node ace invoke @slynova/symfony-encore
```

Doing so will install `@symfony/webpack-encore` directly in your application, create a boilerplate configuration and setup few scripts in your `package.json` to build your assets.

## How to Use

After tweaking the configuration [according to the documentation](https://symfony.com/doc/current/frontend.html), you can use the two helpers `encoreLink` and `encoreScript` in your Edge templates.

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    {{-- Styling --}}
    {{{ encoreLink('css/app') }}}

    {{-- Scripting --}}
    {{{ encoreScript('js/app') }}}
  </head>
  <body>
    {{-- .... --}}
  </body>
</html>
```

The parameter given to those helpers is the entry path you gave in your configuration.