open-index/open-npm huggingface dataset:
npm package: @mpiorowski/ts-utils
Description: <p align="center">   <a href="https://github.com/mpiorowski/ts-utils/#readme" target="_blank">     <img width="300" src="./logo.png" alt="TsUtils">   </a> </p>
Author: Mateusz Piórowski
Latest version: 1.0.3

<p align="center">
  <a href="https://github.com/mpiorowski/ts-utils/#readme" target="_blank">
    <img width="300" src="./logo.png" alt="TsUtils">
  </a>
</p>

<p align="center">
  A collection of Typescript utility functions and types.
</p>

<div align="center">

[![npm](https://img.shields.io/github/license/mpiorowski/ts-utils)](https://github.com/mpiorowski/ts-utils/blob/main/LICENSE)
[![npm](https://img.shields.io/npm/v/@mpiorowski/ts-utils)](https://www.npmjs.com/package/@mpiorowski/ts-utils)
[![npm](https://img.shields.io/bundlephobia/min/@mpiorowski/ts-utils)](https://www.npmjs.com/package/@mpiorowski/ts-utils)

</div>

## Functions

- assertIsDefined
- createArray
- searchArray
- checkEnv

## Types

- Optional
npm package: @mpis/client
Description: 将构建开始、成功或失败的事件发送到构建协议服务器。
Author: GongT
Latest version: 0.0.24

# 构建协议客户端接口

将构建开始、成功或失败的事件发送到构建协议服务器。

### API

```ts
import { BuildProtocolClient } from '@mpis/client';

const protocol = BuildProtocolClient();

await protocol.connect().catch((err) => {
	console.error('构建连接失败', err.message);
});
```

### CLI

##### 标准输入模式

> build-protocol-client --stdin [--start <开始>] --finish <完成> [--success <成功>] [--error <错误>]

* `--start` <开始>：可选，匹配行。如果不设置，则完成状态下输出任何内容都认为是开始。flag = iv
* `--finish` <完成>：必须，匹配行，匹配到则发送成功或失败事件。flag = iv
* `--error` <失败>：匹配全部输出，匹配到则认为失败。flag = imv
* `--success` <成功>：匹配全部输出，匹配到则认为成功。flag = imv

全部输出指的是: 从开始（不含）直到本次完成（包含）的输出内容。如果没有 `--start`，则“开始”是从上次完成（不含）。

`--error` 和 `--success` 至少要设置一个

同时匹配或同时没有匹配到 `--error` 和 `--success` 时，优先认定为发生了错误。    
但如果输入被关闭（例如前面的进程结束），则在没有匹配到 `--error` 时候认定为成功。且即使没有匹配到 `--finish`，也会发送完成事件。

所有字符串都是正则表达式，带有flag=`umi`，可以设置对应的 `--xxx-fixed yyyy` ，只进行字符串搜索。

例如：

```bash
tsc -p . -w | \
build-protocol-client --stdin \
	--success "Found 0 errors" \
	--finish "Watching for file changes\\." \
	--start "Starting (incremental)? compilation"
```

##### 运行命令并同时监听stdout和stderr
> build-protocol-client [--start <开始>] --finish <完成> [--success <成功>] [--error <错误>] -- <命令> [<参数>...]

* `--` 必须存在，后面的内容会被认定为命令和参数。
* 其他选项见上方说明
npm package: @mpis/esbuild
Description: [@build-script/build-protocol](https://npmjs.com/package/@build-script/build-protocol) plugin for [esbuild](https://esbuild.github.io/) and [esbuild-problem-matchers](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers)
Author: GongT
Latest version: 0.0.22

# @build-script/build-protocol-esbuild
[@build-script/build-protocol](https://npmjs.com/package/@build-script/build-protocol) plugin for [esbuild](https://esbuild.github.io/) and [esbuild-problem-matchers](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers)

### 使用:

```typescript
/** 这是 esbuild.ts */

// 静态定义
await defineEsbuild('instance-name', {
	entryPoints: {},
	// ... options ...
	plugins: [], // 插件会被自动插入到最后
});

// 动态定义
await defineEsbuild('instance-name', (isDev: boolean) => {
	return {
		entryPoints: {},
		// ... options ...
	};
});
```

`defineEsbuild`实际上返回`BuildContext`，但由于watch和build都已经做了，退出时`esbuild`自己会清理，所以大部分时候都不需要用到。

然后直接运行它，如果process.argv包含-w或--watch，则进入watch模式，否则build一次。
```bash
# BUILD_PROTOCOL_SERVER=node:ipc 
ts-node ./esbuild.ts
```
npm package: @mpis/monorepo
Description: ```bash # 在 monorepo 中任意 package 下安装 # 也可以添加 -g 装到全局（不推荐） pnpm add @mpis/manager
Author: GongT
Latest version: 0.0.26

# monorepo 构建工具

### 使用方法

```bash
# 在 monorepo 中任意 package 下安装
# 也可以添加 -g 装到全局（不推荐）
pnpm add @mpis/manager

# 调用构建或监视
pnpm exec build-manager <build|watch|clean>
```


### 包要求

有 `build` `watch` `clean` 三个脚本。（只有`build`是必须，`watch`默认=`build -w`，`clean`默认什么都不做），如果确实需要跳过，则设置`"build": ""`。

其中的命令必须支持 [构建协议](../shared)
npm package: @mpis/publisher
Description: **将tar包发布到npm前执行脚本（可以用来处理package.json）**
Author: GongT
Latest version: 0.0.23

# pnpm 自定义发布器

**将tar包发布到npm前执行脚本（可以用来处理package.json）**

#### publish 流程
1. 调用 `pnpm run prepublishOnly`
1. 调用 `pnpm pack`
1. 将生成的 tar 包解压到临时目录
   1. 运行 `pnpm run prepublishHook`
   1. 删除`prepublishOnly`、`prepack`等[publish lifecycle](https://docs.npmjs.com/cli/v8/using-npm/scripts#npm-publish)脚本
   1. 调用 `pnpm publish`

#### pack 流程
1. 调用 `pnpm pack`
1. 将生成的 tar 包解压到临时目录
   1. 运行 `pnpm run prepublishHook`
   1. 删除`prepack`等[pack lifecycle](https://docs.npmjs.com/cli/v8/using-npm/scripts#npm-pack)脚本
   1. 调用 `pnpm pack`

#### extract
1. 先运行pack流程
2. 将生成的 tar 包解压到临时目录

#### 使用

修改`package.json`，最好设置`private=true`以防不小心运行`pnpm publish`，并添加`scripts.prepublishHook`。
```json
{
	"private": true,
	"scripts": {
		"prepublishHook": "echo 'Running prepublish hook...'"
	}
}
```

运行

支持一小部分`pack`和`publish`的参数。

```bash
publisher pack [--out xxx.tgz]
publisher publish [--access public] [--dry-run] [--force] [--no-git-checks] [--publish-branch master] [--report-summary] [--tag latest] [--registry https://registry.npmjs.org]
```
npm package: @mpis/run
Description: 简单地按顺序执行一系列外部命令，最终完成项目的构建过程
Author: GongT
Latest version: 0.0.29

# 究极简单的分步构建器

简单地按顺序执行一系列外部命令，最终完成项目的构建过程

为实现watch，所有命令需要支持 [构建协议](../shared)

对于不支持的命令，可以使用 [标准输出监视器 或 客户端API](../client) 快速实现

Path中添加`当前包`和`rig包`的`node_modules/.bin`目录


### 配置: 创建文件`config/commands.json`，内容如下：

```jsonc
{
	/**
	 * 示例文件
	 * 
	 * 文件里可以写注释
	 */
	"$schema": "../node_modules/@mpis/run/commands.schema.json",
	"build": [
		{
			// 也可以写成字符串，但强烈不建议，无法正确处理空格和特殊字符，且额外增加一层shell
			"command": ["codegen", "src"]
		},
		{
			"title": "autoindex",
			"command": {
				// 运行指定包里的指定bin，不会自动安装此包，它必须存在于当前包或rig包的依赖中，此binary必须是js文件
				"package": "@build-script/autoindex",
				// 要执行的bin名字，必须设置。但如果此包的bin字段是字符串，则必须不设置。
				"binary": "autoindex",
				"arguments": ["src"]
			}
		},
		// 可以从 commands 中引用
		"some-common-command",
		{
			// 可选，默认为command的第一个单词，仅用于显示
			"title": "typescript",
			"command": ["mpis-tsc", "-p", "src"],
			// 可选，当调用watch时默认添加 -w 可以换成其他参数代替 -w
			"watch": ["--watch" ]
		},
		{
			"title": "esbuild",
			// 当command第一个元素是 xxx.ts，可以直接执行它，此文件相对于package.json所在路径，同时也会在rig/profile和rig根目录中寻找同名文件
			"command": ["scripts/esbuild.config.ts"],
			// 此命令的工作目录，相对于package.json所在目录
			"cwd": "."
		},
		{
			"title": "esbuild",
			"command": [
				"build-protocol-client",
				"--start=Starting compilation",
				"--finish=Finished compilation",
				"--success=Successfully .*",
				"--error=Failed to .*",
				"--",
				"some-other-command",
				"--some-arg=some-value",
			]
		},
	],
	"commands": {
		  // 可以在此处定义一些常用的命令，供其他命令引用
		"some-common-command": {
			"title": "common command",
			"command": ["some-command", "--arg=value"]
		}
	},
	"clean": [
		"dist",
		"lib",
	]
}
```

### 运行

* 此处的`run`就是本包安装的bin文件名，如果有冲突，也可以用`mpis-run`代替

```bash
pnpm exec run build
pnpm exec run watch
pnpm exec run clean
```

```json
{
	"name": "my-project",
	"version": "1.0.0",
	"scripts": {
		"prepack": "mpis-run build --clean",
		"build": "mpis-run build",
		"watch": "mpis-run watch",
		"clean": "mpis-run clean"
	},
}
```
npm package: @mpis/shared
Description: 这是一个自用协议，规定各种转译、构建启动和完成时发送事件
Author: GongT
Latest version: 0.0.15

# 构建（监视）启动与完成事件标准协议

#### 这是什么
这是一个自用协议，规定各种转译、构建启动和完成时发送事件

#### 为什么
我的项目并没有特别复杂，不希望有一个几十上百万行的屎山来管理我几百行的代码。并且我需要每一个构建步骤都把自己的输出写到硬盘上，以便快速确定到底在哪一步出了问题。

对于非watch模式，这很简单，只需要写一个shell脚本依次运行命令，每个命令本来就会把输出写到硬盘上，哪个命令出错直接退出即可。

但是，更多的时候我需要watch模式。首个出错的信息是最重要的，我需要一个通用的办法在前一步watch出错时抑制后续步骤的运行，所以需要知道它到底成功执行了没有。

于是就有了这个协议。

```json
{
	"__brand__": "BPCM",
	"event": "start", // success failed
	"title": "some-build-command",
	"pid": process.pid,
	// "output": ""
}
```
npm package: @mpis/typescript
Description: wrapper for `tsc -p` with [@mpis/client](https://www.npmjs.com/@mpis/client)
Author: GongT
Latest version: 0.0.25

# mpis-tsc

wrapper for `tsc -p` with [@mpis/client](https://www.npmjs.com/@mpis/client)

unconditionally add --preserveWatchOutput
npm package: @mpjovanovich/dotmark
Description: An unobtrusive syntax for styling markdown.
Author: Mike Jovanovich
Latest version: 1.0.2

# dotmark

Style markdown with an unobtrusive CSS-like syntax.

<!-- prettier-ignore-start -->
```markdown
~#intro.fade-in.left
# Welcome

This markdown stays clean and readable.
/~
```
<!-- prettier-ignore-end -->

↓ Transforms to ↓

```html
<div id="intro" class="fade-in left">
  <h1 id="welcome">Welcome</h1>
  <p>This markdown stays clean and readable.</p>
</div>
```

## Installation

```bash
npm install @mpjovanovich/dotmark
```

## Usage

```typescript
import { parseDotmark } from "@mpjovanovich/dotmark";

const markdown = `
~#section1.highlight
# Section 1

Some content here
/~
`;

const html = await parseDotmark(markdown);
```

## Features

- Add IDs and classes to markdown sections
- GitHub-style heading IDs
- Syntax highlighting for code blocks
- Cleanly formatted HTML output
npm package: @mpjsz/pager
Description: Made with create-react-library
Author: xxccx
Latest version: 0.0.1

# pager

> Made with create-react-library

[![NPM](https://img.shields.io/npm/v/pager.svg)](https://www.npmjs.com/package/pager) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save pager
```

## Usage

```tsx
import React, { Component } from 'react'

import MyComponent from 'pager'
import 'pager/dist/index.css'

class Example extends Component {
  render() {
    return <MyComponent />
  }
}
```

## License

MIT © [wyyufeng](https://github.com/wyyufeng)
npm package: @mpkit/ebus
Description: 提供事件触发、监听等功能
Author: imingyu
Latest version: 1.1.2

# @mpkit/ebus

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/ebus.svg)
[![image](https://img.shields.io/npm/v/@mpkit/ebus.svg)](https://www.npmjs.com/package/@mpkit/ebus)
[![image](https://img.shields.io/npm/dt/@mpkit/ebus.svg)](https://www.npmjs.com/package/@mpkit/ebus)

提供事件触发、监听等功能。

-   `on(type:string, handler:Function)`
-   `off(type:string, handler:Function)`
-   `emit(type:string, data:any)`
-   `EventEmitter`
npm package: @mpkit/inject
Description: 提供小程序环境适用的多种实用函数或组件，如setData优化、Mixin、事件总线等。
Author: imingyu
Latest version: 1.1.2

# @mpkit/inject

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/inject.svg)
[![image](https://img.shields.io/npm/v/@mpkit/inject.svg)](https://www.npmjs.com/package/@mpkit/inject)
[![image](https://img.shields.io/npm/dt/@mpkit/inject.svg)](https://www.npmjs.com/package/@mpkit/inject)

提供小程序环境适用的多种实用函数或组件，如 setData 优化、Mixin、事件总线等。

教程：https://imingyu.github.io/2020/mpkit/

| 方法/变量                                                                  | 作用                                                                                                                                            | 依赖插件 |
| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| `on(eventName:string, handler:Function)`                                   | 为某全局事件添加监听函数                                                                                                                        | ebus     |
| `off(eventName:string, handler:Function)`                                  | 为某全局事件移除监听函数                                                                                                                        | ebus     |
| `emit(eventName:string, data:any)`                                         | 触发某全局事件并传递数据                                                                                                                        | ebus     |
| `App(...mixins:MpAppSpec[]) : MpAppSpec`                                   | 接收多个对象，对象结构与小程序`App`函数接收的对象结构一致，并将这些对象合并，返回一个新对象，包含所有对象的功能和数据，合并策略下文描述。       | mixin    |
| `Page(...mixins:MpPageSpec[]) : MpPageSpec`                                | 接收多个对象，对象结构与小程序`Page`函数接收的对象结构一致，并将这些对象合并，返回一个新对象，包含所有对象的功能和数据，合并策略下文描述。      | mixin    |
| `Component(...mixins:MpComponentSpec[]) : MpComponentSpec`                 | 接收多个对象，对象结构与小程序`Component`函数接收的对象结构一致，并将这些对象合并，返回一个新对象，包含所有对象的功能和数据，合并策略下文描述。 | mixin    |
| `Api`                                                                      | 与小程序上的`wx` `my` `swan` `tt`等对象的属性和方法一致，只不过在其方法上添加了钩子函数，方便拦截处理                                           | mixin    |
| `MixinStore.addHook(type:string, hook:MpMethodHook)`                       | `MpKit`中内置了很多全局钩子函数，方可实现了全局拦截，setData 重写等功能，而如果你也想在全局添加自己的钩子函数，那么可以调用此函数               | mixin    |
| `setData(view:any, data:any, callback:Function) : Promise<DiffDataResult>` | 以优化的方式向某个 Page/Component 设置数据，仅设置变化的数据，并以 Promise 的方式返回 diff 后的数据结果                                         | set-data |
npm package: @mpkit/mpxml-parser
Description: 将小程序模板编译为ast。
Author: imingyu
Latest version: 1.1.2

# @mpkit/view-parser

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/view-parser.svg)
[![image](https://img.shields.io/npm/v/@mpkit/view-parser.svg)](https://www.npmjs.com/package/@mpkit/view-parser)
[![image](https://img.shields.io/npm/dt/@mpkit/view-parser.svg)](https://www.npmjs.com/package/@mpkit/view-parser)

将小程序模板编译为 ast。

TODO:功能待开发
npm package: @mpkit/set-data
Description: 小程序setData优化。
Author: imingyu
Latest version: 1.1.2

# @mpkit/set-data

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/set-data.svg)
[![image](https://img.shields.io/npm/v/@mpkit/set-data.svg)](https://www.npmjs.com/package/@mpkit/set-data)
[![image](https://img.shields.io/npm/dt/@mpkit/set-data.svg)](https://www.npmjs.com/package/@mpkit/set-data)

小程序 setData 优化。

## 功能列表

-   将对象的 key 展开：`openMpData(data:any, view?:MpView)`

```javascript
import { openMpData } from "@mpkit/set-data";
const res = openMpData({
    show: true,
    "list[0].user.name": "Tom",
});
console.log(res);
/*
{
    show: true,
    list:[
        user:{
            name:'Tom'
        }
    ]
}
*/
```

-   对比两个对象，返回对比后的结果：`diffMpData(source:any,target:any)`

```javascript
import { diffMpData } from "@mpkit/set-data";
const res = diffMpData(
    {
        data: 1,
        list: [
            {
                user: {
                    name: "Tom",
                },
            },
            {
                user: {
                    name: "Jeck",
                },
            },
        ],
    },
    {
        data: 2,
        list: [
            {
                user: {
                    name: "Alice",
                    age: 10,
                },
            },
        ],
    }
);
console.log(res);
/*
{
    "data": 2,
    "list[0].user.name": "Alice",
    "list[0].user.age": 10
}
*/
```
npm package: @mpkit/types
Description: mpkit包相关typescript类型
Author: imingyu
Latest version: 1.1.2

# @mpkit/types

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/types.svg)
[![image](https://img.shields.io/npm/v/@mpkit/types.svg)](https://www.npmjs.com/package/@mpkit/types)
[![image](https://img.shields.io/npm/dt/@mpkit/types.svg)](https://www.npmjs.com/package/@mpkit/types)

mpkit 包相关 types
npm package: @mpkit/util
Description: mpkit工具函数库
Author: imingyu
Latest version: 1.1.2

# @mpkit/util

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/util.svg)
[![image](https://img.shields.io/npm/v/@mpkit/util.svg)](https://www.npmjs.com/package/@mpkit/util)
[![image](https://img.shields.io/npm/dt/@mpkit/util.svg)](https://www.npmjs.com/package/@mpkit/util)

mpkit 包相关工具函数
npm package: @mpkit/view-parser
Description: 将小程序模板编译为ast。
Author: imingyu
Latest version: 1.0.10

# @mpkit/view-parser

[![Build Status](https://travis-ci.org/imingyu/mpkit.svg?branch=master)](https://travis-ci.org/imingyu/mpkit)
![image](https://img.shields.io/npm/l/@mpkit/view-parser.svg)
[![image](https://img.shields.io/npm/v/@mpkit/view-parser.svg)](https://www.npmjs.com/package/@mpkit/view-parser)
[![image](https://img.shields.io/npm/dt/@mpkit/view-parser.svg)](https://www.npmjs.com/package/@mpkit/view-parser)

将小程序模板编译为 ast。

TODO:功能待开发
npm package: @mpl-lib/ng2-matomo
Description: Matomo (aka. Piwik) web analytics for Angular applications.
Latest version: 3.0.0

# NgxMatomo

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.

## Code scaffolding

Run `ng generate component component-name --project ngx-matomo` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-matomo`.
> Note: Don't forget to add `--project ngx-matomo` or else it will be added to the default project in your `angular.json` file. 

## Build

Run `ng build ngx-matomo` to build the project. The build artifacts will be stored in the `dist/` directory.

## Publishing

After building your library with `ng build ngx-matomo`, go to the dist folder `cd dist/ngx-matomo` and run `npm publish`.

## Running unit tests

Run `ng test ngx-matomo` to execute the unit tests via [Karma](https://karma-runner.github.io).

## Further help

To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.