open-index/open-npm huggingface dataset:
npm package: @rentpath/eslint-config-rentpath
Description: RentPath’s extensible shared config for [ESLint](http://eslint.org/)
Latest version: 4.0.4

# eslint-config-rentpath

RentPath’s extensible shared config for [ESLint](http://eslint.org/)

## Installation
```javascript
# npm
npm i --save-dev eslint @rentpath/eslint-config-rentpath

# yarn
yarn add eslint @rentpath/eslint-config-rentpath --dev
```

## Usage
Add the following entry to your `.eslintrc`
```json
{
  "extends": "@rentpath/eslint-config-rentpath"
}
```

It's easiest to add a script to `package.json` to run linting; for example,
```json
"scripts": {
  "lint": "eslint <path_to_javascript_dir>",
}
```

Then just `$ npm run lint` or `$ yarn lint`
npm package: @rentpath/google-event-tracking
Description: Rentpath tracking hooks for GTM. GPT/DFP for Rentpath.
Author: Daniil Veremchuk
Latest version: 1.4.34

# Google Event Tracking

- [Google Event Tracking](#Google-Event-Tracking)
    - [Application](#Application)
    - [Compilation](#Compilation)
    - [Caveats](#Caveats)

Rentpath wrapper for the Google libs. This lib attempts to initialize both Google Tag Manager and Google DFP as quickly and efficiently as possible.

### Application

This library was written with function principles in mind. Each function attempts to not modify the original state, but to return a new dataLayer state.

### Compilation

Compilation can be done with:
```bash
yarn build
```

## Releasing

1. Inside your pull request, bump the semantic version in `package.json`
2. Merge the pull request
3. Wait for the GitHub Actions [workflow](https://github.com/rentpath/google-event-tracking/actions) to publish your new package [here](https://github.com/rentpath/google-event-tracking/packages).

Note: You can also manually [draft a release](https://github.com/rentpath/google-event-tracking/releases/new) to set off the package publishing workflow.

### Caveats
npm package: @rentpath/hive-config
Description: Utilities for managing configuration objects in Node.js applications.
Author: Ari Bouius
Latest version: 1.1.4

# hive-config
Utilities for managing configuration objects in Node.js applications.

## API Reference
#### `merge(target, ...[sources])`
Recursively merges own and inherited string keyed properties of source configuration objects into a destination object.  Special handling is given to any property whose value is a function, and whose key beings with `$`, which will be called as a resolver function with the previous value of the property as an argument.  The return value is used as the merged property value.
```javascript
const obj1 = {
  foo: 'foo',
}

const obj2 = {
  $foo: prev => `${prev} bar`
}

merge({}, obj1, obj2)
// -> { foo: 'foo bar' }
```

#### `combine(target, ...[sources])`
Recursively merges own and inherited string keyed properties of source configuration objects into a destination object, but with special handling for arrays.  If both the source and the target are arrays, then the two arrays are combined.
```javascript
const obj1 = {
  items: [1],
}

const obj2 = {
  items: [2],
}

combine({}, obj1, obj2)
// -> { items: [1, 2] }
```

#### `compile(context, ...[configs])`
A configuration resolver that iterates over a set of configs, and for each config that evaluates to a function, calls it with a provided context argument.  The returned value(s) for each config are returned.
```javascript
const config1 = {
  foo: 'foo',
}

const config2 = ctx => ({
  foo: ctx.foo,
})

compile({ foo: 'bar' }, config1, config2)
// -> [{ foo: 'foo' }, { foo: 'bar' }]
npm package: @rentpath/hive-utils
Description: Utility methods/classes
Author: Ari Bouius
Latest version: 1.1.3

# hive-utils
Utility methods/classes

### `makeDir(dir, [options])`
Promisified version of [mkdirp](https://github.com/substack/node-mkdirp).

### `readFile(file, [options])`
Promisified of of [fs.readFile](https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback).

### `writeFile(file, data, [options])`
Promisified version of [fs.writeFile](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback).

### `interpolateName(name, options)`
A simplified version of webpack's [interpolateName](https://github.com/webpack/loader-utils#interpolatename) loader utility method.
- `name` (*String*): The filename template.  The following tokens are available:
  - `[ext]` the resource extension
  - `[name]` the resource basename
  - `[path]` the resource path, relative to the `context` option
  - `[folder]` the directory the resource is in
  - `[hash]` a md5 hash of either `options.content` or `options.resource`
- `options` (*Object*): A configuration object supporting the following options:
  - `resource` (*String*): The relative file path of a resource.
  - `context` (*String*): An absolute directory path that template tokens are resolved relative to (optional).
  - `content` (*String*): If provided, is used as source content when generating a hash token (optional).

### `Env`
A collection of methods for interacting with environment variables.

### `Env.load(paths, [options])`
A light wrapper around [dotenv.config](https://github.com/motdotla/dotenv#config) for loading environment variables.
- `paths` (*String|Array*) A single environment file path, or an array of paths.
- `options` (*Object*) Configuration options passed to `dotenv.config`.

### `Env.get(key, [default])`
- `key` (*String*) The environment variable name.
- `default` (*String*) A default if the value is undefined.
Reads environment variables from `process.env`.

### `Env.set(key, value)`
- `key` (*String*) The environment variable name.
- `value` (*String*) The environment variable value.
Writes environment variables to `process.env`.

### `Log`
A collection of methods that wrap [chalk](https://github.com/chalk/chalk) for printing console messages.

### `Log.print(message, [color])`
Logs a message to the console with a given color (defaults to `white`).

### `Log.info(message)`
Logs a info message using blue color.

### `Log.warn(message)`
Logs a warning message using orange color.

### `Log.success(message)`
Logs a success message using green color.

### `Log.error(message)`
Logs a error message using red color.
npm package: @rentpath/react-redux-router
Description: A universal router for applications using redux and react.
Author: Ari Bouius
Latest version: 3.6.1

# react-redux-router
A universal router for applications using redux and react.

## Usage
```javascript
import { render } from 'react-dom'
import Home from './Home'
import NotFound from './NotFound'
import { Router } from 'react-redux-router'

const routes = [
  { path: '/', component: Home },
  { path: '*', component: NotFound }
]

const App = () => (
  <Router routes={routes} initialLocation={window.location} />
)

render(App, document.body)
```

## API

### `push(location, [status])`
Appends a new location to history.
- [`location`] \(*String|Object*): The new location.
- [`status`] \(*Number*): The status code for the new location.

### `replace(location, [status])`
Replaces the current location.
- [`location`] \(*String|Object*): The new location.
- [`status`] \(*Number*): The status code for the new location.

### `go(index)`
Moves location backwards or forwards in history.
- [`index`] \(*Number*): The relative number of locations.

### `goBack()`
Moves location backwards.

### `goForward()`
Moves location forward.

### `<Router routes initialLocation>`
- [`routes`] \(*Array*): The new location.
- [`initialLocation`] \(*Object*): The initial location to use.

### `<Link to replace>`
Renders a link that updates the current location when clicked.
- [`to`] \(*String|Object*): The location to use for the `href` attribute.
- [`replace`] \(*Bool*): Whether to use dispatch a `replace` action when clicked.


### rendering

By using the `<Router />`, react will update your component tree post transition.
In some cases, such as displaying a modal on a url change it can be desirable to
skip the re-rendering of said route for slight performance boost.

consider the following route

```tsx
{
  path: '/somePath'
  resolve: () => modalParam ? { dangerouslySkipRender: true } : { component: Page}
}
```

under the hood, this prop sets the component up to automatically reject updates on transition to something like `/somePath?displayModal=true`.

while useful in some cases, it is considered a bad pattern to block updates to components in such way. according to the react team:

> shouldComponentUpdate - This method only exists as a performance optimization. Do not rely on it to “prevent” a rendering, as this can lead to bugs. Consider using the built-in PureComponent instead of writing shouldComponentUpdate() by hand. PureComponent performs a shallow comparison of props and state, and reduces the chance that you’ll skip a necessary update.

we should avoid blocking updates to a component directly. you should avoid using this props when you can and focus on
creating lighter connected components that do not update so agressively instead.
npm package: @rentpath/react-ui-packages
Description: React-UI is implemented as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) managed with [Lerna](https://github.com/lerna/lerna) to facilitate scripts, versioning and publishing.
Latest version: 0.0.1

# react-ui

React-UI is implemented as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) managed with [Lerna](https://github.com/lerna/lerna) to facilitate scripts, versioning and publishing.

For simplicity, `yarn run clean` and `yarn run build` will execute `lerna run clean` and `lerna run build`, respectively, which will traverse `packages` and run the intended scripts in all of the individual packages.

More Lerna [commands](https://github.com/lerna/lerna#commands), including how to publish.
npm package: @rentpath/react-ui-tracking
Description: A collection of React components that act as view layer abstractions for event collection libraries such as [event-tracker](github.com/rentpath/event-tracker.js).
Latest version: 5.0.0

# react-ui-tracking
A collection of React components that act as view layer abstractions for event collection libraries such as [event-tracker](github.com/rentpath/event-tracker.js).

## Installation
Install the stable version:
```javascript
npm i --save @rentpath/react-ui-tracking
```

## Basic Usage
Render the `Tracker` component as a top-level parent of your application, providing it with callback functions for handling page view events, and the setting of page level data.
```javascript
import React from 'react'
import { Tracker } from '@rentpath/react-ui-tracking'

const trackPageView = props => {
  ...
}

const setPageData = props => {
  ...
}

const App = props => (
  <Tracker setData={setPageData} pageView={trackPageView} >
    {props.children}
  </Tracker>
)
```

Once the tracker is in place, you can render the `PageView` component to trigger a page view event, or a `Tagging` component to attach arbitrary data to each event triggered on the current page.   
```javascript
import React from 'react'
import { PageView, Tagging } from '@rentpath/react-ui-tracking'

const HomePage = props => (
  <div>
    <PageView />
    <Tagging page="home" />
    {this.props.children}
  </div>
)
```

## API Reference
#### `<Tracker [setData] [pageView]>`
Provides a `tracker` context for child components, enabling them to call the provided callback functions.
- `setData` \(*Function*): A function that should apply arbitrary data to events for the current page.
- `pageView` \(*Function*): A function that should trigger a page view event.

#### `<PageView [...props]>`
Automatically triggers a page view event anytime the component is mounted, or its props are updated.  All provided props are passed as event data to the `pageView` callback.

#### `<Tagging [...props]>`
Automatically updates page level data anytime the component is mounted, or its props are updated.  All provided props are passed as page level event data to the `setData` callback.
npm package: @rentspree/cookie
Description: Cookie library for Rentspree's projects
Author: Jirat Boondam
Latest version: 1.0.9

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

## Installation

npm install @rentspree/cookie

## Update a newer version

run

```bash
npm version patch
```

### Table of Contents

- [setOption][1]
  - [Parameters][2]
- [addChangeListener][3]
  - [Parameters][4]
- [removeChangeListener][5]
  - [Parameters][6]
- [setLocalItem][7]
  - [Parameters][8]
- [getLocalItem][9]
  - [Parameters][10]
- [getAllLocalItem][11]
  - [Parameters][12]
- [removeLocalItem][13]
  - [Parameters][14]
- [removeAllLocalItem][15]

## setOption

Set options for the to be stored cookies.

### Parameters

- `options` **[Object][16]** (optional, default `{}`)

## addChangeListener

Add a listener to when a cookie is set or removed.

### Parameters

- `callback` **[function][17]**

## removeChangeListener

Remove a listener from the change callback.

### Parameters

- `callback` **[function][17]**

## setLocalItem

Set a cookie value.

### Parameters

- `name` **[string][18]** Cookie's name
- `value` **[string][18]**/**[Object][16]** Cookie's value

## getLocalItem

Get a cookie value.

### Parameters

- `name` **[string][18]** Cookie's name
- `options` **[Object][16]** Cookie's options (optional, default `{}`)

Returns **any** cookie or false if cookie is not found.

## getAllLocalItem

Get all cookies.

### Parameters

- `options` **[Object][16]** (optional, default `{}`)

Returns **all** cookies.

## removeLocalItem

Remove a cookie.

### Parameters

- `name` **[string][18]** Cookie's name
- `options` **[Object][16]** Cookie's options (optional, default `{}`)

## removeAllLocalItem

Remove all cookies that has the same prefix as the parameter.

### Parameters

- `prefix` **[string][18]** Prefix of the cookie to be removed

## License

MIT (http://www.opensource.org/licenses/mit-license.php)

[1]: #setoption
[2]: #parameters
[3]: #addchangelistener
[4]: #parameters-1
[5]: #removechangelistener
[6]: #parameters-2
[7]: #setlocalitem
[8]: #parameters-3
[9]: #getlocalitem
[10]: #parameters-4
[11]: #getalllocalitem
[12]: #parameters-5
[13]: #removelocalitem
[14]: #parameters-6
[15]: #removealllocalitem
[16]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[17]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
[18]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
npm package: @rentspree/lightship
Description: liveness and readiness wrapper using lightship for node.js
Author: Sorasak Srirussamee
Latest version: 0.2.11

# @rentspree/lightship

A lightship module for support kubernetes liveness and readiness by @rentspree

Description
---------------

This module is a simple wrapper of the original [lightship](https://github.com/gajus/lightship#readme) library which helps to easily initialize the ready callback functions for multiple source of `ready` interconnected services being used by the application (eg. database) or configuration loading of the application.

## Features
 - add `createReadiness` which help to split lightship `signalReady` to multiple functions
 - server exposes on paths `/health` `/live`  and `/ready` as the original lightship does but listen on port `13000` by default
 - add `enableLog` option to print lightship logs
 - add `randomPortOnLocal` to reserve random port behavior when the process is run on local as the original lightship does, default to `false`

## Install

```sh
npm install --save @rentspree/lightship
```

## Usage

#### Readiness

```javascript
import createLightship from "@rentspree/lightship"

const { createReadiness } = createLightship()
const [ mongooseDbReady, expressReady, senecaReady ] = createReadiness(3)

// for mongoose connection
mongoose.connect(/* connectionString */)
mongoose.connection.on('connected', ()=> mongooseDbReady())

// for express
const app = express();
app.listen(3000, ()=> expressReady())

// for seneca
require('seneca')({ some_options: 123 })
  .use('community-plugin-1', {some_config: SOME_CONFIG})
  .use('community-plugin-2')
  .listen(/* ... */)
  .client(/* ... */)
  .ready(()=> senecaReady())
```

in case of making service back to not ready state, we get functions by 2 ways ..
```javascript
const [ mongooseDbReady ] = createReadiness()

// first way, return from ready function call
const mongooseNotReady = mongooseDbReady()
mongooseNotReady()

// second way, by property `toNotReady` of ready function
mongooseDbReady.toNotReady()
```

## License

MIT © [RentSpree](https://github.com/rentspree)
npm package: @rentspree/oauth2orize-facebook
Description: Facebook token exchange middleware for OAuth2 server toolkit `oauth2orize`.
Author: Trung Nguyen
Latest version: 1.0.6

# oauth2orize-facebook

Facebook token exchange middleware for OAuth2 server toolkit [oauth2orize][oauth2orize-url].

Inspired from [oauth2orize][oauth2orize-url]'s built-in exchanger
[password](https://github.com/jaredhanson/oauth2orize/blob/master/lib/exchange/password.js).

## Installation

```sh
npm i oauth2orize-facebook -S
```

## Usage

Before using this package, you should enable the 'Require App Secret' option in the advanced settings of your Facebook app.
You also must provide the app secret by exporting it

```sh
export FB_APP_SECRET={your Facebook app secret}
```

or by adding FB_APP_SECRET={your Facebook app secret} to your .env file.

Then, you can have fun

```js
var oauth2orize = require('oauth2orize');
var oauth2orizeFacebook = require('oauth2orize-facebook');

var server = oauth2orize.createServer();

server.exchange(oauth2orizeFacebook(['email', 'first_name', 'last_name'], function (client, profile, scope, cb) {
  // Get access token from client and Facebook profile information.
  var accessToken = 'access token';

  // Refresh token could be returned if it is supported by your OAuth2 server.
  // If not available, just pass `null` as argument.
  var refreshToken = 'optional refresh token';

  // Additional parameters to return in response. Pass `null` if not available.
  var params = {
    'welcome_to': 'our OAuth2 server',
    'glad_to': 'meet you'
  };

  cb(null, accessToken, refreshToken, params);
  // Or just `cb(null, accessToken);` is enough.
}));
```

## License

MIT licensed.

[oauth2orize-url]: https://www.npmjs.com/package/oauth2orize
npm package: @rentzsch/jsontable
Description: Simple, efficient, flexible, streamable tabular textual data format
Latest version: 0.2.1

# JSON Table

**JSON Table** is a simple format extension of [ndjson](http://ndjson.org)/[JSON Lines](https://jsonlines.org) that applies *CSV-mindset* to JSON tabular data.

It adds two requirements:

1. Each line is an array.
2. The first line specifies the column's names (and optional additional metadata).

Whereas a simple dataset might look like this in CSV:

```
id,firstName,lastName
1,Homer,Simpson
2,Marge,Simpson
3,Bart,Simpson
4,Lisa,Simpson
5,Maggie,Simpson
```

It would look like this in JSON Table:

```json
["id", "firstName", "lastName"]
[1, "Homer", "Simpson"]
[2, "Marge", "Simpson"]
[3, "Bart", "Simpson"]
[4, "Lisa", "Simpson"]
[5, "Maggie", "Simpson"]
```

While JSON Tables is a little more verbose, in exchange you receive a modern (default UTF-8 encoding) unambiguous format that easily supports data nesting.
npm package: @renventura/zipdir
Description: NodeJS CLI command for zipping directories.
Author: Ren Ventura
Latest version: 1.0.0

# ZipDir CLI

NodeJS CLI command for zipping directories.

## Description

A simple terminal command built using NodeJS. This was my first attempt to create a terminal command using Node, and one of my first terminal commands in general (it may not be any good). It does work for Mac - I have not tested for other OS.

## Installation

#### NPM (suggested)

```
$ npm install -g @renventura/zipdir
```

#### From GitHub

1. Clone the repository

```
$ git clone https://github.com/renventura/zipdir.git
```

2. `cd` into the repo

3. Run:

```
$ npm install
$ npm i -g
```

## Usage

```
$ zipdir [dir] [location]
```

`[dir]` - path for directory to be zipped - can be relative or absolute (default: current working directory); e.g. `my-directory`

`[location]` - path and filename for zipped directory (default: parent of current working directory); e.g. `~/Desktop/my-directory.zip`

## Bugs

If you find an issue, let me know!

## Changelog

__1.0.0__
* Initial commit
npm package: @renwin/ccc
Description: CLI tool for installing AI Agent Skills from www.ccc.onl
Author: renwin
Latest version: 1.0.2

# CCC CLI - AI Agent Skills 命令行工具

一个用于安装 AI Agent Skills 的命令行工具，从 [www.ccc.onl](https://www.ccc.onl) 下载并管理 skills。

---

## 功能特性

- 📦 **安装 Skills**: 从 www.ccc.onl 下载并安装 skills
- 📋 **列表查看**: 浏览所有可用的 skills
- 🔍 **搜索功能**: 按名称或描述搜索 skills
- 🎨 **美观输出**: 带颜色和进度提示的终端界面

---

## 安装

### 方式一：使用 npx（推荐，无需安装）

```bash
npx @renwin/ccc@latest install owner/skill-name
```

### 方式二：全局安装

```bash
npm install -g @renwin/ccc
```

---

## 使用方法

### 安装 Skill

```bash
# 基本用法
npx @renwin/ccc install owner/skill-name

# 指定安装目录
npx @renwin/ccc install owner/skill-name --dir my-skills

# 示例
npx @renwin/ccc install easonc13/sui-move
npx @renwin/ccc install byungkyu/trello-api
```

安装后的文件位置：`.skills/skill-name/`

### 查看所有 Skills

```bash
# 列出所有 skills
npx @renwin/ccc list

# 搜索 skills
npx @renwin/ccc list --search trello
```

### 查看帮助

```bash
npx @renwin/ccc --help
npx @renwin/ccc install --help
```

---

## 命令详解

### `ccc install <skill>`

安装指定的 skill。

**参数**:
- `<skill>` - Skill 名称，格式：`owner/skill-name`

**选项**:
- `-d, --dir <directory>` - 安装目录（默认：`.skills`）

**示例**:
```bash
npx @renwin/ccc install easonc13/sui-move
npx @renwin/ccc install byungkyu/trello-api --dir my-skills
```

### `ccc list`

列出所有可用的 skills。

**选项**:
- `-s, --search <query>` - 搜索关键词

**示例**:
```bash
npx @renwin/ccc list
npx @renwin/ccc list --search calendar
```

---

## 工作原理

1. **连接 API**: CLI 工具连接到 https://www.ccc.onl/api
2. **验证 Skill**: 检查 skill 是否存在
3. **下载 ZIP**: 从服务器下载 skill 的 ZIP 包
4. **解压文件**: 解压到目标目录
5. **完成提示**: 显示安装位置和下一步操作

---

## 依赖

- **commander** - CLI 框架
- **chalk** - 终端颜色
- **ora** - 加载动画
- **adm-zip** - ZIP 解压
- **node-fetch** - HTTP 请求

---

## 配置

CLI 工具默认连接到生产 API (`https://www.ccc.onl/api`)。

要修改 API 地址（如用于本地开发），可以使用环境变量：

```bash
export CCC_API_BASE=http://localhost:3001/api
npx @renwin/ccc install skill
```

---

## 许可证

MIT

---

## 相关链接

- **网站**: [www.ccc.onl](https://www.ccc.onl)
- **GitHub 仓库**: [github.com/renqw2023/skills](https://github.com/renqw2023/skills)
- **npm 包**: [npmjs.com/package/@renwin/ccc](https://www.npmjs.com/package/@renwin/ccc)

---

## 支持

如有问题或建议，请访问 [www.ccc.onl](https://www.ccc.onl) 或提交 Issue 到 [GitHub](https://github.com/renqw2023/skills)。
npm package: @renxiangdong/message-notification
Description: A Vue2 message notification plugin
Author: renxiangdong
Latest version: 1.0.6

# Vue Message Notification Plugin

一个适用于Vue2和Vue3的消息通知插件，基于Element Plus/Element UI组件库。

## 特性

- 🚀 同时支持Vue2和Vue3
- 💡 基于Element Plus（Vue3）/Element UI（Vue2）组件库
- 📱 响应式设计
- 🎨 可自定义样式
- 📦 轻量级，易于集成

## 安装

```bash
npm install @renxiangdong/message-notification
```

## 使用方法

### 1. 全局注册插件

```javascript
// Vue3
import { createApp } from 'vue'
import MessageNotification from '@renxiangdong/message-notification'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)
app.use(ElementPlus)
app.use(MessageNotification)

// Vue2
import Vue from 'vue'
import MessageNotification from '@renxiangdong/message-notification'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)
Vue.use(MessageNotification)
```

### 2. 在组件中使用

```vue
<template>
  <div>
    <MessageNotification 
      :messages="messages"
      :iconSize="24"
      :popoverWidth="350"
      @message-read="handleMessageRead"
      @all-read="handleAllRead"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      messages: [
        {
          id: 1,
          content: '您有一条新消息',
          time: new Date(),
          read: false
        },
        {
          id: 2,
          content: '系统维护通知',
          time: new Date(Date.now() - 3600000), // 1小时前
          read: true
        }
      ]
    }
  },
  methods: {
    handleMessageRead(messageId) {
      // 处理消息已读逻辑
      const message = this.messages.find(msg => msg.id === messageId)
      if (message) {
        message.read = true
      }
    },
    handleAllRead() {
      // 处理全部已读逻辑
      this.messages.forEach(msg => {
        msg.read = true
      })
    }
  }
}
</script>
```

## API

### Props

| 参数 | 说明 | 类型 | 默认值 |
|------|------|------|--------|
| messages | 消息列表 | Array | [] |
| iconSize | 图标大小 | Number | 20 |
| popoverWidth | 弹窗宽度 | Number | 300 |

### Events

| 事件名 | 说明 | 参数 |
|--------|------|------|
| message-read | 消息被标记为已读时触发 | messageId |
| all-read | 所有消息被标记为已读时触发 | - |

### 消息对象结构

```javascript
{
  id: Number|String,    // 消息ID
  content: String,      // 消息内容
  time: Date,          // 消息时间
  read: Boolean        // 是否已读
}
```

## 开发

```bash
# 安装依赖
npm install

# 构建
npm run build

# 开发模式
npm run dev
```

## License

MIT
npm package: @renxuetang/qiniu-webpack-plugin
Description: Webpack 编译后的文件上传到 七牛云存储 qiniu
Author: renxuetang
Latest version: 0.0.2

﻿# Qiniu Webpack Plugin [![npm](https://img.shields.io/npm/v/@renxuetang/qiniu-webpack-plugin.svg)](https://www.npmjs.com/package/@renxuetang/qiniu-webpack-plugin)

> 🚀 Webpack 编译后的文件上传到 七牛云存储

## 功能

- 支持并发上传
- 保留上一版本文件
- 智能分析，不重复上传

## 安装

```Bash
npm install @renxuetang/qiniu-webpack-plugin --dev
```


## 使用

**webpack.config.js**

```Javascript
const QiniuWebpackPlugin = require('@renxuetang/qiniu-webpack-plugin');

module.exports = {
  // ... Webpack 相关配置
  plugins: [
    new QiniuWebpackPlugin({
      accessKey: 'qiniu access key', // 必填
      secretKey: 'qiniu secret key', // 必填
      bucket: 'demo', // 必填
      bucketDomain: 'https://xxx.clouddn.com', // 必填
      matchFiles: ['!*.html', '!*.map'],
      uploadPath: '/assets',
      batch: 10,
      deltaUpdate: true,
      options: {
        prefix: 'static/',                // 列举的文件前缀
        replacePrefix: 'backup/static/',  // 替换前缀字符串
        fromBucket: 'demo',               // 从...空间名
        toBucket: 'demo',                 // 到空间名
        marker: null,                     // 上一次列举返回的位置标记，作为本次列举的起点信息
        limit: 1000                       // 每次返回的最大列举文件数量(1 - 1000)
        delimiter: null,                  // 指定目录分隔符
      }
    })
  ]
}
```

**Options**

|Name|Type|Default|Required|Description|
|:--:|:--:|:-----:|:-----:|:----------|
|**[`accessKey`](#)**|`{String}`| | true |七牛 Access Key|
|**[`secretKey`](#)**|`{String}`| | true |七牛 Secret Key|
|**[`bucket`](#)**|`{String}`| | true |七牛 空间名|
|**[`bucketDomain`](#)**|`{String}`| | true |七牛 空间域名|
|**[`matchFiles`](#)**|`{Array[string]}`| ['*'] | false |匹配文件/文件夹，支持 include/exclude|
|**[`uploadPath`](#)**|`{string}`| /webpack_assets | false |上传文件夹名|
|**[`batch`](#)**|`{number}`| 10 | false |同时上传文件数|
|**[`deltaUpdate`](#)**|`{Boolean}`| true | false |是否增量构建|
|**[`options`](#)**|`{Object}`| {} | false |额外参数|

- `bucketDomain` 支持不携带通信协议: `//xxx.clouddn.com`
- `matchFiles` 匹配相关文件或文件夹，详细使用请看: [micromatch](https://github.com/micromatch/micromatch)
  - `!*.html` 不上传文件后缀为 `html` 的文件
  - `!assets/**.map` 不上传 `assets` 文件夹下文件后缀为 `map` 的文件


***



## Special Thanks

- [zzetao](https://github.com/zzetao)



## License

Copyright © 2019, [renxuetang](https://github.com/renxuetang).
Released under the [MIT License](LICENSE).
npm package: @renyii/fluent-editor
Description: FluentEditor 是一个基于 Quill 2.0 的富文本编辑器，在 Quill 基础上扩展了表格、图片、超链接、复制粘贴、插入表情、文件上传、@提醒、斜杆菜单等丰富的模块和格式，框架无关、兼容 Quill API、兼容 Quill 模块生态。
Latest version: 1.0.2

# FluentEditor 富文本编辑器

FluentEditor 是一个基于 Quill 2.0 的富文本编辑器，在 Quill 基础上扩展了表格、图片、超链接、复制粘贴、插入表情、文件上传、@提醒、斜杆菜单等丰富的模块和格式，框架无关、兼容 Quill API、兼容 Quill 模块生态。

## 项目优势

FluentEditor 主要有以下特点和优势：

* 包含30多种丰富的模块和格式，除了 Quill 内置的21种格式之外，还扩展和增强了表格、图片、超链接、字数统计、表情、文件上传、复制粘贴、@提醒、斜杆快捷菜单、截图等15种模块和格式
* 强大的表格功能，支持在工具栏插入指定行列的表格、表格行高/列宽拖拽、插入行/列、删除行/列、合并/拆分单元格等丰富的表格操作
* 与框架无关，可以在 Vue、React、Angular 等多种框架中使用
* 兼容 Quill 所有 API，兼容 Quill 生态模块和格式

## 快速入门

安装 FluentEditor：

```shell
npm i @opentiny/fluent-editor
```

编写html：

```html
<div id="editor">
  <p>Hello FluentEditor!</p>
</div>
```

引入样式：

```css
@import '@opentiny/fluent-editor/dist/style.css'
```

初始化 FluentEditor 编辑器：

```javascript
import FluentEditor from '@opentiny/fluent-editor'

const editor = new FluentEditor('#editor', {
  theme: 'snow'
})
```

## ❤️ 致谢

感谢：

- [quill](https://github.com/slab/quill) 项目，它是一款API驱动的富文本编辑器，采用模块化架构，可扩展性好，易于使用，支持跨平台，FluentEditor 基于 Quill 扩展和增强了表格、图片、超链接等大量模块和格式。
- [quill-better-table](https://github.com/soccerloway/quill-better-table) 项目，它增强了 Quill 内置表格模块，增加了丰富的功能，FluentEditor 的表格操作功能基于 quill-better-table。
- [quill-emoji](https://github.com/contentco/quill-emoji) 项目，它是一个用于表情符号的 Quill 模块，FluentEditor 的插入表情功能基于 quill-emoji。
- [quill-blot-formatter](https://github.com/Fandom-OSS/quill-blot-formatter) 项目，它是一个用于调整图像和视频大小的 Quill 模块，FluentEditor 的图片缩放功能基于 quill-blot-formatter。
npm package: @renyii/vue-renderless
Description: An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.
Author: OpenTiny Team
Latest version: 1.0.5

# @opentiny/vue-renderless

This is for TINY's own internal use only, currently as a dependency for @opentiny/vue.

It can also be used as a renderless functions for implementing a custom UI component.

For all instructions, please check out the home page: [https://open.codehub.huawei.com/innersource/originjs/tiny/opentiny-vue/home](https://open.codehub.huawei.com/innersource/originjs/tiny/opentiny-vue/home)
npm package: @renyoo/node-red-dfrobot-lorawan-nodes
Description: node red nodes for DFRobot-lorawan
Author: GDuang
Latest version: 1.0.17

# node-red-dfrobot-lorawan-nodes

支持在Node-Red中调用DFROBOT-LoRaWAN功能的节点

### 安装说明
在Node-Red中，安装@renyoo/node-red-dfrobot-lorawan-nodes

### 节点介绍

| 名称                  | 功能                             |
|-----------------------|----------------------------------|
|  Decoder              | 对节点设备信息中的数据进行解码
|  Packet Item          | 对单一节点设备中的包信息进行提取
|  LW Receive    		| 网关LoRaWAN接收所有节点的数据信息
|  LW Send       		| 网关LoRaWAN给指定节点发送数据
|  Node List            | 通过http请求获取所有节点设备的列表信息
|  Group                | 对节点设备进行分组
|  GW Events       		| 对网关中发生的事件进行监听
|  MusicPlayer          | 音乐播放器
|  Single Node          | LoRaWAN接收指定节点设备的数据信息（单节点信息）
npm package: @renyoo/node-red-dfrobot_noderedcomputer
Description: node red nodes for NodeREDComputer
Author: GDuang
Latest version: 1.1.3

# nodeRed-DFRobot_NodeREDComputer


### 安装说明
在Node-Red中, 安装@renyoo/node-red-DFRobot_NodeREDComputer

### 节点介绍

| 名称                  | 功能                             |
|-----------------------|----------------------------------|
|  ......         | ...... |
|                    |        |
npm package: @renyoo/node-red-myblock
Description: node red nodes for myblock
Author: GDuang
Latest version: 1.0.1

# nodeRed-DFRobot_NodeREDComputer


### 安装说明
在Node-Red中, 安装@renyoo/node-red-DFRobot_NodeREDComputer

### 节点介绍

| 名称                  | 功能                             |
|-----------------------|----------------------------------|
|  ADC                  | 模数转换节点
|  DAC                  | 数模转换节点
npm package: @renyuneyun/parse-link-header-ts
Description: Parses a link header and returns information for each contained link.
Author: Rui Zhao
Latest version: 2.0.0

# parse-link-header-ts

This code base is based on https://github.com/thlorenz/parse-link-header.

Big thanks for thlorenz :pray:

## What is this?

This is a TypeScript library to parse the `Link` header as defined in [RFC 5988](https://tools.ietf.org/html/rfc5988).

## Concepts

- Written in TypeScript
- No dependencies

## License

[MIT License](./LICENSE)