open-index/open-npm huggingface dataset:
npm package: @isat07/reactivestate
Description: reactive dom
Author: Balaji
Latest version: 0.0.3

<<<<<<< HEAD


## Description
reactive data changes

### Install from npm

```
npm install reativestate --save
```

### use rstate.min.js
```
<script src="rstate.min.js"></script>
```

### Currently Added Features 
```
import {rstate} from 'reativestate'
```
[documentation](https://ibalaji777.github.io/reativestate/)


### add attribute to angalware="yourstore"
```
       <input type="text" angalware="paper_padding_top"  id="paper_padding_top" placeholder="padding top">  
   

```

### javascript
```
rstate((d)=>{
console.log(d)
});



```








## Bug fixes

None


### We are Not Responsible for if any damage causes(dont Download without knowledge)
### Still in Developement Mode (confirm the library worth before you use)
## Licensing

- License Agreement: MIT
- Author :Balaji





=======
# reactivestate
>>>>>>> d4daf84c34bb938f4800259dc24de182df524067
npm package: @isatech/express-sequelize-query-filter
Description: Express middleware for parsing request query filter to sequelize format (options).
Author: Naísses Z Lima
Latest version: 0.0.3

# Express Sequelize Query Filter

Express middleware for parsing request query filter to sequelize format (options).  

## Install

With NPM:

npm install @isatech/express-sequelize-query-filter


## Usage

The middleware adds an object to express request named filter, that can be used by sequelize to filter a query, i.e., the 
options in sequelize's query.

The query filter in URL must be a serialized JSON of sequelize filter (option).

Example:

Consider a model Product in sequelize. An endpoint to fecth all the products should look like:

app.get('/products', async (req, res) => {
  return db.Product.findAll();
});

Using the filter, the endpoint should be writter as:

const sqFilter = require('@isatech/express-sequelize-query-filter');

app.get('/products', sqFilter(), async (req, res) => {
  return db.Product.findAll(req.filter);
});

### Available Options

<table>
    <tr>
        <th>Option</th>
        <th>Acceptable Values</th>
        <th>Details</th>
    </tr>
    <tr>
        <td>alwaysCreate</td>
        <td>
            <ul>
                <li>true (default)</li>
                <li>false</li>
            <ul>
        </td>
        <td>
            Creates filter in request object whether there is or not filters in the request url. Where true, if there is no filters in the request url, then the created filter is an empty object ({}). When false, if there is no filters in the request url, then no filter object is created.
        </td>
    </tr>
</table>

## Auhtor

Naísses Zóia Lima

## License

MIT
npm package: @isatech/ng2-smart-table-server-data-source
Description: Server data source for Ng2 Smart Table.
Author: Naísses Z Lima
Latest version: 0.0.2

# Ng2 Smart Table Server Data Source

Server data source for Ng2 Smart Table.  

## Install

With NPM:

npm install @isatech/ng2-smart-table-server-data-source

## Auhtor

Naísses Zóia Lima

## License

MIT
npm package: @isathya/react-native-firebase-analytics-bridge
Description: React Native component for Firebase Analytics for IOS and Android
Author: Sathya
Latest version: 0.0.2

[![Gitter](https://badges.gitter.im/evollu/react-native-firebase-analytics.svg)](https://gitter.im/evollu/react-native-firebase-analytics?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

# DEPRECATED
**This repo is no longer maintained. Please refer to [react-native-firebase](https://github.com/invertase/react-native-firebase) as replacement.**

## Version table
| version | RN        | FCM     |
| ------- |:----------|:-------:|
| 2.0.0   | >= 0.40.0 | >=9.6    |
| 1.0.6   | <0.40.0   | >=9.6    |

## Installation

- Run `npm install react-native-firebase-analytics --save`
- Run `rnpm link`

or you can combine them into
- Run `rnpm install react-native-firebase-analytics`

## Android Configuration

- In `android/build.gradle`
```gradle
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
classpath 'com.google.gms:google-services:3.0.0' // <- Add this line
```

- In `android/app/build.gradle`
```gradle
apply plugin: "com.android.application"
apply plugin: 'com.google.gms.google-services' // <- Add this line
...
```


### IOS Configuration

install pod 'Firebase/Core'

in AppDelegate.m add
```diff
+@import Firebase;

...

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
+ [FIRApp configure];
}

}

```


### FCM config file
In [firebase console](https://console.firebase.google.com/), you can get `google-services.json` file and place it in `android/app` directory and get `googleServices-info.plist` file and place it in `/ios` directory

### Usage

```javascript

var Analytics = require('react-native-firebase-analytics');

componentWillMount() {
  if (environment === 'staging') {
    Analytics.setEnabled(false);
  }
  
  
  Analytics.setUserId('11111');
  Analytics.setUserProperty('propertyName', 'propertyValue');

  Analytics.logEvent('view_item', {
    'item_id': 'login'
  });
   
}
```

For more info regarding predefind event and params, visit [firebase api](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event#constant-summary)

### Got Issues?
Issues and pull requests are welcomed!
npm package: @isauadh/loggingtool
Description: A simple logging tool with debug, info, and error level with built-in hierarchy
Author: qwerty-sayas
Latest version: 1.1.0

# loggingtool
A simple logging tool with hierarchies built-in.

### log level
- DEBUG: includes (DEBUG, INFO, ERROR)
- INFO: includes (INFO, ERROR)
- ERROR: includes (ERROR)

## Installation

```sh
$ npm install @isauadh/loggingtool
```


## Documentation

### Start logging

Usage:

```js
var LoggingTool = require('@isauadh/loggingtool');
var logger = new LoggingTool.LogLevel(`DEBUG`, `MyFunction`);
logger.debug(`This is a debug message.`);
// console.log [2021-02-07T18:31:46.358Z]  [DEBUG] [MyFunction]    This is a debug message.
```

#### Features
- Easy to use with no dependencies
- By default, Timestamp, LogLevel, & FunctionName are logged.
- Turn Timestamp, LogLevel, & FunctionName logging on/off as follows:
```js
logger.displayTheTimestamp(false);
logger.displayTheLogLevel(false);
logger.displayTheFuncName(false);
```

## License
See the [LICENSE](./LICENSE) file.
npm package: @isavir/restaurant-discovery-mcp
Description: MCP server for restaurant discovery using Google Places API (New). Works with Claude Desktop, Cursor, AWS Strands, and any MCP-compatible agent.
Latest version: 1.0.0

# Restaurant Discovery MCP Server

A Model Context Protocol (MCP) server for restaurant discovery using Google Places API (New). Works with Claude Desktop, Cursor, AWS Strands, and any MCP-compatible client.

## Tools

| Tool | Description |
|------|-------------|
| `search_restaurants` | Discover restaurants by free-text query with optional filters (open now, rating, price level) |
| `get_restaurant_details` | Get full details (phone, website, opening hours) for a restaurant by Place ID |

## Prerequisites

- Node.js >= 20
- Google Places API key with [Places API (New)](https://console.cloud.google.com/apis/library/places-backend.googleapis.com) enabled

## Usage

### Claude Desktop / Cursor (npx — recommended)

No install needed. Add to your `mcp.json`:

```json
{
  "mcpServers": {
    "restaurant-discovery": {
      "command": "npx",
      "args": ["-y", "restaurant-discovery-mcp"],
      "env": {
        "GOOGLE_PLACES_API_KEY": "your_key_here"
      }
    }
  }
}
```

### Local install (alternative)

```bash
npm install -g restaurant-discovery-mcp
```

Then use `"command": "restaurant-discovery-mcp"` in your `mcp.json`.

### Docker / Remote Agents (HTTP)

```bash
docker build -t restaurant-discovery-mcp .
docker run -p 3000:3000 -e GOOGLE_PLACES_API_KEY=your_key_here restaurant-discovery-mcp
```

Connect your agent to `http://localhost:3000/mcp`.

## Configuration

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `GOOGLE_PLACES_API_KEY` | Yes | — | Google Places API key |
| `TRANSPORT` | No | `stdio` | `stdio` for local clients, `http` for Docker/remote |
| `PORT` | No | `3000` | HTTP server port (HTTP mode only) |
| `DEFAULT_LANGUAGE` | No | `en` | Language for API responses |

## License

MIT
npm package: @isaxn/bailyes
Description: WhatsApp Bot Framework built on Baileys
Author: isan
Latest version: 1.0.0

# @isan/bailyes

🚀 **Modern WhatsApp Bot Framework** built on top of  
[`@whiskeysockets/baileys`](https://github.com/WhiskeySockets/Baileys)

`@isan/bailyes` menyediakan **engine WhatsApp bot yang ringan, stabil, dan mudah dipakai**, cocok untuk:
- Bot pribadi
- Bot grup
- Framework bot lanjutan
- Project npm / open-source

---

## ✨ Features

- ✅ Built on **Baileys (Multi-Device)**
- 🔐 **QR Login only** (aman & stabil)
- ⚡ Fast & lightweight
- 🧩 Easy to integrate into any bot
- 📦 Ready for **ESM & CommonJS**
- 🔁 Auto reconnect
- 🧠 Clean & minimal API
- 🚫 No forced pairing / aggressive login

---

support in my channel:
https://whatsapp.com/channel/0029Vb7M8VA05MUkehrqcl3J

## 📦 Installation

```bash
npm install @isan/bailyes
npm package: @isayahc/isayah-first-package
Description: To install dependencies:
Latest version: 1.0.0

# isayah-first-package

To install dependencies:

```bash
bun install
```

To run:

```bash
bun run index.ts
```

This project was created using `bun init` in bun v1.3.6. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
npm package: @isayme/bark
Description: Node SDK for Bark (https://bark.day.app/)
Author: isayme
Latest version: 0.3.0

Node SDK for Bark (https://bark.day.app/)

# 特性

- 支持 Basic Auth；
- 支持加密推送；
- 自动重试, 默认 10 次；

# 快速使用

## 安装

```
npm install '@isayme/bark'
或
pnpm add '@isayme/bark'
```

## 引用模块

```
// CommonJS
const { Client } = require('@isayme/bark')

// ESM & Typescript
import { Client } from '@isayme/bark'
```

## 样例

```
let deviceKey = '你的 device key'

let client = new Client({
  deviceKey,
})

async function main() {
  await client.push('这是测试内容')
  await client.push('这是测试标题', '这是测试内容')
  await client.push({
    title: '这是测试标题',
    body: '这是测试内容',
  })
}

main()
```

# 相关文档

- [Bark 官方文档](https://bark.day.app/)
npm package: @isayme/dingtalk-robot
Description: - 支持 secret 签名 - 支持 text/markdown/link/actionCard/feedCard 5 种消息类型
Author: isayme
Latest version: 0.2.2

# 支持的特性

- 支持 secret 签名
- 支持 text/markdown/link/actionCard/feedCard 5 种消息类型

# 快速使用

## 安装

```
npm install '@isayme/dingtalk-robot'
或
pnpm add '@isayme/dingtalk-robot'
```

## 引用模块

```
// CommonJS
const { Robot } = require('@isayme/dingtalk-robot')

// ESM & Typescript
import { Robot } from '@isayme/dingtalk-robot'
```

## 样例

```
let accessToken = '你的webhook accessToken'

let dingtalkRobot = new Robot({
  accessToken,
})

async function main() {
  await dingtalkRobot.text('这个是测试消息')
}

main()
```

# 相关钉钉文档

[接口签名](https://open.dingtalk.com/document/robots/customize-robot-security-settings)

[消息类型及数据格式](https://open.dingtalk.com/document/isvapp/custom-bot-access-send-message)
npm package: @isayme/eslint-config
Description: ESLint 支持 [共享配置](https://eslint.org/docs/developer-guide/shareable-configs)
Author: iSayme
Latest version: 0.3.2

# @isayme/eslint-config

ESLint 支持 [共享配置](https://eslint.org/docs/developer-guide/shareable-configs)

# 如何使用

## Javascript

安装依赖:

```
npm i --save-dev eslint \
  prettier \
  eslint-plugin-import \
  eslint-config-prettier
```

安装 `npm i --save-dev @isayme/eslint-config`

```
// 你的 .eslintrc
{
  "root": true,
  "extends": "@isayme/eslint-config/javascript"
}
```

## Typescript

安装依赖:

```
npm i --save-dev eslint \
  typescript \
  prettier \
  eslint-plugin-import \
  eslint-config-prettier \
  @typescript-eslint/parser \
  @typescript-eslint/eslint-plugin
```

安装 `npm i --save-dev @isayme/eslint-config`

```
// 你的 .eslintrc
{
  "root": true,
  "extends": "@isayme"
}
```
npm package: @isayme/mongodb-query-builder
Description: A mongodb query builder
Author: iSayme
Latest version: 0.1.3

# mongodb-query-builder

[![Coverage Status](https://coveralls.io/repos/github/isayme/mongodb-query-builder/badge.svg?branch=master)](https://coveralls.io/github/isayme/mongodb-query-builder?branch=master)
[![Build Status](https://travis-ci.org/isayme/mongodb-query-builder.svg?branch=master)](https://travis-ci.org/isayme/mongodb-query-builder)

A mongodb query builder in Javascript
npm package: @isayme/prettier-config
Description: my share prettier configuration
Author: iSayme
Latest version: 0.1.1

# @isayme/prettier-config

[Prettier](https://prettier.io) 支持 [共享配置](https://prettier.io/docs/en/configuration.html#sharing-configurations).

使用方只需要升级版本即可更新至最新的配置模式, 避免配置变更时, 使用方需要复制新的配置项.

## 如何使用

安装此包: `npm install --save-dev @isayme/prettier-config`

### 方法一

`package.json` 文件中增加属性: `"prettier": "@isayme/prettier-config"`

```
// 示例 package.json
{
  "name": "your node ",
  "version": "v0.0.1",
  "prettier": "@isayme/prettier-config"
}
```

### 方法二(推荐)

在 Prettier 的配置文件中直接填`"@isayme/prettier-config"`, 注意其中使用的是双引号.
npm package: @isbdnt/google-translate-token
Description: A package that generates the necessary token to use the Google Translate API for free
Author: Matheus Fernandes
Latest version: 1.0.0

# google-translate-token [![Build Status](https://travis-ci.org/matheuss/google-translate-token.svg?branch=master)](https://travis-ci.org/matheuss/google-translate-token) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![Known Vulnerabilities](https://snyk.io/package/npm/google-translate-token/badge.svg)](https://snyk.io/package/npm/google-translate-token)

A package that generates the necessary token to use the [**Google Translate API for free** :dollar::no_entry_sign:](https://github.com/matheuss/google-translate-api)

## Why

[translate.google.com](https://translate.google.com) uses a token to authorize the requests. If you are not Google, you do not have this token and will have to [pay $20 per 1 million characters of text](https://cloud.google.com/translate/v2/pricing).

This package is the [result](https://github.com/matheuss/google-translate-token/blob/master/index.js#L12-110) of reverse engineering on the [obfuscated and minified code](https://translate.google.com/translate/releases/twsfe_w_20160620_RC00/r/js/desktop_module_main.js) used by Google to generate such token.

## How it works

The token is based on a seed which is updated once per hour and on the text that will be translated. Both are combined – by some strange math – in order to generate a final token (e.g. `820594.703830`) which is used by the API to validade the request. 


## Install

```
npm install --save google-translate-token
```

## Usage

``` js
const token = require('google-translate-token');

token.get('Hello').then(console.log);
//=> { name: 'tk', value: '159402.284291' }
```

## Related

- [`google-translate-api`](https://github.com/matheuss/google-translate-api) – A **free** and **unlimited** API for Google Translate :dollar::no_entry_sign:
npm package: @isbl/cross-glob
Description: utility for using globs in scripts in cross-platform manner
Author: Isabella Skořepová
Latest version: 1.0.1

# @isbl/cross-glob

Utility for writing npm scripts which use glob and work cross-platform

Install:

```sh
yarn add -D @isbl/cross-glob
```

Then prefix your script with cross-glob

```json
replace
"build": "tsc packages/**/*.json"
with
"build": "cross-glob tsc -b \"packages/**/*.json\""
```

the quotes are required to avoid expansion by your shell. It could work but
could also break with various shells.
npm package: @isbl/docker-start
Description: Simplifies starting of apps inside docker container
Author: Isabella Skořepová
Latest version: 0.12.0

# @isbl/docker-start

[![MIT License](https://img.shields.io/npm/l/@isbl/docker-start?style=flat)](https://github.com/CodeWitchBella/isbl-docker-start/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@isbl/docker-start?style=flat)](https://www.npmjs.com/package/@isbl/docker-start)
[![dependencies](https://img.shields.io/librariesio/release/npm/@isbl/docker-start?style=flat)](https://github.com/CodeWitchBella/isbl-docker-start/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-docker-start?style=flat)
[![Releases](https://img.shields.io/github/release-date/CodeWitchBella/isbl-docker-start?style=flat)](https://github.com/CodeWitchBella/isbl-docker-start/releases)

Simplifies running project with multiple dockerized parts.
npm package: @isbl/fs
Description: Wrappers around node:fs with proper error stack support
Author: Isabella Skořepová
Latest version: 0.5.0

# @isbl/fs

[![MIT License](https://img.shields.io/npm/l/@isbl/fs?style=flat)](https://github.com/CodeWitchBella/isbl-fs/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@isbl/fs?style=flat)](https://www.npmjs.com/package/@isbl/fs)
[![dependencies](https://img.shields.io/librariesio/release/npm/@isbl/fs?style=flat)](https://github.com/CodeWitchBella/isbl-fs/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-fs?style=flat)
[![Releases](https://img.shields.io/github/release-date/CodeWitchBella/isbl-fs?style=flat)](https://github.com/CodeWitchBella/isbl-fs/releases)

Wraps `node:fs/promises` and sync functions from `node:fs` to add proper async
error stack.

Install

```sh
yarn add @isbl/fs
```

If you are using typescript then you should also install type definitions

```sh
yarn add -D @types/node
```

## Usage

Same as original wrapped functions, also includes typescript definitions.
Note that this module is ESM-only so it can't be imported using `require`.

```ts
import fs from '@isbl/fs'
await fs.readFile(...)

// or

import { readFile } from '@isbl/fs'
await readFile(...)
```

To use `*Sync` functions import them from `@isbl/fs/sync`

```ts
import fs from '@isbl/fs/sync'
fs.readFileSync(...)

// or

import { readFileSync } from '@isbl/fs/sync'
readFileSync(...)
```

## Available functions

See start of `index.js` and `sync.js` files. They list all the exports.
npm package: @isbl/loaders
Description: Query and update database in sane way with typescript checking
Author: Isabella Skořepová
Latest version: 0.11.1

# @isbl/loaders

[![MIT License](https://img.shields.io/npm/l/@isbl/loaders?style=flat)](https://github.com/CodeWitchBella/isbl-loaders/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@isbl/loaders?style=flat)](https://www.npmjs.com/package/@isbl/loaders)
[![dependencies](https://img.shields.io/librariesio/release/npm/@isbl/loaders?style=flat)](https://github.com/CodeWitchBella/isbl-loaders/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-loaders?style=flat)
[![Releases](https://img.shields.io/github/release-date/CodeWitchBella/isbl-loaders?style=flat)](https://github.com/CodeWitchBella/isbl-loaders/releases)

Query and update database in sane way with typescript checking
npm package: @isbl/migrate
Description: Run postgres migrations
Author: Isabella Skořepová
Latest version: 0.6.0

# @isbl/migrate

[![](https://img.shields.io/npm/l/@isbl/migrate?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-migrate/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@isbl/migrate?style=for-the-badge)](https://www.npmjs.com/package/@isbl/migrate)
[![](https://img.shields.io/david/CodeWitchBella/isbl-migrate?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-migrate/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-migrate?style=for-the-badge)
[![](https://img.shields.io/github/release-date/CodeWitchBella/isbl-migrate?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-migrate/releases)

Utilities for implementing postgresql migrations in typescript.
npm package: @isbl/postgres-schema
Description: Get postgres database structure in JSON
Author: Isabella Skořepová
Latest version: 0.3.1

# @isbl/postgres-schema

[![MIT License](https://img.shields.io/npm/l/@isbl/postgres-schema?style=flat)](https://github.com/CodeWitchBella/isbl-postgres-schema/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@isbl/postgres-schema?style=flat)](https://www.npmjs.com/package/@isbl/postgres-schema)
[![dependencies](https://img.shields.io/librariesio/release/npm/@isbl/postgres-schema?style=flat)](https://github.com/CodeWitchBella/isbl-postgres-schema/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-postgres-schema?style=flat)
[![Releases](https://img.shields.io/github/release-date/CodeWitchBella/isbl-postgres-schema?style=flat)](https://github.com/CodeWitchBella/isbl-postgres-schema/releases)

Get postgres database structure in JSON
npm package: @isbl/settings
Description: Load settings from files, options and env with checking
Author: Isabella Skořepová
Latest version: 0.5.0

# @isbl/settings

[![](https://img.shields.io/npm/l/@isbl/settings?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-settings/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@isbl/settings?style=for-the-badge)](https://www.npmjs.com/package/@isbl/settings)
[![](https://img.shields.io/david/CodeWitchBella/isbl-settings?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-settings/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-settings?style=for-the-badge)
[![](https://img.shields.io/github/release-date/CodeWitchBella/isbl-settings?style=for-the-badge)](https://github.com/CodeWitchBella/isbl-settings/releases)

Load settings from files, options and env with type checking and automatic
typescript types.
npm package: @isbl/timelapse
Description: Octoprint timelapse
Author: Isabella Skořepová
Latest version: 0.1.2

# @isbl/timelapse

Render octolapse zip files into mp4.

## How to use

`npx @isbl/timelapse octolapse.zip`

Replace `octolapse.zip` with your filename.

## Dependencies

`ffmpeg` and `unzip` on your path. You also need [nodejs](https://nodejs.org/)
and npm (usually installed with node). I also only tested this on linux, so no
idea if it works on windows/macos.
npm package: @isbl/ts-utils
Description: Useful typescript helpers
Author: Isabella Skořepová
Latest version: 1.0.1

# @isbl/ts-utils

[![MIT License](https://img.shields.io/npm/l/@isbl/ts-utils?style=flat)](https://github.com/CodeWitchBella/isbl-ts-utils/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@isbl/ts-utils?style=flat)](https://www.npmjs.com/package/@isbl/ts-utils)
[![dependencies](https://img.shields.io/librariesio/release/npm/@isbl/ts-utils?style=flat)](https://github.com/CodeWitchBella/isbl-ts-utils/blob/main/package.json)
![](https://img.shields.io/github/last-commit/CodeWitchBella/isbl-ts-utils?style=flat)
[![Releases](https://img.shields.io/github/release-date/CodeWitchBella/isbl-ts-utils?style=flat)](https://github.com/CodeWitchBella/isbl-ts-utils/releases)

Few utils for working in typescript which I found myself writing over and over
again.

## notNull

Equivalent to `a => a !== null`, but also works as type assertion. Usage example:

```ts
function removeTwos(input: number[]) {
  return input.map(item => item === 2 ? null : item).filter(notNull)
}
```

Return type of this function is `number[]`, not `(number | null)[]` as it would
be otherwise.

## ArrayElement

Generic type which given array type returns its element. More readable
alternative to `ArrayType[0]`, except that it also checks if incoming type is an
array. Works for readonly arrays.

```ts
type Thing = ArrayElement<string[]> // thing is string
```