open-index/open-npm huggingface dataset:
npm package: @guld/randombytes
Description: random bytes from browserify stand alone
Latest version: 2.1.0

randombytes
===

[![Version](http://img.shields.io/npm/v/randombytes.svg)](https://www.npmjs.org/package/randombytes) [![Build Status](https://travis-ci.org/crypto-browserify/randombytes.svg?branch=master)](https://travis-ci.org/crypto-browserify/randombytes)

randombytes from node that works in the browser.  In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues

```js
var randomBytes = require('randombytes');
randomBytes(16);//get 16 random bytes
randomBytes(16, function (err, resp) {
  // resp is 16 random bytes
});
```
npm package: @guld/string_decoder
Description: The string_decoder module from Node core
Latest version: 1.2.0

# string_decoder

***Node-core v8.9.4 string_decoder for userland***


[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/)
[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/)


```bash
npm install --save string_decoder
```

***Node-core string_decoder for userland***

This package is a mirror of the string_decoder implementation in Node-core.

Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/).

As of version 1.0.0 **string_decoder** uses semantic versioning.

## Previous versions

Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10.

## Update

The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version.

## Streams Working Group

`string_decoder` is maintained by the Streams Working Group, which
oversees the development and maintenance of the Streams API within
Node.js. The responsibilities of the Streams Working Group include:

* Addressing stream issues on the Node.js issue tracker.
* Authoring and editing stream documentation within the Node.js project.
* Reviewing changes to stream subclasses within the Node.js project.
* Redirecting changes to streams from the Node.js project to this
  project.
* Assisting in the implementation of stream providers within Node.js.
* Recommending versions of `readable-stream` to be included in Node.js.
* Messaging about the future of streams to give the community advance
  notice of changes.

See [readable-stream](https://github.com/nodejs/readable-stream) for
more details.
npm package: @guld/util
Description: Node.JS util module
Author: Joyent
Latest version: 0.11.1

# util [![Build Status](https://travis-ci.org/defunctzombie/node-util.png?branch=master)](https://travis-ci.org/defunctzombie/node-util)

> Node.js's [util][util] module for all engines.

This implements the Node.js [`util`][util] module for environments that do not have it, like browsers.

## Install

You usually do not have to install `util` yourself. If your code runs in Node.js, `util` is built in. If your code runs in the browser, bundlers like [browserify](https://github.com/browserify/browserify) or [webpack](https://github.com/webpack/webpack) also include the `util` module.

But if none of those apply, with npm do:

```shell
npm install util
```

## Usage

```javascript
var util = require('util')
var EventEmitter = require('events')

function MyClass() { EventEmitter.call(this) }
util.inherits(MyClass, EventEmitter)
```

## Browser Support

The `util` module uses ES5 features. If you need to support very old browsers like IE8, use a shim like [`es5-shim`](https://www.npmjs.com/package/es5-shim). You need both the shim and the sham versions of `es5-shim`.

To use `util.promisify` and `util.callbackify`, Promises must already be available. If you need to support browsers like IE11 that do not support Promises, use a shim. [es6-promise](https://github.com/stefanpenner/es6-promise) is a popular one but there are many others available on npm.

## API

See the [Node.js util docs][util].  `util` currently supports the Node 8 LTS API. However, some of the methods are outdated. The `inspect` and `format` methods included in this module are a lot more simple and barebones than the ones in Node.js.

## Contributing

PRs are very welcome! The main way to contribute to `util` is by porting features, bugfixes and tests from Node.js. Ideally, code contributions to this module are copy-pasted from Node.js and transpiled to ES5, rather than reimplemented from scratch. Matching the Node.js code as closely as possible makes maintenance simpler when new changes land in Node.js.
This module intends to provide exactly the same API as Node.js, so features that are not available in the core `util` module will not be accepted. Feature requests should instead be directed at [nodejs/node](https://github.com/nodejs/node) and will be added to this module once they are implemented in Node.js.

If there is a difference in behaviour between Node.js's `util` module and this module, please open an issue!

## License

[MIT](./LICENSE)

[util]: https://nodejs.org/docs/latest-v8.x/api/util.html
npm package: @guld/util-deprecate
Description: The Node.js `util.deprecate()` function with browser support
Author: Nathan Rajlich
Latest version: 1.0.2

util-deprecate
==============
### The Node.js `util.deprecate()` function with browser support

In Node.js, this module simply re-exports the `util.deprecate()` function.

In the web browser (i.e. via browserify), a browser-specific implementation
of the `util.deprecate()` function is used.


## API

A `deprecate()` function is the only thing exposed by this module.

``` javascript
// setup:
exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead');


// users see:
foo();
// foo() is deprecated, use bar() instead
foo();
foo();
```


## License

(The MIT License)

Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
npm package: @gulfie/lepikevents
Description: Global mouse and keyboard events Listener
Author: borecjeborec1
Latest version: 1.6.13

# Lepik Events
An event based, Global Keyboard and Mouse listener.

[![NPM](https://nodei.co/npm-dl/lepikevents.png)](https://www.npmjs.com/package/lepikevents)

Lepik Events is only part from [LepikJS](https://www.npmjs.com/package/lepikjs). Definitely try it out!

Visit LepikJS's [website](https://lepikjs.netlify.app/).

## Installing

    npm install lepikevents

## Coding

```javascript
// Require lepikEvents
const lepikEvents = require('lepikevents');

lepikEvents.events.on('keyPress', (data) => {
  // Returns key pressed as String 
  console.log(data); // e||esc||space||backspace ...
});

lepikEvents.events.on('keyRelease', (data) => {
  // Returns key released as String 
  console.log(data); // e||esc||space||backspace ...
});

lepikEvents.events.on('mouseClick', (data) => {
  // Returns array containing mouse position x, y and button clicked 
  console.log(data); // [361, 235, *1]
  // *1 for left, 2 for right, 3 for middle
});

lepikEvents.events.on('mouseDoubleClick', (data) => {
  // Returns array containing mouse position x, y and button double-clicked 
  console.log(data); // [361, 235, *1]
  // *1 for left, 2 for right, 3 for middle
});

lepikEvents.events.on('mouseMove', (data) => {
  // Returns array containing mouse x, y and time (seconds)
  console.log(data); // [20, -35, 1663787912.698]
});
```

## All events

Curently there are 5 events in total, **mouseMove**, **mouseClick**, **mouseDoubleClick**, **keyPress** and **keyRelease**.

## Requirements

Lepik Events uses [Python keyboard](https://github.com/boppreh/keyboard) and [Python mouse](https://github.com/boppreh/mouse) which runs on Python. 

If your are on Windows, then you don't even have to have it installed, cause thanks to [Pyinstaller](https://github.com/pyinstaller/pyinstaller), the code is compiled into executable.

If you are not using windows, you need to have atleast Python3 installed.
It's better to have atleast node13 but not required.

## License
The code is licensed under the MIT license (http://opensource.org/licenses/MIT). See [LICENSE](./LICENSE) file.
npm package: @gulfofmaine/tsstac
Description: TsSTAC is designed as a [Sans-I/O style library](https://sans-io.readthedocs.io/index.html) for loading and managing [SpatioTemporal Asset Catalogs](https://stacspec.org/).
Author: Alex Kerney
Latest version: 0.1.3

# TsSTAC

TsSTAC is designed as a [Sans-I/O style library](https://sans-io.readthedocs.io/index.html) for loading and managing [SpatioTemporal Asset Catalogs](https://stacspec.org/).

## Why Sans-I/O?

There are many different ways to fetch data in Javascript, so to make the library the most useful, we shouldn't force any specific one on users.
We can however provide a reference implementation, so that users don't have to provide their own.

By not tieing an IO method we can better accomidate different access patterns such as:
- [Single File STAC](https://github.com/stac-extensions/single-file-stac)
- Eager caching and re-hydration with [React-Query](https://github.com/stac-extensions/single-file-stac)
- Loading data from the filesystem for server side use
- Baking a catalog into an app to save preloading.

## Using TsSTAC

```ts
import STAC from "tsstac"
import fetcher from "tsstac/reference-fetch"

// Create a STAC store
// This will be in charge of loading data, and mapping from loaded URLs
// to STAC catalogs, collections, and items
const stac_store = STAC(fetch=fetcher)

// Here we're loading up the catalog for landsat from S3,
// but we are choosing to delay loading child links
// until later rather than walking the whole catalog on load
const landsat_catalog = await stac_store.get_catalog("https://landsat-stac.s3.amazonaws.com/catalog.json", walk=false)

// We can quickly view the structure of a catalog (or other STAC objects)
// by describing them
console.log(await landsat_catalog.describe(depth=2))
```
npm package: @gulibs/prosemirror-plugin-autowrap
Description: prosemirror自动换行
Author: HectorGu
Latest version: 1.0.5

# prosemirror-plugin-placeholder

> Prosemirror自动换行功能插件，用户输入自动换行，插入block元素自动换行。

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

## Install

```bash
npm install --save @gulibs/prosemirror-plugin-autowrap
```

or

```bash
yarn add @gulibs/prosemirror-plugin-autowrap
```

## Usage

使用React组件库 `@gulibs/react-prosemirror-editor-x` 

```tsx
import React from 'react';
import { Card } from 'antd';
import { ProseMirrorEditor, EditorToolBar } from '@gulibs/react-prosemirror-editor-x';
import { autoWrap } from '@gulibs/prosemirror-plugin-autowrap';

class Example extends React.Component {
    render() {
        return (
            <ProseMirrorEditor
                config={{
                    schema,
                    plugins: [
                        autoWrap()
                    ]
                }}
                autoFocus
                onRender={({ editor }) => (
                    <Card
                    type="inner"
                    bordered={false}
                    >
                    <EditorToolBar menus={menus} />
                    {editor}
                    </Card>
                )}
                >
            </ProseMirrorEditor>
        )
    }
}
```

官方使用

```tsx
import { schema } from 'prosemirror-schema-basic';
import { EditorView } from 'prosemirror-view';
import { EditorState } from 'prosemirror-state';
import { autoWrap } from '@gulibs/prosemirror-plugin-autowrap';

const editorView = new EditorView(undefined, {
    state: EditorState.create({
        schema,
        plugins: plugins ? plugins : [
            autoWrap()
        ],
        ...restConfig
    })
    dispatchTransaction: (tr) => {
        const { state, transactions } = this.view.state.applyTransaction(tr);
        this.view.updateState(state);
        if (transactions.some(tr => tr.docChanged)) {
            onChange && onChange(state.doc);
        }
        this.forceUpdate();
    }
});

```

## License

MIT © [AnizGu](https://github.com/AnizGu)
npm package: @gulibs/prosemirror-plugin-headings
Description: Prosemirror插件,添加了几种heading nodes
Author: HectorGu
Latest version: 1.0.1

# prosemirror-plugin-headings

> Prosemirror插件,添加了几种heading nodes

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

## Install

```bash
npm install --save @gulibs/prosemirror-plugin-headings
```

or

```bash
yarn add @gulibs/prosemirror-plugin-headings
```

## Usage

挂载插件

```tsx
import React, { Component } from 'react'
import { headings } from '@gulibs/prosemirror-plugin-headings'

class Example extends Component {
  render() {
    return (
        <ProseMirrorEditor
            config={{
                schema,
                plugins: [
                    ...
                    // 添加插件
                    headings(),
            ]}}
            autoFocus
            onRender={({ editor }) => (
                <Card type="inner" bordered={false}>
                    <EditorToolBar menus={menus} />
                    {editor}
                </Card>
            )}
        />
    )
  }
}
```

在`nodes.ts`文件中添加 heading nodes

```tsx
import { nodes } from 'prosemirror-schema-basic'
import { arrowRightHeading, centerLineHeading, decimalHeading } from '@gulibs/prosemirror-plugin-headings';

export default {
    ...nodes,
    arrowRightHeading,
    centerLineHeading,
    decimalHeading
}

```

`menus.tsx`

```tsx
// 导入blockDecimal命令
import { blockDecimal } from '@gulibs/prosemirror-plugin-headings';

// 按钮
const headingSelect = {
    selectHeading: {
            tooltips: {
                title: '标题',
                placement: 'bottom'
            },
            icon: Icons.heading,
            showDropdown: true,
            children: [
                {
                    title: '标题样式-1',
                    active: blockActive(schema.nodes.arrowRightHeading),
                    enable: setBlockType(schema.nodes.arrowRightHeading),
                    run: setBlockType(schema.nodes.arrowRightHeading)
                },
                {
                    title: '标题样式-2',
                    active: blockActive(schema.nodes.centerLineHeading),
                    enable: setBlockType(schema.nodes.centerLineHeading),
                    run: setBlockType(schema.nodes.centerLineHeading)
                },
                {
                    title: 'Decimal样式-3',
                    active: blockActive(schema.nodes.decimalHeading),
                    enable: setBlockType(schema.nodes.decimalHeading),
                    run: blockDecimal(schema)
                }
            ]
        }
    }
```

## License

MIT © [AnizGu](https://github.com/AnizGu)
npm package: @gulibs/prosemirror-plugin-placeholder
Description: prosemirror编辑器的placeholder插件
Author: HectorGu
Latest version: 1.0.8

# prosemirror-plugin-placeholder

> Prosemirror插件，增加placeholder功能

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

## Install

```bash
npm install --save @gulibs/prosemirror-plugin-placeholder
```
or
```bash
yarn add @gulibs/prosemirror-plugin-placeholder
```

## Usage

如果不知道怎么添加插件可以查看官网文档。示例代码是根据

```tsx
import React from 'react';
import { Card } from 'antd';
import { ProseMirrorEditor, EditorToolBar } from '@gulibs/react-prosemirror-editor-x';
import { placeholder } from '@gulibs/prosemirror-plugin-placeholder';

class Example extends React.Component {
    render() {
        return (
            <ProseMirrorEditor
                config={{
                    schema,
                    plugins: [
                        placeholder()
                    ]
                }}
                autoFocus
                onRender={({ editor }) => (
                    <Card
                    type="inner"
                    bordered={false}
                    >
                    <EditorToolBar menus={menus} />
                    {editor}
                    </Card>
                )}
                >
            </ProseMirrorEditor>
        )
    }
}
```

## License

MIT © [AnizGu](https://github.com/AnizGu)
npm package: @gulibs/prosemirror-plugin-style-headings
Description: Prosemirror插件,添加了几种heading nodes
Author: HectorGu
Latest version: 1.1.4

# prosemirror-plugin-style-heading

> Prosemirror插件,添加了几种heading nodes

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

## Install

```bash
npm install --save @gulibs/prosemirror-plugin-style-heading
```

or

```bash
yarn add @gulibs/prosemirror-plugin-style-heading
```

## Usage

挂载插件

```tsx
import React, { Component } from 'react'
import { headings } from '@gulibs/prosemirror-plugin-style-heading'

class Example extends Component {
  render() {
    return (
        <ProseMirrorEditor
            config={{
                schema,
                plugins: [
                    ...
                    // 添加插件
                    headings(),
            ]}}
            autoFocus
            onRender={({ editor }) => (
                <Card type="inner" bordered={false}>
                    <EditorToolBar menus={menus} />
                    {editor}
                </Card>
            )}
        />
    )
  }
}
```

在`nodes.ts`文件中添加 heading nodes

```tsx
import { nodes } from 'prosemirror-schema-basic'
import { arrowRightHeading, centerLineHeading, decimalHeading } from '@gulibs/prosemirror-plugin-style-headings';

export default {
    ...nodes,
    arrowRightHeading,
    centerLineHeading,
    decimalHeading
}

```

`menus.tsx`

```tsx
// 导入blockDecimal命令
import { blockDecimal } from '@gulibs/prosemirror-plugin-style-headings';

// 按钮
const headingSelect = {
    selectHeading: {
            tooltips: {
                title: '标题',
                placement: 'bottom'
            },
            icon: Icons.heading,
            showDropdown: true,
            children: [
                {
                    title: '标题样式-1',
                    active: blockActive(schema.nodes.arrowRightHeading),
                    enable: setBlockType(schema.nodes.arrowRightHeading),
                    run: setBlockType(schema.nodes.arrowRightHeading)
                },
                {
                    title: '标题样式-2',
                    active: blockActive(schema.nodes.centerLineHeading),
                    enable: setBlockType(schema.nodes.centerLineHeading),
                    run: setBlockType(schema.nodes.centerLineHeading)
                },
                {
                    title: 'Decimal样式-3',
                    active: blockActive(schema.nodes.decimalHeading),
                    enable: setBlockType(schema.nodes.decimalHeading),
                    run: blockDecimal(schema)
                }
            ]
        }
    }
```

## License

MIT © [AnizGu](https://github.com/AnizGu)
npm package: @gulibs/tegg-chromadb
Description: [![NPM version][npm-image]][npm-url] [![Test coverage][codecov-image]][codecov-url] [![Known Vulnerabilities][snyk-image]][snyk-url] [![npm download][download-image]][download-url]
Author: HectorGu
Latest version: 0.0.11

# @eggjs/tegg-chromadb

[![NPM version][npm-image]][npm-url]
[![Test coverage][codecov-image]][codecov-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-chromadb.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@eggjs/tegg-chromadb
[codecov-image]: https://img.shields.io/codecov/c/github/eggjs/tegg-chromadb.svg?style=flat-square
[codecov-url]: https://codecov.io/github/eggjs/tegg-chromadb?branch=master
[snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-chromadb/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-chromadb
[download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-chromadb.svg?style=flat-square
[download-url]: https://npmjs.org/package/@eggjs/tegg-chromadb

<!--
Description here.
-->

## Install

```bash
npm i @eggjs/tegg-chromadb
```

## Usage

```js
// {app_root}/config/plugin.js
exports.teggChromadb = {
  enable: true,
  package: '@eggjs/tegg-chromadb',
};
```

## Configuration

```js
// {app_root}/config/config.default.js
exports.teggChromadb = {
};
```

see [src/config/config.default.ts](src/config/config.default.ts) for more detail.

## Example

<!-- example here -->

## Questions & Suggestions

Please open an issue [here](https://github.com/eggjs/egg/issues).

## License

[MIT](LICENSE)

## Contributors

[![Contributors](https://contrib.rocks/image?repo=eggjs/tegg-chromadb)](https://github.com/eggjs/tegg-chromadb/graphs/contributors)

Made with [contributors-img](https://contrib.rocks).
npm package: @gulibs/tegg-mp
Description: Wechat mp plugin for egg
Author: HectorGu
Latest version: 0.0.1

# egg-tegg-mp

[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/egg-tegg-mp.svg?style=flat-square
[npm-url]: https://npmjs.org/package/egg-tegg-mp
[travis-image]: https://img.shields.io/travis/eggjs/egg-tegg-mp.svg?style=flat-square
[travis-url]: https://travis-ci.org/eggjs/egg-tegg-mp
[codecov-image]: https://img.shields.io/codecov/c/github/eggjs/egg-tegg-mp.svg?style=flat-square
[codecov-url]: https://codecov.io/github/eggjs/egg-tegg-mp?branch=master
[david-image]: https://img.shields.io/david/eggjs/egg-tegg-mp.svg?style=flat-square
[david-url]: https://david-dm.org/eggjs/egg-tegg-mp
[snyk-image]: https://snyk.io/test/npm/egg-tegg-mp/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/egg-tegg-mp
[download-image]: https://img.shields.io/npm/dm/egg-tegg-mp.svg?style=flat-square
[download-url]: https://npmjs.org/package/egg-tegg-mp

<!--
Description here.
-->

## Install

```bash
$ npm i egg-tegg-mp --save
```

## Usage

```js
// {app_root}/config/plugin.js
exports.teggMp = {
  enable: true,
  package: 'egg-tegg-mp',
};
```

## Configuration

```js
// {app_root}/config/config.default.js
exports.teggMp = {
};
```

see [config/config.default.js](config/config.default.js) for more detail.

## Example

<!-- example here -->

## Questions & Suggestions

Please open an issue [here](https://github.com/eggjs/egg/issues).

## License

[MIT](LICENSE)
npm package: @gulibs/tegg-wss
Description: WebSocket plugin for egg
Author: HectorGu
Latest version: 0.0.8

# TEGG wss Plugin
> tegg的Websocket插件

[![NPM](https://img.shields.io/npm/v/@gulibs/tegg-wss.svg)](https://www.npmjs.com/package/tegg-wss)

## 安装

```bash
npm install --save @gulibs/tegg-wss
```

**or**

```bash
yarn add @gulibs/tegg-wss
```
### 使用和配置

* `config.default.ts`

```typescript
const config = {
    wss: {
      options: {
        noServer: true
        // host: '127.0.0.1',
        // port: 9100
      },
      heartbeat: { // 开启心跳功能
        ms: 30000, //执行间隔时间
        logging: true //打印日志
      },
      namespace: {
        "/chat": {
          middleware: ['auth', 'chat']
        }
      }
    },
} as PowerPartial<EggAppConfig>;
```

* `plugin.ts`

```typescript
teggWebsocket: {
    enable: true,
    package: "@gulibs/tegg-wss"
}
```

* 中间件配置

创建`/app/wss/middleware`，然后在`/app/wss/middleware`目录创建中间件`.ts`文件.

### 所有配置

```typescript
interface TeggWssHeartbeat {
    ms?: number;
    logging?: boolean;
}

interface TeggWssConfig {
    options: ServerOptions;
    heartbeat?: TeggWssHeartbeat;
    generateClient?: (data: TeggWssRawFields) => TeggWssClient; //自定义client
    namespace: Record<string, TeggWssMiddleware>;
}

interface Application {
    wss: EggWebSocketServer;
    clientManager: ClientManager;
    currentClient: TeggWssClient;
}

interface EggAppConfig {
    wss: TeggWssConfig;
}
```
npm package: @gulibs/use-callback-state-hook
Description: > 带回调的useState
Latest version: 0.0.2

# React useState upgrade version
> 带回调的useState

[![NPM](https://img.shields.io/npm/v/@gulibs/use-callback-state-hook.svg)](https://www.npmjs.com/package/use-callback-state-hook)

## 安装

```bash
npm install --save @gulibs/use-callback-state-hook
```

**or**

```bash
yarn add @gulibs/use-callback-state-hook
```
### 使用

```javascript
import React, { useState } from 'react';
import reactLogo from './assets/react.svg';
import { useCallbackState } from '@gulibs/use-callback-state-hook';
import './App.css'

const App = () => {

  const [isWait, setWait] = useState(false);
  const [count, setCount] = useCallbackState(0);

  return (
    <div className="App">
      <div>
        <a href="https://reactjs.org" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>
      <h1>React useCallbackState</h1>
      <div className="card">
        <button
          disabled={isWait}
          onClick={() => {
            setWait(true);
            setCount((count) => count + 1, newCount => {
              setTimeout(() => {
                alert("3秒后调用回调结果:" + newCount);
                setWait(false);
              }, 3000);
            });
          }}
        >
          {isWait ? '等待3秒...' : `count is ${count}`}
        </button>
        <p>
          Edit <code>example/App.tsx</code> and save to test HMR
        </p>
      </div>
    </div>
  );
}
export default App
```
npm package: @gulibs/video-content-block
Description: React video block component with poster, duration, and optional download restriction
Latest version: 0.0.1

# video-content-block

React 视频内容块组件：标题、封面图、时长展示，基于 `react-player` 与 `styled-components`，支持自动解析时长与禁止下载选项。

## 安装

```bash
pnpm add @gulibs/video-content-block react react-dom react-player styled-components
# 或
npm i @gulibs/video-content-block react react-dom react-player styled-components
```

## 依赖

- `react` >= 18
- `react-dom` >= 18
- `react-player` >= 3
- `styled-components` >= 6

## 使用

```tsx
import { VideoContentBlock, type VideoContentBlockProps } from "video-content-block";

<VideoContentBlock
  videoId={1}
  title="视频标题"
  url="https://example.com/video.mp4"
  thumbnail="https://example.com/poster.jpg"
  duration="1:30"
  disableDownload
  onPlay={(id) => {}}
  onStop={() => {}}
/>
```

## Props

| 属性 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `videoId` | number | 是 | 视频唯一 ID，用于单播控制 |
| `title` | string | 是 | 标题 |
| `url` | string | 是 | 视频地址 |
| `duration` | string | 否 | 时长展示（如 "1:30"），为空时从元数据自动解析 |
| `thumbnail` | string | 否 | 封面图 URL |
| `videoSrc` | string | 否 | 实际播放地址，不传则用 `url` |
| `isPlaying` | boolean | 否 | 受控播放状态（单视频模式） |
| `disableDownload` | boolean | 否 | 禁止下载：隐藏下载按钮、禁用右键与画中画 |
| `onPlay` | (videoId: number) => void | 否 | 开始播放回调 |
| `onStop` | () => void | 否 | 停止播放回调 |

## 本地开发（当前仓库）

在项目根目录：

```bash
cd video-content-block
pnpm install
pnpm build
```

根项目通过 `"video-content-block": "file:./video-content-block"` 引用本地包，安装依赖后即可使用。

## License

MIT
npm package: @gulibs/wechat-official-link-splicing
Description: CLI: 输入公众号文章链接，解析或拉取得到 __biz，拼接并输出公众号关注页链接
Latest version: 0.0.1

# @gulibs/wechat-official-link-splicing

根据公众号文章或相关链接，解析或拉取得到 `__biz`（与浏览器控制台中的 `window.biz` 一致），拼接并输出公众号关注页链接的 Node 命令行工具。使用 TypeScript 编写。

## 要求

- Node.js >= 18（使用原生 `fetch`）

## 安装与构建

```bash
npm install
npm run build
npm link
# 或全局安装
npm i -g .
```

## 用法

```bash
wechat-follow-link "<公众号文章或相关链接>"
```

或使用 npx（无需安装）：

```bash
npx @gulibs/wechat-official-link-splicing "https://mp.weixin.qq.com/s?__biz=MzA4MzEwODEyOA==&mid=..."
```

### 参数

- **位置参数**：一条公众号文章链接或相关链接。支持：
  - 带 `__biz` 的完整文章链接（如 `https://mp.weixin.qq.com/s?__biz=xxx&mid=...`）
  - 短链（如 `https://mp.weixin.qq.com/s/xxx`），工具会请求该链接并从最终 URL 或页面内容中提取 `__biz`
- **`--no-fetch`**：仅从当前 URL 解析 `__biz`，不请求页面。若 URL 中无 `__biz` 则直接报错。

### 输出

- **成功**：向 stdout 输出一行，即拼接后的关注页链接，例如：
  ```text
  https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA4MzEwODEyOA==#wechat_redirect
  ```
- **失败**：错误信息输出到 stderr，进程退出码为 1。

## 说明

- 关注页链接**仅在微信客户端内打开**有效，在普通浏览器中可能无法正常使用。
- 若链接为短链或未带 `__biz`，工具会请求该页面，从源码中提取与控制台一致的 biz：优先匹配页面 script 里的 `var biz = ""||"xxx"` 和 `window.biz = "xxx"`，再匹配 `__biz=` 或最终重定向 URL 中的 `__biz`。

## License

MIT
npm package: @gulibs/wx-f2
Description: 解决@antv/wx-f2不能平移的问题
Author: gujiwen
Latest version: 1.0.4

# @gulibs/wx-f2组件

解决@antv/wx-f2不能平移的问题

## 简介

* 支持@antv/f2功能
* 解决@antv/wx-f2不能平移的问题

## 使用

### 安装依赖：

```
npm install @gulibs/wx-f2
```

1.打开json文件，引入组件

```json
{
  "usingComponents": {
    "f2": "@gulibs/wx-f2"
  }
}
```

2.wxml 使用组件

```xml
<view class="container">
  <f2 class="f2-chart" onInit="{{onInitChart}}" />
</view>
```

3.wxss 设置宽高

```css
.f2-chart {
  width: 100%;
  height: 500rpx;
}
```

4.实例化图表

```javascript
Page({
  data: {
    onInitChart: null
  },
  onLoad: function () {
    let that = this;
    wx.request({
      url: 'https://gw.alipayobjects.com/os/antfincdn/Jpuku6k%24q%24/linear-pan.json',
      success(res) {
        const data = res.data
        that.setData({
          onInitChart: (F2, config) => that.renderChart(F2, config, data)
        });
      }
    })
  },
  renderChart(F2, config, data) {
    const chart = new F2.Chart(config);
    chart.source(data, {
      release: {
        min: 1990,
        max: 2010
      }
    });
    chart.tooltip({
      showCrosshairs: true,
      showItemMarker: false,
      background: {
        radius: 2,
        fill: '#1890FF',
        padding: [3, 5]
      },
      nameStyle: {
        fill: '#fff'
      },
      onShow: function onShow(ev) {
        const items = ev.items;
        items[0].name = items[0].title;
      }
    });
    chart.line().position('release*count');
    chart.point().position('release*count').style({
      lineWidth: 1,
      stroke: '#fff'
    });

    chart.interaction('pan');
    // 定义进度条
    chart.scrollBar({
      mode: 'x',
      xStyle: {
        offsetY: -5
      }
    });

    // 绘制 tag
    chart.guide().tag({
      position: [1969, 1344],
      withPoint: false,
      content: '1,344',
      limitInPlot: true,
      offsetX: 5,
      direct: 'cr'
    });
    chart.render();
    // 注意：需要把chart return 出来
    return chart;
  }

});
```
npm package: @gulibs/wx-select
Description: 简单好用的微信小程序select组件
Author: gujiwen
Latest version: 1.0.2

# @gulibs/wx-select组件

简单好用的微信小程序select组件

## 简介

因为找不到好用的select组件，所以自己写了一个

##属性

| 属性 | 类型 | 默认值 | 必填 | 说明 |
|:-:|:-:|:-:|:-:|---|
| options | array | [] | 是 | 数据源 |
| show-duration | number | 200 | 否 | 显示选项时间 |
| hide-duration | number | 200 | 否 | 隐藏选项时间 | 
| id-key | string | 'id'| 否 | 修改数据源哪个字段对应id字段 |
| value-key | string | 'value'| 否 | 修改数据源那个字段对应vlaue字段 |
| bind:change | eventhandle |  | 否 | 用户选择时，会返回对应的选项数据e.detail |

## 使用

### 安装：

```
npm install @gulibs/wx-select
```

**打开json文件，引入组件**

```json
{
  "usingComponents": {
    "select": "@gulibs/wx-select"
  }
}
```

**wxml 使用组件**

```xml
<view class="container" catchtap="close">
    <view class="select-wrap">
        <select id="select" options="{{options}}" id-key="city_id" value-key="city_name" bind:change="change" show-duration="350" hide-duration="350"></select>
    </view>
</view>
```

**wxss 添加样式**

```css
page {
    height: 100%;
}

.select-wrap {
    width: 300rpx;
}

.selected {
    margin-top: 50%;
}

.container {
    display: flex;
    justify-content: center;
    height: 100%;
}
```

**4.示例代码**

```javascript
Page({
    data: {
        __comps__: {
            select: null
        },
        options: [{
            city_id: '001',
            city_name: '北京'
        }, {
            city_id: '002',
            city_name: '上海'
        }, {
            city_id: '003',
            city_name: '深圳'
        }],
    },
    onReady() {
        this.data.__comps__.select = this.selectComponent("#select");
    },
    change(e) {
        console.log("change", e.detail)
    },
    close() {
        this.data.__comps__.select.hide();
    }
})
```
npm package: @gullerya/callout
Description: callout engine
Author: Guller Yuri
Latest version: 1.2.0

[![GitHub](https://img.shields.io/github/license/gullerya/callout.svg)](https://github.com/gullerya/callout)
[![npm](https://img.shields.io/npm/v/@gullerya/callout.svg?label=npm%20@gullerya/callout)](https://www.npmjs.com/package/@gullerya/callout)
[![Travis](https://travis-ci.org/gullerya/callout.svg?branch=master)](https://travis-ci.org/gullerya/callout)
[![Codecov](https://img.shields.io/codecov/c/github/gullerya/callout/master.svg)](https://codecov.io/gh/gullerya/callout/branch/master)
[![Codacy](https://img.shields.io/codacy/grade/a3879d7077eb4eef83a591733ad7c579.svg?logo=codacy)](https://www.codacy.com/app/gullerya/callout)

# Summary

__`callout`__ provides an engine to run call out flows on the web pages

![](./docs/callout-flow-example.gif)

Main aspects:
* uses [@gullerya/spotlight](https://www.npmjs.com/package/@gullerya/spotlight) for the visual spotlighting and [@gullerya/tooltip](https://www.npmjs.com/package/@gullerya/tooltip) for the textual/content hints
* simple single API recieves an Array of entries, each one having the target element and it's description, and runs the flow
* no HTML touches needed for integration, yet it is responsibility of the hosting application to collect and order the elements to call out over

#### Support matrix: ![CHROME](https://github.com/gullerya/callout/raw/master/docs/browser_icons/chrome.png)<sub>61+</sub> | ![FIREFOX](https://github.com/gullerya/callout/raw/master/docs/browser_icons/firefox.png)<sub>60+</sub> | ![EDGE](https://github.com/gullerya/callout/raw/master/docs/browser_icons/edge.png)<sub>16+</sub>

#### Last versions (full changelog is [here](https://github.com/gullerya/callout/blob/master/docs/changelog.md))

* __1.1.1__
  * implemented [Issue #3](https://github.com/gullerya/callout/issues/3) - in RTL pages the management strip layout remains the same
  * implemented [Issue #4](https://github.com/gullerya/callout/issues/4) - shadow of the spotlight is darker now
  * implemented [Issue #5](https://github.com/gullerya/callout/issues/5) - template, document-fragment and plain text are all handled correctly and verified
  * implemented [Issue #6](https://github.com/gullerya/callout/issues/6) - entry definition supports order and shape; `callout` will perform the correct ordering, while all unordered entries will be pushed to the end

* __1.0.0__
  * implemented [Issue #1](https://github.com/gullerya/callout/issues/1) - support for a keyboard navigation
  * implemented [Issue #2](https://github.com/gullerya/callout/issues/2) - added hint for which slide of how many the user is located on

* __0.1.0__
  * initial take

TODO
npm package: @gullerya/just-test
Description: JavaScript multiplatform tests runner
Author: Guller Yuri
Latest version: 4.0.17

[![npm version](https://img.shields.io/npm/v/@gullerya/just-test.svg?label=npm)](https://www.npmjs.com/package/@gullerya/just-test)
[![License GitHub](https://img.shields.io/github/license/gullerya/just-test.svg)](https://opensource.org/licenses/MIT)

[![Quality pipeline](https://github.com/gullerya/just-test/actions/workflows/quality.yml/badge.svg?branch=main)](https://github.com/gullerya/just-test/actions/workflows/quality.yml)
[![Codecov](https://codecov.io/gh/gullerya/just-test/branch/main/graph/badge.svg?token=gq1k48NawB)](https://codecov.io/gh/gullerya/just-test)

[![Codacy](https://img.shields.io/codacy/grade/9aa34b1cf3c248fea0164e71137dce1c.svg?logo=codacy)](https://www.codacy.com/app/gullerya/just-test)

# Summary

`just-test` is an all JS platforms oriented test runner strongly opinionated about testing practices, libraries, frameworks and components.

TODO

#### Highlights:

- running tests in __browser__, no server needed, import/link your code (static files) and just test, literally __TDD__ oriented
- __re-running__ any test in browser ad-hoc - convenient for debugging and developing on the fly
- friendly __UI__ on top of the page of the tests, allows immediatelly observe the behavior of the code and the test
- running tests from __NodeJS__ via headless browser (chromium, firefox, webkit) to run in __CI/CD automation__
- generating __test results__ report (types: __xUnit__)
- collecting __coverage__ and generating report (types: __lcov__)
- flexible yet simple ability to run tests in __sync__ as well as __async__ (default) manner
- in general, a lot of attention was paid to create __simple and usable__ framework even for a not-so-simple cases, like asynchronous tests etc

> Attention: the doc below is still in construction, more updates and detailed one will be published very soon!!!
> Meanwhile, the best way to actually see how the library should be used is it look onto its own tests in `tests` folder, and for CI/CD case - `travis.yml` is a good start.

# CI readiness

TODO - move to features
* run your tests in CI in the following browsers: Chromium (covering all based upon), Firefox, WebKit
* test report types: `xUnit`
* coverage report types: `lcov`

# Examples

TODO

# API

TODO
npm package: @gullerya/tooltip
Description: tooltip component & services
Author: Guller Yuri
Latest version: 1.1.1

[![GitHub](https://img.shields.io/github/license/gullerya/tooltip.svg)](https://github.com/gullerya/tooltip)
[![npm](https://img.shields.io/npm/v/@gullerya/tooltip.svg?label=npm%20@gullerya/tooltip)](https://www.npmjs.com/package/@gullerya/tooltip)
[![Travis](https://travis-ci.org/gullerya/tooltip.svg?branch=master)](https://travis-ci.org/gullerya/tooltip)
[![Codecov](https://img.shields.io/codecov/c/github/gullerya/tooltip/master.svg)](https://codecov.io/gh/gullerya/tooltip/branch/master)
[![Codacy](https://img.shields.io/codacy/grade/b65fedb3a16b4873b6448b9cc3f5b2ac.svg?logo=codacy)](https://www.codacy.com/app/gullerya/tooltip)

# Summary

__`tooltip`__ provides a tooltip component and supporting services/APIs

#### Last versions (full changelog is [here](https://github.com/gullerya/tooltip/blob/master/docs/changelog.md))

* __1.0.1__
  * implemented [Issue #3](https://github.com/gullerya/tooltip/issues/2) - support `disabled` functionality

* __0.3.1__
  * fixed [Issue #2](https://github.com/gullerya/tooltip/issues/2) - NPE caused tooltip to not show up in some scenarios

* __0.1.0__
  * initial take

# Usage

TBD

# API

TBD
npm package: @gulls/modal
Description: Elegant Seagulls adaptation of react-modal + styled components
Latest version: 1.0.0-canary.1

# @gulls/modal

```bash
yarn add @gulls/modal react-modal zustand
```

### Demo
https://codesandbox.io/s/gullsmodal-8d9zm

### Peer Dependencies
- React >= 16.8
- React >= 16.8
- [react-modal](https://www.npmjs.com/package/react-modal)
- [zustand](https://www.npmjs.com/package/zustand)

### Modal

|Prop	        | Type              | Default    | Info                                |
|---	        |---	              |---	       |---                                  |
|appElement   |string             |`#next`     |ID of element where react is mounted |
|className    |string             |`undefined` |                                     |

```jsx
import Modal from '@gulls/modal';

const StyledModal = styled(Modal)`
  .Overlay {
    z-index: 100;
    display: flex;
    justify-content: center;
    align-items: center;
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: rgba(0, 0, 0, 0.75);
    padding: 200px;
  }

  .Modal {
    position: relative;
    width: 100%;
    padding-bottom: 56.25%;
    border: 0;
    outline: none;
    background-color: #fff;
  }
`;
```

### Hooks

|	                    | Type              | Default  | Info                                                                              |
|---	                |---	              |---	     |---                                                                                |
|modalOpen            |string, boolean    |`false`   | Modal open or closed. `false` or the modal name that was passed to `toggleModal`  |
|toggleModal          |function           |          | Pass the modal name/ID. Sets value of `modalOpen`. If no arguments are passed `modalOpen = false` |

```jsx
import { useModal } from "@gulls/modal";

const MyComponent = () => {
  const { modalOpen, toggleModal } = useModal();

  return (
    <button
      onClick={() => { toggleModal('demo');}}
    >
      open modal
    </button>
  )
}
```

### Helpers

**youTubeID**

```jsx
import { useModal, youTubeID } from "@gulls/modal";

const MyComponent = () => {
  const { modalOpen, toggleModal } = useModal();
  const youTube = youTubeID("https://www.youtube.com/watch?v=dQw4w9WgXcQ");

  return (
    <button
      onClick={() => { toggleModal(youtube);}}
    >
      open YouTube modal
    </button>
  )
}
```
npm package: @gulls/stylelint-config
Description: Elegant Seagulls stylelint rules
Author: Elegant Seagulls
Latest version: 0.1.4

# @gulls/stylelint-config

```bash
# install
yarn add @gulls/stylelint-config

# create config file
touch .stylelintrc
```

#### Styled Components:
```
{
  "extends": [
    "@gulls/stylelint-config/styled-components"
  ]
}
```
npm package: @gulou123/renderers-vixen-parser
Description: Renders Yellowstone Account and Instruction Parsers
Latest version: 1.3.0

# 构建
修改版本号

在根目录执行
```
pnpm build
```

# 发布
登录
```
npm login
```
发布
```
cd packages/renderers-vixen-parser
pnpm publish --access public --no-git-checks
```
npm package: @gulp-plugin/alias
Description: Use Gulp to resolve Typescript path aliases during compilation.
Author: David Katz
Latest version: 2.2.2

# @gulp-plugin/alias ![npm (custom registry)](https://img.shields.io/npm/v/@gulp-plugin/alias?logo=npm) [![GitHub Package Registry version](https://img.shields.io/github/release/gulp-plugin/alias.svg?label=gpr&logo=github)](https://github.com/gulp-plugin/alias/packages/896973)


[![Build](https://github.com/dhkatz/gulp-ts-alias/actions/workflows/node.js.yml/badge.svg)](https://github.com/dhkatz/gulp-ts-alias/actions/workflows/node.js.yml)
[![Coverage Status](https://coveralls.io/repos/github/dhkatz/gulp-ts-alias/badge.svg?branch=master)](https://coveralls.io/github/dhkatz/gulp-ts-alias?branch=master) [![dependencies Status](https://david-dm.org/gulp-plugin/alias/status.svg)](https://david-dm.org/gulp-plugin/alias)

Resolve TypeScript import aliases and paths defined in `tsconfig`.

## Install

`npm install --save-dev @gulp-plugin/alias`

## Information

### Features

* Supports all import types: `import`, `require`, `await import()`
* Supports wild card aliases

### Motivation

There have been previous attempts at releasing Gulp plugins that accomplish something similar, but all have become unmaintained.

For legacy’s sake, here is a list of previous packages/scripts that have been considered:

[gulp-ts-paths](https://www.npmjs.com/package/gulp-ts-paths)

[path-alias-resolver](https://gist.github.com/azarus/f369ee2ab0283ba0793b0ccf0e9ec590)

**Note:** Imports within multiline comments may also be replaced.

## Usage

```javascript
const typescript = require('gulp-typescript');
const sourcemaps = require('gulp-sourcemaps');
const alias = require('@gulp-plugin/alias');

const { config } = typescript.createProject('tsconfig.json');

function build() {
  const compiled = src('./src/**/*.ts')
    .pipe(alias(config))
    // or .pipe(alias('tsconfig.json'))
    // or even .pipe(alias())
    .pipe(sourcemaps.init())
    .pipe(project());

  return compiled.js
    .pipe(sourcemaps.write({ sourceRoot: file => path.relative(path.join(file.cwd, file.path), file.base) }))
    .pipe(dest('build/'))
}
```

## Example

The following configuration is common in `tsconfig` configuration files

```json
{
  "rootDir": "./src",
  "baseUrl": ".",
  "paths": {
    "@/*": ["src/*"]
  }
}
```

In practice, these path aliases are often used in this fashion

Input:

```typescript
import express from 'express';

import A from './file'; // Normal relative import

// Aliased import, resolves to some relative path to rootDir
import B from '@/components';
```

Output:

```typescript
import express from 'express';

import A from './file';

// gulp-ts-alias finds the correct relative path
// and replaces it before compilation
import B from '../../components';
```
npm package: @gulp-plugin/collect
Description: Register every file that has passed through a gulp stream.
Author: David Katz
Latest version: 1.0.4

# @gulp-plugin/collect ![npm (custom registry)](https://img.shields.io/npm/v/@gulp-plugin/collect?logo=npm) [![GitHub Package Registry version](https://img.shields.io/github/release/gulp-plugin/collect.svg?label=gpr&logo=github)](https://github.com/gulp-plugin/collect/packages/)

[![Build](https://github.com/gulp-plugin/collect/actions/workflows/node.js.yml/badge.svg)](https://github.com/gulp-plugin/collect/actions/workflows/node.js.yml)  [![Coverage Status](https://coveralls.io/repos/github/gulp-plugin/collect/badge.svg?branch=master)](https://coveralls.io/github/gulp-plugin/collect?branch=master) [![dependencies Status](https://david-dm.org/gulp-plugin/collect/status.svg)](https://david-dm.org/gulp-plugin/collect)

A JavaScript/TypeScript file gathering plugin for [gulp](https://github.com/gulpjs/gulp)

## Installation

```shell
npm install --save-dev @gulp-plugin/collect
```

## Usage

Then, add it to your `gulpfile.js`:

```typescript
const collect = require('@gulp-plugin/collect');

gulp.src('src/**/*.ts')
	.pipe(collect('typescript'))
	.pipe(gulp.dest('dist/'));

gulp.src('src/**/*.js')
  .pipe(collect('javascript'))
  .pipe(gulp.dest('dist/'));

const files = filenames.get('typescript') // ['a.ts','b.ts']
```

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details