open-index/open-npm huggingface dataset:
npm package: @skypress/nestjs-fireorm
Description: Nestjs Fireorm module
Author: BMO
Latest version: 0.1.0

# nestjs-fireorm

[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![Coverage Status](https://coveralls.io/repos/github/glebbash/nestjs-fireorm/badge.svg?branch=master)](https://coveralls.io/github/glebbash/nestjs-fireorm?branch=master)

[Nest.js](https://nestjs.com)
[Fireorm](https://fireorm.js.org)
module

Installation:

```sh
npm i nestjs-fireorm
```

[Example usage](https://github.com/glebbash/nestjs-fireorm/tree/master/example/src)

[Mit Licensed](LICENSE)
npm package: @skypress/typeorm-query-api
Description: SkyPress TypeORM package to map URL Query to Find Options
Author: BMO
Latest version: 0.2.3

# SkyPress TypeORM Query API

Map URL Query Parameters to [TypeORM Find Options](https://typeorm.io/find-options).

## Basic Query Params to Find Options

| Query Param | Type                   | Find Option   | Example                                 |
| ----------- | ---------------------- | ------------- | --------------------------------------- |
| `select`    | Comma Separated String | `select`      | `/authors?select=id,firstName,lastName` |
| `load`      | Comma Separated String | `relations`   | `/authors?load=books`                   |
| `sort`      | String                 | `order`       | `/authors?sort=age`                     |
| `desc`      | Boolean                | `order`       | `/authors?sort=age&desc=true`           |
| `skip`      | Number                 | `skip`        | `/authors?skip=10`                      |
| `limit`     | Number                 | `take`        | `/authors?limit=10&skip=20`             |
| `deleted`   | Boolean                | `withDeleted` | `/authors?deleted=true`                 |
| Entity Key  | Any                    | `where`       | `/authors?firstName=Mark&lastName=Ross` |

## Advanced Query Parameters

More sophisticated "where" queries can be made by providing the following Keys paired with the `::` delimiter.

| Key   | Operator          | Example                      |
| ----- | ----------------- | ---------------------------- |
| `gt`  | `MoreThan`        | `/authors?age=gt::30`        |
| `gte` | `MoreThanOrEqual` | `/authors?age=gte::30`       |
| `lt`  | `LessThan`        | `/authors?age=lt::30`        |
| `lte` | `LessThanOrEqual` | `/authors?age=lte::30`       |
| `ne`  | `Not`             | `/authors?firstName=ne::Bob` |
npm package: @skypulsefy/pulse
Description: Official Skypulsefy Pulse client for sending heartbeat pings
Latest version: 0.1.4

# @skypulsefy/pulse

Official Skypulsefy Pulse client for sending heartbeat pings.
API host is fixed to https://skypulsefy.com

The client auto-measures roundtrip latency via `GET /api/ping` and sends that `ms` with the heartbeat to `POST /api/ping/:pageId/:serviceId`. Minimal setup: only `apiKey`, `pageId`, `serviceId`.

## Install

```bash
npm install @skypulsefy/pulse
```

## Quick start

```js
import { keepAlive } from '@skypulsefy/pulse';

keepAlive({
  apiKey: process.env.SKYPULSEFY_API_KEY,
  pageId: 'my-page',
  serviceId: 'web',
  // optional:
  // intervalMs: 60_000,
  // debug: true,
  // onPing: ({ ms, status }) => console.log('sent ms', ms, 'status', status)
});
```

Or manage the client yourself:

```js
import SkypulsefyClient from '@skypulsefy/pulse';

const client = new SkypulsefyClient({
  apiKey: process.env.SKYPULSEFY_API_KEY,
  pageId: 'my-page',
  serviceId: 'web',
  debug: true,
  msProvider: async () => 42,
  onPing: (info) => console.log(info),
  // If you need to send ms to the server (legacy):
  // useLegacyPingMs: true
});

client.start();

// later
client.stop();
```

Environment variable `SKYPULSEFY_BASE_URL` can override the API base URL.
npm package: @skyra/anti-user-gateway
Description: A plugin to remove the user gateway and user settings from Klasa
Author: Antonio Román
Latest version: 1.0.0

# @skyra/anti-user-gateway

This is a plugin that can be used in both [klasa]/[settings] (0.5.0-dev) and
[klasa]/[next] (0.6.0-dev).

This plugin works by registering a custom gateway implementing Gateway, which
avoids all I/O operations by making them [NOP]s. However, this plugin comes with
the cost that `User#settings` cannot be used unless you use class fields.

## Contributing

1. Fork it!
1. Create your feature branch: `git checkout -b my-new-feature`
1. Commit your changes: `git commit -am 'Add some feature'`
1. Push to the branch: `git push origin my-new-feature`
1. Submit a pull request!

## Author

**@skyra/anti-user-gateway** © [kyranet][author], released under the
[MIT][license] License.
Authored and maintained by kyranet.

> Github [kyranet][author] - Twitter [@kyranet_][twitter]

[license]: https://github.com/skyra-project/anti-user-gateway/blob/master/LICENSE.md
[author]: https://github.com/kyranet
[twitter]: https://twitter.com/kyranet_

[klasa]: https://github.com/dirigeants/klasa
[settings]: https://github.com/dirigeants/klasa/tree/settings
[next]: https://github.com/dirigeants/klasa/tree/master
[NOP]: https://en.wikipedia.org/wiki/NOP_(code)
npm package: @skyramp/skyramp
Description: module for leveraging skyramp cli functionality
Latest version: 1.3.18

# skyramp

`skyramp` is an npm module that provides functionalities to generate and execute a variety of functional tests (including smoke, contract, and integration tests). It also offers features for asserting scenarios in various test environments. 

For more information about Skyramp, please visit [our website](https://skyramp.dev).

## Installation
To install Skyramp, please refer to the [installation instructions](https://skyramp.dev/docs/quickstart/install) to set up the Skyramp CLI as well as the required dependencies.

## Usage
To use `skyramp` please refer to the guide to [generate your first test](https:skyramp.dev/docs/quickstart/first-test-general). Once you generate your first integration test in TypeScript using the Skyramp CLI, you can execute the test with the following command:

```bash
npx playwright test products_integration_test.spec.ts --reporter=list
```
npm package: @skyraptor/bsc-scan
Description: Node.js package to interact with official BscScan API
Author: Juan Pablo Garcia
Latest version: 1.1.2

# Node.js BscScan API

[![version](https://img.shields.io/npm/v/bsc-scan.svg)](https://www.npmjs.com/package/bsc-scan)
[![minzipped size](https://img.shields.io/bundlephobia/minzip/bsc-scan.svg)](https://www.npmjs.com/package/bsc-scan)
[![downloads](https://img.shields.io/npm/dt/bsc-scan.svg)](https://www.npmjs.com/package/bsc-scan)
[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2Fjpgarcia%2Fbsc-scan&via=binance&text=BscScan%20Node.js%20Api%20Client%21%20for%20Binance%20Smart%20Chain%20@binance%20%23BSC&hashtags=bnb%2Cbsc%2Cbinancesmartchaib%2Cbscscan)

<img src="https://bscscan.com/images/logo-bscscan.svg?v=0.0.2" height="40" />

Node.js package to interact with official [BscScan API](https://bscscan.io/apis) powered by TypeScript.

## Documentation

**[API reference](https://bscscan.com/apis)**

## Installation

```bash
$ yarn add bsc-scan
```

## Usage

```ts
import bscscan, { account } from 'bsc-scan'

bscscan.setUrl('https://testnet.bscscan.com')
bscscan.setApiKey('YourApiKeyToken')

const start = async () => {
  try {
    const balance = await account.getBnbBalance('0x765090aB712984081aeE059eA7025C48a4198183')

    console.log(`Your balance is: ${balance}`)
  } catch (err) {
    console.log(err)
  }
}

start()
```
npm package: @skyrim-platform/console-util
Description: TypeScript library for the ConsoleUtil Skyrim modding utility
Latest version: 1.3.3

## `@skyrim-platform/console-util`

(Unofficial) TypeScript library for the ConsoleUtil Skyrim modding utility

- ConsoleUtil on GitHub: https://github.com/Ryan-rsm-McKenzie/ConsoleUtilSSE
- ConsoleUtil on Nexus: https://www.nexusmods.com/skyrimspecialedition/mods/24858

## Getting Started

You can find an example Skyrim Platform plugin with documentation on how to get started using this library: https://github.com/skyrim-platform/example-plugin-using-libraries

> Papyrus source code conversion to TypeScript originally generated using [Papyrus-2-Typescript](https://github.com/CarlosLeyvaAyala/Papyrus-2-Typescript)

## Example

```ts
import { on, printConsole } from '@skyrim-platform/skyrim-platform'
import { GetSelectedReference } from '@skyrim-platform/console-util'

// Whenever anything is selected in the ~ Skyrim console, it prints out that object's name in the console
on('update', () => {
    const selectedReference = GetSelectedReference()
    if (selectedReference) {
        let name = selectedReference.getName()
        if (! name) name = selectedReference.getDisplayName()
        if (! name) name = selectedReference.getBaseObject()!.getName()
        printConsole(`Selected reference: ${name}`)
    }
})
```
npm package: @skyrim-platform/jcontainers
Description: TypeScript library for the JContainers Skyrim modding utility
Latest version: 4.2.3

## `@skyrim-platform/jcontainers`

(Unofficial) TypeScript library for the JContainers Skyrim modding utility

- JContainers on GitHub: https://github.com/ryobg/JContainers
- JContainers on Nexus: https://www.nexusmods.com/skyrimspecialedition/mods/16495
- JContainers documentation: https://github.com/ryobg/JContainers/wiki

## Getting Started

You can find an example Skyrim Platform plugin with documentation on how to get started using this library: https://github.com/skyrim-platform/example-plugin-using-libraries

> Papyrus source code conversion to TypeScript originally generated using [Papyrus-2-Typescript](https://github.com/CarlosLeyvaAyala/Papyrus-2-Typescript)

## Example

```ts
import { once, Debug } from '@skyrim-platform/skyrim-platform'
import * as JMap from '@skyrim-platform/jcontainers/JMap'

// Store stuff in a JMap and then print it out
once('update', () => {
    const map = JMap.object()
    JMap.setStr(map, 'greeting', 'Hello, world!')
    Debug.messageBox(`JContainers says: ${JMap.getStr(map, 'greeting')}`)
})
```
npm package: @skyrim-platform/papyrus-bridge
Description: Communicate between Skyrim Platform (TypeScript) and Skyrim scripts (Papyrus)
Author: Mrowr Purr
Latest version: 0.1.1

## `@skyrim-platform/papyrus-bridge`

Communicate between Skyrim Platform (TypeScript) and Skyrim scripts (Papyrus)

Documentation: https://github.com/skyrim-platform/papyrus-bridge
npm package: @skyrim-platform/papyrus-util
Description: TypeScript library for the PapyrusUtil Skyrim modding utility
Latest version: 4.2.3

## `@skyrim-platform/papyrus-util`

(Unofficial) TypeScript library for the PapyrusUtil Skyrim modding utility

- PapyrusUtil on Nexus: https://www.nexusmods.com/skyrimspecialedition/mods/13048
- PapyrusUtil maintainer: [exiledviper](https://www.nexusmods.com/skyrimspecialedition/users/85199)
- PapyrusUtil original author: [meh321](https://www.nexusmods.com/skyrim/users/2964753)

## Getting Started

You can find an example Skyrim Platform plugin with documentation on how to get started using this library: https://github.com/skyrim-platform/example-plugin-using-libraries

> Papyrus source code conversion to TypeScript originally generated using [Papyrus-2-Typescript](https://github.com/CarlosLeyvaAyala/Papyrus-2-Typescript)

## Example

```ts
import { once, printConsole } from '@skyrim-platform/skyrim-platform'
import { FoldersInFolder } from '@skyrim-platform/papyrus-util/MiscUtil'

// When the game loads, show a listing of all of the directory names inside of the Data folder
once('update', () => {
    const foldersInData = FoldersInFolder('.')
    if (foldersInData)
        Debug.messageBox(`Folders in Data directory: ${foldersInData.join("\n")}`)
})
```
npm package: @skyrim-platform/po3-papyrus-extender
Description: (Unofficial) TypeScript library for the powerofthree Papyrus Extender Skyrim modding utility
Latest version: 4.5.7

## `@skyrim-platform/po3-papyrus-extender`

(Unofficial) TypeScript library for the powerofthree Papyrus Extender Skyrim modding utility

- powerofthree Papyrus Extender on GitHub: https://github.com/powerof3/PapyrusExtenderSSE
- powerofthree Papyrus Extender on Nexus: https://www.nexusmods.com/skyrimspecialedition/mods/22854

## Getting Started

You can find an example Skyrim Platform plugin with documentation on how to get started using this library: https://github.com/skyrim-platform/example-plugin-using-libraries

> Papyrus source code conversion to TypeScript originally generated using [Papyrus-2-Typescript](https://github.com/CarlosLeyvaAyala/Papyrus-2-Typescript)

## Example

```ts
import { once, Game, Debug, Spell, Actor } from '@skyrim-platform/skyrim-platform'
import { RemoveBaseSpell } from '@skyrim-platform/po3-papyrus-extender/PO3_SKSEFunctions'

// Remove the 'Flames' spell from the player!
once('update', () => {
    const flamesFormID = parseInt('00012FCD', 16)
    const flames = Spell.from(Game.getForm(flamesFormID))
    if (flames) {
        const player = Game.getPlayer()
        if (RemoveBaseSpell(player, flames))
            Debug.messageBox(`Removed base spell ${flames.getName()} from the player`)
    }
})
```
npm package: @skyrim-royale/skyrim-royale-ui-components
Description: Library of UI components, styles and resources of Skyrim Royale
Author: Skyrim Royale
Latest version: 0.7.2

# skymp-ui-components

Library of UI components, styles and resources of SkyMP

### Install

```sh
npm install @skymp/skymp-ui-components
```

### Development

```sh
$ git clone https://github.com/svyatoslavratov/skymp-ui-components.git
$ cd skymp-ui-components
$ npm install
$ npm start
```

Run **storybook** for view of components and documentation

```sh
npm run storybook
```

### Contributing

Read our [contributing guide](CONTRIBUTING.MD)
npm package: @skyring/scylladown
Description: SyllaDB leveldown backend for Skyring
Author: Eric Satterwhite
Latest version: 3.0.1

# skyring-scylladown

> [`ScyllaDB`] backend store for [`levelup`] leveraging [`abstract-leveldown`]

[![level badge][level-badge]](https://github.com/level/awesome)
[![npm](https://img.shields.io/npm/v/@skyring/scylladown.svg?style=flat-square)](https://github.com/esatterwhite/skyring-scylladown)
[![npm](https://img.shields.io/npm/l/@skyring/scylladown.svg?style=flat-square)](https://github.com/esatterwhite/skyring-scylladown/blob/master/LICENSE)

Specialized leveldown backend for use with skyring. Not all level down features are supported.
Namely, iterator / stream ranges and explicit buffer casting - all keys and values are returned as strings

## Example

```javascript
const levelup = require('levelup')
const scylladown = require('@skyring/scylladown')

const opts = {
  contactPoints: ['192.0.0.1:9042', '192.0.0.2:9042', '192.0.0.3:9042']
, keyspace: 'customkeyspace'
}

const db = levelup(scylladown('table_name'), opts)
```

### Options

* `contactPoints` - Array of scylla nodes
* `keyspace` - The scylla keyspace to operate int
* `replicas` - The number of keyspace replicas to create

[`ScyllaDB`]: https://github.com/Level/abstract-leveldown
[`abstract-leveldown`]: https://github.com/Level/levelup
[level-badge]: http://leveldb.org/img/badge.svg
[`levelup`]: https://github.com/Level/levelup
npm package: @skyring/smtp-transport
Description: SMTP based transport for skyring
Author: Eric Satterwhite
Latest version: 1.0.1

# skyring-smtp-transport [![Build Status](https://travis-ci.org/esatterwhite/skyring-smtp-transport.svg?branch=master)](https://travis-ci.org/esatterwhite/skyring-smtp-transport)

SMTP Transport for node-skyring

The smtp transport exposes a configurable transport function. As a result, it must be manually
passed to a skyring server, and cannot be auto loaded. Environment variables can also be used
to configure the transport instead of passing configuration in directly

```js
const Skyring = require('skyring')
const SMTP = require('@skyring/smtp-transport')

new Skyring({
  seeds: ['localhost:3456']
, node: {host: 'localhost', port: 3456}
, transports: [ SMTP({ host: 'smtp.mail.com', port: 578 }) ]
})
```

Available Environment Variables

| Variable | Usabage | Example |
-----------|---------|---------|
SKYRING_SMTP_PORT | port of smtp server to connect to | 25
SKYRING_SMTP_HOST | host name or ip of the smtp server | smtp.mailserver.com
SKYRING_SMTP_AUTHMETHOD | auth method to login with | 'PLAIN'
SKYRING_SMTP_USER | smtp login user name | 'username'
SKYRING_SMTP_PASS | smtp login password | 'password'
npm package: @skyring/tcp-transport
Description: A TCP transport for skyring service
Author: Eric Satterwhite
Latest version: 4.0.1

# skyring-tcp-transport
A TCP based transport with connection pooling for Skyring.

## Installation

```bash
$ npm install @skyring/tcp-transport --save
```

## Usage

Skyring accepts an array property `transports`. Each entry can be a string or a named function.
If given a string, skyring will pass it to `require` which must resolve to a named function

```js
const Skyring = require('skyring')
const server = new Skyring({
  transports: ['@skyring/tcp-transport']
, seeds: ['localhost:3455']
})

server
  .load()
  .listen(3000)
```


### Example Echo Server

```js
// tcp echo server
'use strict'

let count = 0
const port = process.env.PORT || 5555
const net = require('net')
const server = net.createServer((socket) => {
  socket.on('data', (chunk) => {
    console.log(`${++count} ` + chunk)
  })
})

process.once('SIGINT', onSignal)
process.once('SIGTERM', onSignal)
server.listen(port, (err) => {
  if (err) {
    console.log(err)
    process.exitCode = 1
  }
  console.log('server listening')
})
function onSignal() {
  server.close()
}
```

```bash
$ curl -XPOST http://localhost:3000/timer -H 'Content-Type: application/json' -d '{
  "timeout":3000
, "data":"hello world!"
, "callback": {
    "transport": "tcp"
  , "method":"unused"
  , "uri": "tcp://0.0.0.0:5555"
  }
}'
```

```
>>> 1 hello world !
```
npm package: @skyring/zmq-transport
Description: ZeroMQ Transport for Skyring
Author: Eric Satterwhite
Latest version: 4.0.1

# skyring-zmq-transport

A ZMQ based transport for Skyring using `PUSH` or `PUB` zmq socket types.
Specify the type of socket for the connection with the `method` field when
creating a timer

## Installation

```bash
$ npm install @skyring/zmq-transport --save
```

## Usage

Skyring accepts an array property `transports`. Each entry can be a string or a named function.
If given a string, skyring will pass it to `require` which must resolve to a named function

```js
const Skyring = require('skyring')
const server = new Skyring({
  transports: ['@skyring/zmq-transport']
, seeds: ['localhost:3455']
})

server
  .load()
  .listen(3000)
```


### Example Echo Server

```js
'use strict'

const zmq = require('zmq')

let count = 0
const port = process.env.PORT || 5555
const socket = zmq.socket('pull')
socket.connect(`tcp://0.0.0.0:${port}`)
socket.on('message', (evt, chunk) => {
  console.log(`${++count} ` + chunk)
})
process.once('SIGINT', onSignal)
process.once('SIGTERM', onSignal)
function onSignal() {
  socket.disconnect(`tcp://0.0.0.0:${port}`)
  socket.close()
}
```

```bash
$ curl -XPOST http://localhost:3000/timer -H 'Content-Type: application/json' -d '{
  "timeout":3000
, "data":"hello world!"
, "callback": {
    "transport": "zmq"
  , "method":"push"
  , "uri": "tcp://0.0.0.0:5555"
  }
}'
```

```
>>> 1 hello world !
```
npm package: @skyroc/hooks
Description: React hooks - platform-agnostic core with ./web subpath for browser hooks
Author: Ohh
Latest version: 0.2.0

# @skyroc/hooks

与业务无关的通用 React Hooks 集合。通过 subpath exports 区分平台无关 hooks 和浏览器特定 hooks。

## 架构

```js
@skyroc/hooks
├── "."      → 平台无关 hooks（React Native 安全）
└── "./web"  → 浏览器 hooks + re-export 全部平台无关 hooks
```

### 分层设计

包内部按平台特性分为两层：

- **主出口（`.`）**：只包含不依赖 DOM / 浏览器 API 的 hooks。可以安全用于 React Native 等非浏览器环境。允许依赖 ahooks 中平台无关的部分（如 `useBoolean`、`useCountDown`）。
- **Web 出口（`./web`）**：包含依赖 `window`、`document`、`navigator` 等浏览器 API 的 hooks。自动 re-export 主出口全部内容，Web 端消费者只需关注这一个入口。

### 位置语义

本包位于 `packages/hooks/`（`packages/*` 中间层），而非 `packages/@core/` 或 `packages/web/`：

- 不放 `@core`：因为依赖了 ahooks 等第三方库，`@core` 要求零外部依赖
- 不放 `web`：因为主出口的 hooks 与浏览器无关，放在 `web` 语义不准确

### 与 ahooks 的关系

- ahooks 是本包的 **dependency**，作为内部实现细节使用
- **不 re-export** ahooks 的任何内容。消费者如需直接使用 ahooks（如 `useSize`、`useKeyPress`），应在自己的包中安装 ahooks 并直接 import

## 使用

```ts
// Web 应用 — 从 ./web 导入，拿到全部 hooks
import { useArray, useCopy, useLoading } from '@skyroc/hooks/web';

// React Native — 从主出口导入，只有平台安全的 hooks
import { useArray, useLoading } from '@skyroc/hooks';
```

## 新增 Hook 规则

### 判断放在哪里

| 条件 | 放入 |
|------|------|
| 不依赖 DOM / 浏览器 API | `src/` → 从 `.` 导出 |
| 依赖 `window`、`document`、`navigator`、`matchMedia` 等 | `src/web/` → 从 `./web` 导出 |
| 依赖业务逻辑、i18n、特定 feature、特定 UI 库组件 | **不放本包**，留在 app 层 |

### 判断依据

关注的是 hook 运行时是否需要浏览器环境，而非它依赖的库是否"web 向"。例如 ahooks 的 `useBoolean` 虽然来自一个 Web 向的库，但它本身不调用任何浏览器 API，所以封装它的 hook 放在主出口。

### 编码规范

遵循项目 `CLAUDE.md` 中定义的 React 编码规则，关键点：

- **禁止 `useCallback`**：内部函数使用 function 声明
- **`useMemo` 仅限两种场景**：派生值、确实昂贵的计算
- 所有 hook 使用 **function 声明**导出（非箭头函数，hooks 不是组件）
- 内部辅助函数使用 **function 声明**，不用箭头函数
- 文件必须包含**显式 import**，不依赖 auto-import（子包没有 auto-import 配置）

### 导出清单维护

新增 hook 后需要更新对应的 barrel export：

- 平台无关 hook → 更新 `src/index.ts`
- 浏览器 hook → 更新 `src/web/index.ts`（主出口会被 web 出口自动 re-export，不需要两边都加）
npm package: @skyroom/mongo-query
Description: This package contains some tools to make querying with pagination easier using MongoDB with [Mongoose](https://mongoosejs.com/) and [Nest.js](https://nestjs.com/).
Author: rostamiani
Latest version: 1.1.2

## Description

This package contains some tools to make querying with pagination easier using MongoDB with [Mongoose](https://mongoosejs.com/) and [Nest.js](https://nestjs.com/).

## Decorators

- **MongoQuery**: This Param Decorator accepts some parameters for a Get request such as search fields, sorting and pagination. These are it's parameters:

  - **filterProps**: The list of properties that should be searchable and filterable
  - **searchProps**: The props for partial search

* **ApiMongoQuery**: This decorator adds definitions to the [Swagger](https://docs.nestjs.com/recipes/swagger) documentation

##‌ Example:

```ts
@ApiMongoQuery({ filterProps: ['dateCreated', 'name'] })
@Get()
getChannels(
  @MongoQuery({
    filterProps: ['dateCreated', 'name'],
    searchProps: ['search'],
  })
  mongoQuery: IMongoQuery,
) {
  return this._channelService.handleGetChannels(user.id, mongoQuery);
}
```
npm package: @skyrpex/body-overflow
Description: Toggle body overflow keeping scrollbar's width in mind
Author: cristian@pallares.io
Latest version: 2.0.0

# Body Overflow

Toggle body overflow keeping scrollbar's width in mind.

Will use inline styles to set the body element overflow to hidden, and will also compute the scrollbar's width (which will be added as right padding).

## Installation

`npm install @skyrpex/body-overflow`

## Usage

### Straight forward

```js
import hideBodyOverflow from '@skyrpex/body-overflow';

// First, wait for the body to be available...

// Hide body overflow.
hideBodyOverflow(true);

// Restore body overflow.
hideBodyOverflow(false);
```

### Multiple consumers

This package is intended to be used by multiple sources that want to ensure that there is no body overflow. Let me show an example:

*Boths packages are run at the same time.*

```js
// package1.js
import { generate as generateBodyOverflowService } from '@skyrpex/body-overflow';

// This acts as the previous examples' method.
const hideBodyOverflow = generateBodyOverflowService();

// Hide body overflow.
hideBodyOverflow(true);

// Restore body overflow in 2 seconds.
setTimeout(() => hideBodyOverflow(false), 2 * 1000);
```

```js
// package2.js
import { generate as generateBodyOverflowService } from '@skyrpex/body-overflow';

// This acts as the previous examples' method.
const hideBodyOverflow = generateBodyOverflowService();

// Hide body overflow.
hideBodyOverflow(true);

// Restore body overflow in 10 seconds.
setTimeout(() => hideBodyOverflow(false), 10 * 1000);
```

Both packages want to remove body overflow during different time lapses. @skyrpex/body-overflow will keep hiding body overflow's until no one needs it to be hidden (this also counts for the default exported method).
npm package: @skyrpex/eslint-config-base
Description: ESLint Shareable Config for JavaScript
Author: Cristian Pallarés
Latest version: 2.0.0-dev.2

# @skyrpex/eslint-config-base

> ESLint Shareable Config for JavaScript

## Installation

```bash
npm install @skyrpex/eslint-config-base -D
```

## Usage

Add this to your `.eslintrc` file:

```json
{
    "extends": ["@skyrpex/base"]
}
```
npm package: @skyrpex/eslint-config-flow
Description: ESLint Shareable Config for Flow
Author: Cristian Pallarés
Latest version: 1.0.0-3

# @skyrpex/eslint-config-flow

> ESLint Shareable Config for Flow

## Installation

```bash
npm install @skyrpex/eslint-config-flow -D
```

## Usage

Add this to your `.eslintrc` file:

```json
{
    "extends": ["@skyrpex/flow"]
}
```
npm package: @skyrpex/eslint-config-jest
Description: ESLint Shareable Config for Jest
Author: Cristian Pallarés
Latest version: 2.0.0-dev.2

# @skyrpex/eslint-config-jest

> ESLint Shareable Config for Jest

## Installation

```bash
npm install @skyrpex/eslint-config-jest -D
```

## Usage

Add this to your `.eslintrc` file:

```json
{
    "extends": ["@skyrpex/jest"]
}
```
npm package: @skyrpex/eslint-config-typescript
Description: ESLint Shareable Config for TypeScript
Author: Cristian Pallarés
Latest version: 1.0.0-3

# @skyrpex/eslint-config-typescript

> ESLint Shareable Config for TypeScript

## Installation

```bash
npm install @skyrpex/eslint-config-typescript -D
```

## Usage

Add this to your `.eslintrc` file:

```json
{
    "extends": ["@skyrpex/typescript"]
}
```
npm package: @skyrpex/eslint-config-vue
Description: ESLint Shareable Config for Vue
Author: Cristian Pallarés
Latest version: 2.0.0-dev.2

# @skyrpex/eslint-config-vue

> ESLint Shareable Config for Vue

## Installation

```bash
npm install @skyrpex/eslint-config-vue -D
```

## Usage

Add this to your `.eslintrc` file:

```json
{
    "extends": ["@skyrpex/vue"]
}
```
npm package: @skyrpex/makes-uuids
Description: Mixin for Vue that generates UUIDs
Author: cristian@pallares.io
Latest version: 1.0.0

# Makes UUIDs

[![TravisCI Build status](https://travis-ci.org/skyrpex/makes-uuids.svg?branch=master)](https://travis-ci.org/skyrpex/makes-uuids)

> Works with:
>
> <a href="https://github.com/vuejs/vue"><img src="https://img.shields.io/badge/vue-%5E2.0-green.svg" alt="Vue 2"></a>

Mixin for Vue that generates UUIDs. Each user ID has a unique UUID assigned to it.

## Installation

`npm install @skyrpex/makes-uuids`

## Usage

```html
<template>
  <form>
    <div class="form-group">
      <label :for="uuid('name')">Name</label>
      <input type="text" class="form-control" :id="uuid('name')" placeholder="Name">
    </div>
    <div class="form-group">
      <label :for="uuid('email')">Email</label>
      <input type="email" class="form-control" :id="uuid('email')" placeholder="Email">
    </div>
  </form>
</template>

<script>
import makesUuids from '@skyrpex/makes-uuids';

export default {
  mixins: [
    // The default method name is 'uuid'.
    makesUuids({ methodName: 'uuid' }),
  ],
};
</script>
```
npm package: @skyrpex/manifest-webpack-plugin
Description: Creates an asset manifest
Author: cristian@pallares.io
Latest version: 3.1.0

# Manifest Webpack plugin

## Installation

`npm install @skyrpex/manifest-webpack-plugin`

## Usage

```js
// webpack.config.js
import ManifestPlugin from '@skyrpex/manifest-webpack-plugin';

export default {
  // ...
  plugins: [
    new ManifestPlugin('path/to/manifest.json'),
  ],
};
```
npm package: @skyrpex/modernizr-loader
Description: Dynamically build Modernizr
Author: cristian@pallares.io
Latest version: 1.0.0

# Modernizr Webpack loader

## Installation

`npm install @skyrpex/modernizr-loader`

## Usage

This is just an example of usage. You can tweak it to suit your needs.

```js
// path/to/.modernizrrc.js
module.exports = {
  minify: false,
  options: [
    'hasEvent',
    'setClasses',
  ],
  'feature-detects': [
    'test/audio',
    'test/audio/preload',
    'test/history',
    'test/video',
    'test/video/autoplay',
    'test/video/preload',
  ],
};
```

```js
// webpack.config.js
const modernizrPath = path.resolve('path/to/.modernizrrc.js');

export default {
  // ...
  module: {
    loaders: [
      {
        test: modernizrPath,
        loader: '@skyrpex/modernizr',
      },
    ],
  },
  resolve: {
    alias: {
      modernizr: modernizrPath,
    },
  },
};
```
npm package: @skyrpex/now
Description: Vue mixin that generates a reactive time variable
Author: cristian@pallares.io
Latest version: 1.1.0

# Now

[![CircleCI](https://circleci.com/gh/skyrpex/now.svg?style=svg)](https://circleci.com/gh/skyrpex/now) [![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/jkmt6ka0i7ry5o9x?svg=true)](https://ci.appveyor.com/project/skyrpex/now) [![TravisCI Build status](https://travis-ci.org/skyrpex/now.svg?branch=master)](https://travis-ci.org/skyrpex/now)

> Works with:
>
> <a href="https://github.com/vuejs/vue"><img src="https://img.shields.io/badge/vue-%5E2.0-green.svg" alt="Vue 2"></a> <a href="https://github.com/vuejs/vue"><img src="https://img.shields.io/badge/vue-%5E1.0-green.svg" alt="Vue 1"></a>

This mixin will create a computed property with a Moment.js instance. The computed property will be updated at a given interval to stay up to date.

## Installation

`npm install @skyrpex/now`

## Usage

### Minimal setup

```html
<template>
  <div>
    <!-- Print the current time, and update each second. -->
    <p>{{ now }}</p>
  </div>
</template>

<script>
import now from '@skyrpex/now';

export default {
  mixins: [
    // Will inject a 'now' computed property
    now({ /* options... */ }),
  ],
};
</script>
```

### Another use case

```html
<template>
  <div>
    <!-- You can use any Moment.js method -->
    <p>{{ now.from(createdAt) }}</p>
  </div>
</template>

<script>
import moment from 'moment';
import now from '@skyrpex/now';

export default {
  mixins: [now()],
  data: () => ({
    createdAt: moment([2007, 0, 28]),
  }),
};
</script>
```

## Options

```js
import now from '@skyrpex/now';

now({
  name: 'now', // Name of the computed property
  interval: 1000, // Update interval
});
```
npm package: @skyrpex/props-to-local
Description: Vue mixin that maps props to local data
Author: cristian@pallares.io
Latest version: 1.2.0

# Props To Local

> Works with:
>
> <a href="https://github.com/vuejs/vue"><img src="https://img.shields.io/badge/vue-%5E2.0-green.svg" alt="Vue 2"></a>

This mixin will sync down properties to local data. This allows defining a property that can be changed within the component (using v-model, for example).

A case of use is creating a checkbox component that that can be correctly toggled without passing down a value through a prop.

## Installation

`npm install @skyrpex/props-to-local`

## Usage

```html
<template>
  <input type="checkbox" v-model="local.value" @change="$emit('input', $event.target.checked)">
</template>

<script>
import propsToLocal '@skyrpex/props-to-local';

// In this example, a 'value' prop is given to propsToLocal.
export default {
  mixins: [
    propsToLocal({
      // Normal props here
      value: {
        type: Boolean,
        default: false,
      },
    }),
  ],
};
</script>
```

The above example will generate the following component:

```js
export default {
  props: {
    value: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      local: {
        // Will default to false, as stated above.
        value: this.value,
      },
    };
  },
};
```

## Options

```html
<script>
import { identity } from 'lodash';
import propsToLocal '@skyrpex/props-to-local';

export default {
  mixins: [
    propsToLocal({
      value: {
        type: Boolean,
        default: false,
        // Watch prop changes deeply (defaults to false).
        deep: false,
        // Format props before overwriting local values (defaults to Lodash.Identity).
        format: identity,
      },
    }),
  ],
};
</script>
```