open-index/open-npm huggingface dataset:
npm package: @mohsin-mi/iconpicker
Description: Note: This IconPicker uses Font Awesome 6.6.0.
Author: Mohsin Sunasara
Latest version: 1.0.47

# Usage Example.

Note: This IconPicker uses Font Awesome 6.6.0.

Install `IconPicker` package

```bash
npm i @mohsin-mi/iconpicker
```

Import `IconPicker` and `IconPicker.css`

```bash
import IconPicker from "@mohsin-mi/iconpicker";
import '@mohsin-mi/iconpicker/lib/iconpicker.css';
```

Use the `IconPicker` component, and pass fontawesome `icons` as an object with whatever the category names you want.

```jsx
    const icons = {
        Brands: [
            'fa-brands fa-500px',
            'fa-brands fa-amazon',
        ],
        Currency: [
        'fa-cny',
        'fa-dollar-sign',
        ],
    };
```    
Alternatively, you can import some pre-defined Icons from the package. 

```jsx
    
    import icons from '@mohsin-mi/iconpicker/lib/icons.js';

    <IconPicker
    icons={icons}
    value={`fa-brands fa-amazon`}
    onChange={(e) => onChange(e, "icon")}
    closeOnSelect={true}
    showCategory={true}
    showSearch={true}
    isMulti={false}
    adjustPosition={{ top: 10, left: 0 }}
    buttonStyle={`flex items-center justify-center min-h-[35px] min-w-[35px] rounded-l-[8px] border border-none`}
    noSelectedPlaceholder={'arrow-up-from-bracket'}
    zIndexPopup={9999}
    popupStyle='bg-white border border-gray-300 shadow-lg rounded popup-container min-w-[280px]'
    gridColumns = {5}
    gridRows = {4}
    iconBgColor = {`bg-gray-200`}
    iconSelectedBgColor = {`bg-blue-200`}
    iconHeight = {65}
    iconWidth = {65}
    />
```
npm package: @mohssineaboutaj/grid-system
Description: A simple grid system with 4 screen sizes (sm, md, lg, xl) based on bootstrap media query sizes to make your design responsive with maximum media resolutions
Author: Mohssine Aboutaj
Latest version: 1.1.0

# Grid System / Developer Guide

This is a README for developers & contributers 

## Developement
To develope this project you need to use  [npm](https://npmjs.org) or [yarn](https://yarnpkg.org)

### install dependencies 
```npm install``` or ```yarn install```

### Run Dev Server ( with reload )
```npm start``` or ```yarn start```
if the browser doesn't open automaticly open this url [localhost:3000](http://localhsot:3000)

## Build
### Build css
```npm run build:css``` or ```yarn build:css```
than you can find the build files in ```/css``` 
### Build docs
```npm run build``` or ```yarn build```


## License
[MIT](https://en.wikipedia.org/wiki/MIT_LICENSE) @mohssineAboutaj
npm package: @mohssineaboutaj/utils
Description: <h1>Utils</h1>
Author: Mohssine Aboutaj
Latest version: 2.0.0

<h1>Utils</h1>

- [About](#about)
- [Features & Functions](#features--functions)
- [Documentation](#documentation)
- [Install](#install)
- [Usage](#usage)
  - [Usage of _removeDuplicates()_](#usage-of-removeDuplicates)
  - [Usage of _removeTwins()_](#usage-of-removetwins)
  - [Usage of _merge()_](#usage-of-merge)
  - [Usage of _removeFromArray()_](#usage-of-removefromarray)
  - [Usage of _toggleArrayValue()_](#usage-of-togglearrayvalue)
- [Changelog](#changelog)
- [License](#license)

## About

a project contain simple javaScript functions to do something like merge arrays, remove duplicates elements, ...

## Features & Functions

- removeDuplicates
- merge
- removeTwins
- removeFromArray
- toggleArrayValue

## Documentation

[Read the Documentation](https://mohssineaboutaj.github.io/utils/)

## Install

```sh
npm install @mohssineAboutaj/utils
```

or

```sh
yarn add @mohssineAboutaj/utils
```

## Usage

### Usage of _removeDuplicates()_

```js
const { removeDuplicates } = require("@mohssineAboutaj/utils");

let origin = [1, 2, 3, 4, 5, 6];
let removes = [1, 3, 2, 6];

let arr = removeDuplicates(origin, removes);

console.log(arr); // output is [4,5]
```

### Usage of _removeTwins()_

```js
const { removeTwins } = require("@mohssineAboutaj/utils");

let origin = [1, 2, 3, 4, 5, 6];
let removes = [1, 3, 2, 6]; // not required

let arr = removeTwins(origin, removes);

console.log(arr); // output is [4,5]
```

### Usage of _merge()_

```js
const { merge } = require("@mohssineAboutaj/utils");

let arr = merge([1, 2, 3], [4, 5, 6], "a", { b: 1 }, null, true, undefined, 20);

console.log(arr); // output is [1, 2, 3, 4, 5, 6, 'a', { b: 1 }, null, true, undefined, 20]
```

### Usage of _removeFromArray()_

```js
const { removeFromArray } = require("@mohssineAboutaj/utils");

let origin = [1, 2, 3, 4, 5, 6];
let removes = 2; // not required

let arr = removeFromArray(origin, removes);

console.log(arr); // output is [1,3,4,5,6]
```

### Usage of _toggleArrayValue()_

```js
const { toggleArrayValue } = require("@mohssineAboutaj/utils");

let origin = ["a", "b", "c"];
let value = 2; // not required

let arr = toggleArrayValue(origin, value);

console.log(arr); // output is ['a','b','c',2]
```

## Changelog

[read more about changing in changelog file](./CHANGELOG.md)

## License

MIT
npm package: @mohtasimalam/clean-title
Description: Advanced text cleaner
Author: Mohtasim Alam Sohom
Latest version: 0.1.0

# clean-title

**Advanced Text Cleaner**

The `clean-title` module provides functions to sanitize and normalize strings, specifically designed for cleaning up titles of media content. This module removes special characters, irrelevant keywords, and excess whitespace, resulting in a more user-friendly and standardized title format.

## Functions

### `removeSpecialChars(str: string): string`

Removes all special characters from the given string, allowing only letters, numbers, and whitespace.

**Parameters:**

- `str` (string): The input string from which special characters will be removed.

**Returns:**

- (string): A string containing only letters, numbers, and whitespace.

**Example:**

```javascript
const cleaned = removeSpecialChars("Hello! Welcome to #CleanTitle2024.");
console.log(cleaned); // Output: "Hello Welcome to CleanTitle2024"
```

---

### `cleanTitle(str: string): string`

Cleans and normalizes the input title by applying several transformations. It removes special characters, converts the string to lowercase, eliminates specified keywords, and trims excessive whitespace.

**Parameters:**

- `str` (string): The title string that needs to be cleaned.

**Returns:**

- (string): A cleaned version of the input title, limited to 255 characters.

**Example:**

```javascript
const title = cleanTitle("I love money Official Music Video (2024) - Topic");
console.log(title); // Output: "i love money"
```

**Transformations Performed:**

1. Calls `removeSpecialChars` to remove special characters.
2. Converts the string to lowercase.
3. Removes specific keywords related to media titles (e.g., "official", "music", "video").
4. Strips " - Topic" from the end of the title.
5. Replaces multiple spaces with a single space.
6. Trims leading and trailing whitespace.
7. Removes any content within parentheses.
8. Normalizes the string by removing diacritics (accents).
9. Limits the output length to 255 characters.

---

## Usage

To use this module, import the functions and call them with the appropriate string parameters. The `cleanTitle` function is particularly useful for processing media titles before storage or display.

```javascript
import { cleanTitle } from "@mohtasimalam/clean-title";

const rawTitle = "Money Man - 24 Official Music Video (2024) - Topic";
const sanitizedTitle = cleanTitle(rawTitle);
console.log(sanitizedTitle); // Output: "money man 24"
```
npm package: @mohuangnpc/eap5_test
Description: A Vue.js project
Author: zhaoyankai
Latest version: 1.0.4

# eap5_test

> A Vue.js project

## Build Setup

``` bash
# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build
```

For detailed explanation on how things work, consult the [docs for vue-loader](http://vuejs.github.io/vue-loader).
npm package: @mohuk/gulp-image64
Description: Convert and replace image-files within your HTML to base64-encoded data.
Author: leventekk
Latest version: 1.0.1

# gulp-image64

[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Dependencies][dep-image]][dep-url]

[npm-url]: https://npmjs.org/package/gulp-image64
[npm-image]: http://img.shields.io/npm/v/gulp-image64.svg

[travis-url]: https://travis-ci.org/leventekk/gulp-image64
[travis-image]: https://travis-ci.org/leventekk/gulp-image64.png

[dep-url]: https://david-dm.org/leventekk/gulp-image64
[dep-image]: http://img.shields.io/david/leventekk/gulp-image64.svg

Convert and replace image-files within your DOM/HTML to base64-encoded data.

## Example

##### gulpfile.js

```js
var gulp = require('gulp');
var image64 = require('gulp-image64');

//cheerio load options
var options = {
	lowerCaseAttributeNames: false
};

gulp.task('default', function () {
	gulp.src('index.html')
		.pipe(image64(options))
		.pipe(gulp.dest('path'));
});
```

##### index.html // Before...

```js
<html>
	<head>
	</head>
	<body>
		<img src="sample.png" />
...
```


##### path/index.html // ...after:

```html
<html>
	<head>
	</head>
	<body>
		<img src="data:image/png;base64,...">

...
```

This plugin uses [cheerio](https://github.com/cheeriojs/cheerio) so any options passed in `image64(options)` function call will be passed into `cheerio.load` function. See [here](https://github.com/cheeriojs/cheerio#loading) for complete list of options.
npm package: @mohuk/mail-helper
Description: imap based mail helper functions
Author: Mohammad Umair Khan
Latest version: 1.0.0

# Mail Helper

### Raison d`etre

This package is made to fetch the last email arrived in the Inbox of the configured email address. It exists because we needed this to test e2e flows where email is received by the user and he takes action accordingly.

### Example

```js
import { MailHelper } from '@mohuk/mail-helper';

const helper = new MailHelper({
  user: '',
  password: '',
  host: '',
  port: '',
  tls: true
});

helper.connect()
  .then(() => helper.fetchLastEmail())
  .then((email: string) => {
    console.log(email);
  })
  .catch((err) => {
    console.log(err)
  });
```
npm package: @mohun/pre-version
Description: Automatically install pre-version hooks for your npm modules.
Author: LiuMouLiang
Latest version: 1.0.2

# pre-version

**pre-version** Mainly used to submit Jenkins automatic deployment

- The patch number will be automatically upgraded every time the patch number is submitted. When the patch number reaches 100, the minor version number will be automatically upgraded. The major version number will not be processed

- Fixed version when `pre version` exists

### Installation

It's advised to install the **pre-version** module as a `devDependencies` in your
`package.json` as you only need this for development purposes. To install the
module simply run:

```
npm install --save-dev @mohun/pre-version
```

### Configuration

```js
{
  "pre-version": "1.0.0"
}
```

### License

MIT
npm package: @mohun/weiyi-build
Description: Automatically reconstruct the existing projects of Weiyi.
Author: LiuMouLiang
Latest version: 1.0.6

# weiyi-build

**weiyi build **主要用于自动封装weiyi现有的项目框架，以减少被接管项目的开发时间（目前仅适用于webpack项目）

**目标：**自己做的优化改进不会影响到项目原有逻辑

- 修改基础webpack配置
- 自动创建相应项目的文件
- html文件自动写入`ejs`模板变量

## 安装

It's advised to install the **weiyi-build** module as a `devDependencies` in your
`package.json` as you only need this for development purposes. To install the
module simply run:

```
npm install --save-dev @mohun/weiyi-build
```

## 使用

### 环境

process.env

- VERSION
- isMock
- isProduction
- AssetsPath   // Local resources
- MockURL

### 代理

Set MOCK Proxy

```js
exports._isMock = true;
exports.MockURL = '/mock';
exports.MockHost = ` http://${host}:7301/mock/6364c9d25b27d72588ed5425/ARM`;
```

### 资源

自动查找项目根目录和includeHtmlPath中的所有html文件，并在标题中添加`assets_path`变量

```html
exports.includeHtmlPath = ['public', 'src/pages']
<%= assets_path %>
```

## 配置

<p>Reconstruct Style</p>

**Date**: 2022-11-23  
**Author**: liumouliang  

| Param | Type | Description |
| --- | --- | --- |
| webpackConfig | <code>Object</code> | <p>Webpack configuration data</p> |
| isProduction | <code>Boolean</code> | <p>Production environment or not, default to false</p> |
| model | <code>String</code> | <p>pattern: muipage, h5, admin</p> |

**Example**  

```javascript
const { rebuild } = require('@mohun/weiyi-build')
rebuild(webpackConfig, true, 'muipage')
```

## 文件

> `config/local.env.js` 	// Used to store local environment variables

## 许可证

MIT
npm package: @mohxmd/dbstudio
Description: Spin up Drizzle Studio from any database URL
Latest version: 0.1.1

# dbstudio

> Spin up Drizzle Studio instantly from any database URL — no project setup needed.

## Install

### Global
```bash
npm i -g dbstudio
# or
bun add -g dbstudio
```

### Without installing
```bash
bunx dbstudio <url>
# or
bun x dbstudio <url>
```

### Standalone binaries
Download prebuilt binaries from GitHub Releases (Linux/macOS/Windows).

## Usage

```bash
# PostgreSQL
dbstudio postgresql://user:pass@localhost:5432/mydb

# MySQL
dbstudio mysql://user:pass@localhost:3306/mydb

# SQLite
dbstudio sqlite:./local.db

# Custom port
dbstudio postgresql://... --port 8080

# Auto-open browser
dbstudio postgresql://... --open

# Quick share with a temporary public URL
dbstudio postgresql://... --share

# Named tunnel with your hostname
dbstudio postgresql://... --share --tunnel dbstudio --hostname db.yourteam.com
```

## How it works

1. Detects dialect from your URL (postgresql / mysql / sqlite)
2. Writes a temporary `drizzle.config.ts` in your OS temp directory
3. Spins up `drizzle-kit studio`
4. Cleans up the temp file when the process exits (including Ctrl+C)

No project config directory. No project setup. Just pass a URL.

## Options

| Flag | Default | Description |
|------|---------|-------------|
| `--port` | `4983` | Port to run studio on |
| `--host` | `127.0.0.1` | Host to bind to (`0.0.0.0` is used automatically with `--share` unless explicitly set) |
| `--open` | false | Auto-open in browser |
| `--share` | false | Expose Studio through Cloudflare Tunnel |
| `--tunnel` | | Named Cloudflare tunnel (requires `--hostname`) |
| `--hostname` | | Public hostname for named tunnel |
| `--help` | | Show help |
| `--version` | | Show version |

## Requirements

- [Bun](https://bun.sh) >= 1.0
- `cloudflared` if you use `--share`

## License

MIT
npm package: @moi-services/camelot-component-layout-loader
Description: Layout - Loader
Author: Paulo McNally
Latest version: 0.0.3

# @moi-solutions/camelot-component-layout-loader

Layout - Loader.

# Props

| Name     | Type | Default|
| -------- |:----:| ------:|
| withLogo | bool | true   |

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-component-layout-loader.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-services/camelot-helper-i18n
Description: Helper of internationalization.
Author: Paulo McNally
Latest version: 0.0.2

# @moi-services/camelot-helper-i18n

Helper of internationalization.

### Example

    import I18n from '@moi-services/camelot-helper-i18n';
    import locales from './locales';
    I18n.load(locales);

    ...
    I18n.t('title');
    I18n.t('other');
    ...

### Generate new version

Update version property on **package.json**.

    $ yarn test
npm package: @moi-solutions/camelot-component-harvest-token-movements
Description: Harvest Token Movements Component
Author: Paulo McNally
Latest version: 0.0.12

# camelot-component-harvest-token-movements

Harvest Token Movements Component.

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-component-harvest-token-movements.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-solutions/camelot-component-layout-loader
Description: Layout - Loader
Author: Paulo McNally
Latest version: 0.0.1

# @moi-solutions/camelot-component-layout-loader

Layout - Loader.

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-component-layout-loader.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-solutions/camelot-component-layout-master
Description: Master layout template
Author: Paulo McNally
Latest version: 0.0.2

# camelot-component-layout-master

Master layout template.

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-component-layout-master.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-solutions/camelot-component-layout-sidebar
Description: Sidebar layout by ARA Cultivo
Author: Paulo McNally
Latest version: 0.0.2

# @moi-solutions/camelot-component-layout-sidebar

Sidebar layout by ARA Cultivo.

It allows to have a navigation menu in the old version in Rails and the current version in ReactJS.

```
import SideBar from '@moi-solutions/camelot-component-layout-sidebar';
...
  <Sidebar />
...
```
npm package: @moi-solutions/camelot-component-layout-template
Description: Basic UI template
Author: Paulo McNally
Latest version: 0.0.8

# @moi-solutions/camelot-component-layout-template

Basic UI template.

### Breadcrumb

To add breadcrumb.

### Box

To add a box container.

### BoxHeader

To add header.

### BoxContent

To add content.

### BoxFooter

To add buttons

### LabelError

To show red text.

| Name | Type    | Default | Description            |
| -----|:-------:| -------:|-----------------------:|
| show | boolean | false   | Show or hide component |
npm package: @moi-solutions/camelot-environment
Description: Environment for Camelot/Gandalf
Author: Paulo McNally
Latest version: 0.0.3

# camelot-environment

Returns the environment based on the URL.

* development
* staging
* production

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-environment.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-solutions/camelot-helper-api
Description: Helper to fetch API
Author: Paulo McNally
Latest version: 0.0.1

# @moi-solutions/camelot-helper-api

GraphQL client for Control Fitness

### Install

    $ yarn add @moi-solutions/camelot-helper-api

### Run example

    $ git clone https://gitlab.com/moi-solutions/camelot-helper-api.git
    $ yarn
    $ yarn start
    $ open http://localhost:8080

See example code on docs directory.
npm package: @moi-solutions/camelot-helper-auth
Description: It allows to identify if a user has logged in or must log in.
Author: Paulo McNally
Latest version: 0.0.3

# @moi-solutions/camelot-helper-auth

It allows to identify if a user has logged in or must log in.

```
import { redirect } from @moi-solutions/camelot-helper-auth;

redirect();
```

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-helper-auth.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Publish

    $ npm publish . --access=public
npm package: @moi-solutions/camelot-helper-cdn
Description: Helper to build url to assets.
Author: Paulo McNally
Latest version: 0.0.3

# camelot-helper-cdn

Helper to build url to assets..

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-helper-cdn.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-solutions/camelot-helper-i18n
Description: Helper of internationalization.
Author: Paulo McNally
Latest version: 0.0.1

# @moi-solutions/camelot-helper-i18n

Helper of internationalization.

### Example

    import I18n from '@moi-solutions/camelot-helper-i18n';
    import locales from './locales';
    I18n.load(locales);

    ...
    I18n.t('title');
    I18n.t('other');
    ...

### Generate new version

Update version property on **package.json**.

    $ yarn test
npm package: @moi-solutions/camelot-helper-url
Description: Convert the url based on the Gandalf or Camelot project.
Author: Paulo McNally
Latest version: 0.0.1

# camelot-helper-url

Convert the url based on the Gandalf or Camelot project..

Clone repository

    $ git clone https://gitlab.com/moi-solutions/camelot-helper-url.git

Install dependencies

    $ yarn

Run docs

    $ yarn start

Run dist

    $ yarn dist

Run test

    $ yarn test
npm package: @moi-xiey/react-native-apk-installer
Description: A react-native library to install APK on Android
Latest version: 2.2.1


# react-native-apk-installer-n

Support AndroidX and Android other version

## Getting started

AndroidX
`$ yarn add @moi-xiey/react-native-apk-installer`

### Mostly automatic install with react-native link (RN < 0.60)

`$ react-native link @moi-xiey/react-native-apk-installer`

## Usage

You can use react-native-fs to download the apk file:

```javascript
import RNFS from 'react-native-fs'
import RNApkInstaller from '@moi-xiey/react-native-apk-installer';

const filePath = RNFS.DocumentDirectoryPath + '/com.domain.example.apk';
const download = RNFS.downloadFile({
  fromUrl: 'apk file download url',
  toFile: filePath,
  progress: res => {
    console.log((res.bytesWritten / res.contentLength).toFixed(2));
  },
  progressDivider: 1
});

download.promise.then(result => {
  if(result.statusCode == 200){
    RNApkInstaller.install(filePath)
  }
});

// 是否有未知来源安装权限
ApkInstaller.haveUnknownAppSourcesPermission();

// 打开未知来源权限设置
ApkInstaller.showUnknownAppSourcesPermission();
```
npm package: @moi-xiey/react-native-baidu-face
Description: 百度人像SDK
Author: moi-xiey
Latest version: 1.1.5

# React Native 百度人像活体检测

### 使用前准备
- 创建授权[人脸识别 - 离线SDK管理]. [参考](https://ai.baidu.com/docs#/Face-Android-SDK/d4035af4)

### 安装步骤
- `yarn add react-native-baidu-face`
- `react-native link react-native-baidu-face`
- <details>
    <summary>Android 步骤</summary>

    - 修改包名(AndroidManifest.xml 的 package 和 android/app/build.gradle > android > defaultConfig > applicationId 填入创建授权时输入的 android 包名)
    - 在 android/gradle.properties 文件中配置
    ```profile
    ...
    BAIDU_FACE_SDK_LICENSE_ID="*license*"
    BAIDU_FACE_SDK_LICENSE_FILE_NAME="idl-license.face-android" # 可不配, 默认为 idl-license.face-android
    ...
    ```
    - 在 MainApplication.java 中添加
    ```java
    import com.baidu.idl.face.BaiduFace; /* 在顶部添加 */
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
        BaiduFace.init(this); /* 在 onCreate 中添加 */
    }
    ```
    - 把 license 文件放入 android/app/src/main/assets 目录
  </details>
- <details>
    <summary>iOS 步骤</summary>

    - xcode打开项目, 在 Frameworks 文件右键 Add Files to "xxx", 在弹出的框中选择 ${项目根目录}/node_modules/react-native-baidu-face/ios/IDLFaceSDK.framework 文件, 点击 add 按钮
    - 确认 General/Identity/Bundle Identifier 与创建授权时填入的要一致
    - General/Linked Frameworks and Libraries 下点击 + 号, 选择 libc++.tbd, 点击 add 按钮
    - Build Settings/Search Paths/Framework Search Paths 添加 $(SRCROOT)/../node_modules/react-native-baidu-face/ios(选择recursive)
    - Build Settings/Search Paths/Library Search Paths 添加 $(inherited) 和 $(SRCROOT)/../node_modules/react-native-baidu-face/ios(选择recursive)
    - Build Phases/Copy Bundle Resources 下点击 + 号, 在弹框中点击 Add Other... 按钮, 在弹出的框中跳转到 ${项目根目录}/node_modules/react-native-baidu-face/ios/ 目录选择添加 com.baidu.idl.face.faceSDK.bundle 和 com.baidu.idl.face.model.bundle 文件
    - 把 license 文件的名称改为 idl-license.face-ios, 然后按照上一个步骤把该文件添加到 Build Phases/Copy Bundle Resources 中
    - 在 info.plist 中添加 NSCameraUsageDescription
    - 在 info.plist 中添加 BAIDU_FACE_LICENSE_ID, 值为**创建授权**是填入的**授权标识**
    - 在 AppDelegate.m 中
    ```objective-c
    #import "BaiduFace.h" // 引入头文件

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [BaiduFace initSDK]; // 初始化人像SDK
    }

    ```
  </details>

### 使用
```javascript
import BaiduFace from "react-native-baidu-face";

// 人脸跟踪检测
BaiduFace.detect();

// 活体检测
BaiduFace.liveness()
```
npm package: @moi-xiey/react-native-bmap-sdk
Description: 百度地图
Author: moi-xiey
Latest version: 0.0.6

# React Native 百度地图
> fork from [qiuxiang/react-native-baidumap-sdk](https://github.com/qiuxiang/react-native-baidumap-sdk). 调整了目录结构

### 安装步骤
- `yarn add react-native-bmap-sdk`
- `react-native link react-native-bmap-sdk`
- <details>
    <summary>Android 步骤</summary>

    - 配置 AndroidMainifest.xml <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="xx"/>
  </details>
- <details>
    <summary>iOS 步骤</summary>

    - xcode打开项目, 在 Frameworks 文件右键 Add Files to "xxx", 在弹出的框中选择 ${项目根目录}/node_modules/react-native-bmap-sdk/ios/Frameworks 文件下所有的.framework 文件, 点击 add 按钮
    - 引入系统库文件, General/Linked Frameworks and Libraries 点击 + 号添加(MobileCoreServices.framework,CoreLocation.framework,QuartzCore.framework,OpenGLES.framework,SystemConfiguration.framework,CoreGraphics.framework,Security.framework,libsqlite3.0.tbd,CoreTelephony.framework,libc++.tbd)
    - 引入第三方 openssl 库, General/Linked Frameworks and Libraries 点击 + 号在弹窗框点击 Add Other... 按钮, 在弹出的框中跳转到 ${项目根目录}/node_modules/react-native-bmap-sdk/ios/Frameworks/thirdlibs 目录选择添加 libcrypto.a 和 libssl.a 文件
    - Build Settings/Search Paths/Framework Search Paths 添加 $(SRCROOT)/../node_modules/react-native-bmap-sdk/ios/Frameworks
    - Build Settings/Search Paths/Library Search Paths 添加 $(SRCROOT)/../node_modules/react-native-bmap-sdk/ios/Frameworks/thirdlibs
    - Build Phases/Copy Bundle Resources 点击 + 号/Add Other... 在弹出的框中跳转到 ${项目根目录}/node_modules/react-native-bmap-sdk/ios/Frameworks/BaiduMapAPI_Map.framework/Resources 目录选择添加 mapapi.bundle,images.bundle 文件(勾选“Copy items if needed”复选框)
  </details>

### 使用
> 参见 docs 目录
npm package: @moi-xiey/react-native-coordinate
Description: 坐标转换
Author: moi-xiey
Latest version: 0.0.1

# React Native 坐标系转换
> 一个提供了百度坐标（BD09）、国测局坐标（火星坐标，GCJ02）、和WGS84坐标系之间的转换的工具模块。

### 安装步骤
- `yarn add react-native-coordinate`
- `react-native link react-native-coordinate`

### 使用
```javascript
import Coordinate from "react-native-coordinate";

const latitude = 29.583364;
const longitude = 106.52236;
// gps设备获取坐标转百度坐标
Coordinate.wgs84tobd09({latitude, longitude}, (coordinate) => {console.log(coordinate);});
```
npm package: @moicky/coingecko-api
Description: TypeScript wrapper for the Coingecko public and pro APIs
Author: Moicky
Latest version: 3.1.5

# CoinGecko API TypeScript Wrapper

This package provides a TypeScript wrapper for the [CoinGecko API](https://www.coingecko.com/en/api) using `fetch`. It includes endpoints for both public and pro APIs, allowing you to interact with CoinGecko’s extensive cryptocurrency data.

## Installation

Install the package via npm:

```bash
npm install @moicky/coingecko-api
```

## Documentation

For full details on API endpoints and usage, refer to the following documentation:

- [Public API Documentation](./docs/public/README.md)
- [Pro API Documentation](./docs/pro/README.md)
- [Dex API Documentation](./docs/dex/README.md)

## Usage

The wrapper exports modules for both public and pro endpoints. Here’s an example of how to use them:

### Public API

```typescript
import { CoinsApi, Configuration } from "@moicky/coingecko-api/public";

const coinsAPI = new CoinsApi(
  new Configuration({
    apiKey: "YOUR_API_KEY",
  })
);

await coinsAPI.coinsList({ includePlatform: true });
```

### Pro API

```typescript
import { CoinsApi, Configuration } from "@moicky/coingecko-api/pro";

const coinsAPI = new CoinsApi(
  new Configuration({
    apiKey: "YOUR_API_KEY",
  })
);

await coinsAPI.coinsIdCirculatingSupplyChart({ id: "bitcoin", days: "2" });
```

## Contributing

To contribute to this project by adding new or updated API endpoints, follow these steps:

1. Open [generate.js](./generate.js) and add the new Swagger JSON file URL to the `swaggerConfigs` object. For example:

   ```typescript
   // Source: https://docs.coingecko.com/v3.0.1/docs/clients-unofficial#swagger-json-official
   const swaggerConfigs = {
     public: "https://docs.coingecko.com/openapi/65bf9cabb0951b0072e2cade",
     pro: "https://docs.coingecko.com/openapi/6584ea6ce07e130056b1af99",
     // Add new configs here
   };
   ```

2. Run the generation script to fetch the latest API definitions and generate TypeScript clients and docs:

   ```bash
   npm run generate
   ```

3. After running the command, the generated files will be located in the appropriate folder within `./generated` and `./dist`.

4. Test your changes and submit a pull request!

## License

This project is licensed under the MIT License.
npm package: @moifort/fireway
Description: Schema migration tool for Firestore
Latest version: 1.0.5

# fireway
A schema migration tool for firestore heavily inspired by [flyway](https://flywaydb.org/)

## Install

```bash
yarn add --dev @moifort/fireway
```


## How to

Run on emulators: `fireway migrate --path=MIGRATION_DIR_PATH --projectId=FIREBASE_PROJECT_ID --emulator`
- `MIGRATION_DIR_PATH`: migration directory path where script are see [Migration file format](). i.e. `./migration/dev` 
- `FIREBASE_PROJECT_ID`: firebase project id defined in `.firebaserc` file. i.e. `grdf-c590f`

On production: `fireway migrate --path=MIGRATION_DIR_PATH`
- `MIGRATION_DIR_PATH`: migration directory path where script are see [Migration file format](). i.e. `./migration/prod`
- You should set `GOOGLE_CREDENTIALS` env see [Authentication]()


## CLI

```bash
Usage
  $ fireway <command> [options]

Available Commands
  migrate    Migrates schema to the latest version

For more info, run any command with the `--help` flag
  $ fireway migrate --help

Options
  -v, --version    Displays current version
  -h, --help       Displays this message
```

### `fireway migrate`
```bash
Description
  Migrates schema to the latest version

Usage
  $ fireway migrate [options]

Options
  --path         Path to migration files  (default ./migrations)
  --projectId    Target firebase project
  --emulator     Run on emulator
  -h, --help     Displays this message

Examples
  $ fireway migrate
  $ fireway migrate --path=./my-migrations
  $ fireway migrate --projectId=my-staging-id
```

## Migration file format

Migration file name format: `vXXX__[description].js` when `XXX` is a number ex: `001`, `002`

```js
// each script gets a pre-configured firestore admin instance
module.exports.migrate = async ({firestore}) => {
    await firestore.collection('name').add({key: new Date()});
};
```

## Migration results

Migration results are stored in the `fireway` collection in `firestore`

```js

{
  checksum: 'fdfe6a55a7c97a4346cb59871b4ce97c',
  description: 'example',
  execution_time: 1221,
  installed_by: 'system_user_name',
  installed_on: firestore.Timestamp(),
  installed_rank: 3,
  script: 'v0.0.1__example.js',
  success: true,
  type: 'js',
  version: '0.0.1'
}
```

## Migration logic

1. Gather all the migration files and sort them according to semver
2. Find the last migration in the `fireway` collection
3. If the last migration failed, stop. (remove the failed result or restore the db to continue)
4. Run the migration scripts since the last migration

## Authentication

To run on your project (with your CD for instance) give `GOOGLE_CREDENTIALS` environment variable. 

`GOOGLE_CREDENTIALS='{ "type": "service_account",  "project_id": "...",  "private_key_id": "...",  "private_key": "...",  "client_email": ...",  "token_uri": "..." }' fireway migrate --path=./migration/prod`

You can find the json on your firebase console: **Settings/Service Account/SDK Admin Key/Generate private key**

You dont need `GOOGLE_CREDENTIALS` if you use `--emulators` but you must provide `--projectId`

## Thanks

@kevlened
npm package: @moilandtoil/sealab-postgres-triggers
Description: Postgres triggers used by some sealab-* repos
Latest version: 0.0.2

# Usage

Due to the nature of Knex migrations, there isn't a great way to add them to a project.  Knex doesn't support multiple migration paths.

It would probably be best to copy the migrations from this repo into your project.

The `/src/migration_helpers.js` containers helps for using the triggers in table migrations
npm package: @moilandtoil/sealab-type
Description: GraphQL type object with sealab-application dependency injection
Latest version: 0.0.5

# Overview
Sealab-type allows for the creation of extendable GraphQL types with
dependency injection. Also includes a type manager for registering the
 types with a [sealab-schema-builder](1) instance.


# Usage
Create type objects by extending the `BaseType` class.  Configure the
type name and definition in the constructor and define a resolver
function. The helper methods `service`, `logger`, `debug`, `info`, and
`error` will then be available to the resolver.

## BaseType
The base type is an extendable class, which should implement a
`constructor` and `resolver` method.
The constructor should accept the parameter of `application`, and call
the parent constructor, passing it.  The constructor should define the
properties `typeName` and `typeDef`.  The resolver should return an
object that will resolve the typeDef.

## TypeManager
The type manager should be instantiated with a `SchemaBuilder` object
from the [sealab-schema-builder](1) repo.  It has two methods,
`registerType` and `registerTypes`.  The first parameter for these
methods should be a single class definition or array of class
definitions respectively.  The second parameter should be the
application container.

# Example
```
class CoolType extends BaseType {
  constructor(application) {
    super(application);
    this.typeName = "CoolType";
    this.typeDef = `
      type ValidType {
        id: String
        name: String,
        related_resource: [WhateverResource]
      }
    `
  }

  resolver() {
    return {
      id: (value) => {
        return value.id;
      },
      name: (value) => {
        return value.name;
      },
      related_resource: async (value) => {
        this.debug("Fetching related resources by the parent id");
        return await this.service("whatever_resource").getResourcesByRelatedId(value.id);
      }
    }
  }
}
```

# Notes:
Pay attention to the scope of `this`.  The `resolver` is called by an
`execute` function which returns the object of functions.  This is
passed to the SchemaBuilder, which registers it with GraphQL.

The point being, assume you have no idea what calls it. So you need to
ensure the scope of `this` is the class that extends the `BaseType` class.
Either use the arrow operator when defining the resolver, assign `this`
to a variable outside the object definition, ie.
```
resolver(root, args, context) {
  const type = this;
  return {
    foo: function(value) => {
      type.debug("Calling object `this` through variable assigned in outer scope");
    }
  }
}
```

[1]: https://github.com/moilandtoil/sealab-schema-builder