open-index/open-npm huggingface dataset:
npm package: @idle-observer/vue2
Description: Vue 2 Composition API wrapper for idle-observer.
Author: Anthony Bergen
Latest version: 0.2.0

# IdleObserver Vue 2

Vue 2 integration for the robust idle-observer core. Detects user idleness in your Vue 2 apps, even with browser timer throttling.

## Features

- Timestamp-based idle detection (robust against timer throttling)
- All core options: `onIdle`, `onActive`, `onIdleWarning`, `activityEvents`, `idleWarningDuration`
- Pause, resume, reset, destroy methods
- `isIdle` and `isUserIdle` state
- Works with both Options API and Composition API

## Installation

```bash
npm install @idle-observer/vue2
# or
pnpm add @idle-observer/vue2
```

## Options API Usage

```js
import { createIdleObserver } from 'idle-observer/vue2'

export default {
  data() {
    return {
      isIdle: false,
      lastActive: new Date(),
      isUserIdle: false
    }
  },
  mounted() {
    createIdleObserver(this, {
      timeout: 60000,
      onIdle: () => {
        this.isIdle = true
      },
      onActive: () => {
        this.isIdle = false
      },
      onIdleWarning: () => {
        /* ... */
      },
      activityEvents: ['mousemove', 'keydown'],
      idleWarningDuration: 10000
    })
  },
  beforeDestroy() {
    this._idleObserver?.destroy()
  }
}
```

## Composition API Usage

```js
import { useIdleObserver } from 'idle-observer/vue2'

export default {
  setup() {
    const { isIdle, isUserIdle, pause, resume, reset, destroy } = useIdleObserver({
      timeout: 60000,
      onIdle: () => {
        /* ... */
      },
      onActive: () => {
        /* ... */
      },
      onIdleWarning: () => {
        /* ... */
      },
      activityEvents: ['mousemove', 'keydown'],
      idleWarningDuration: 10000
    })
    return { isIdle, isUserIdle, pause, resume, reset, destroy }
  }
}
```

## API

See [core README](../core/README.md) for full option and method details.
npm package: @idle-observer/vue3
Description: Vue 3 wrapper for idle-observer using Composition API.
Author: Anthony Bergen
Latest version: 0.2.0

# IdleObserver Vue 3

Vue 3 integration for the robust idle-observer core. Detects user idleness in your Vue 3 apps, even with browser timer throttling.

## Features

- Timestamp-based idle detection (robust against timer throttling)
- All core options: `onIdle`, `onActive`, `onIdleWarning`, `activityEvents`, `idleWarningDuration`
- Pause, resume, reset, destroy methods
- `isIdle` and `isUserIdle` state
- Works with the Vue 3 Composition API

## Installation

```bash
npm install @idle-observer/vue3
# or
pnpm add @idle-observer/vue3
```

## Usage (Composition API)

```js
import { useIdleObserver } from '@idle-observer/vue3'

export default {
  setup() {
    const { isIdle, isUserIdle, pause, resume, reset, destroy } = useIdleObserver({
      timeout: 60000,
      onIdle: () => {
        /* ... */
      },
      onActive: () => {
        /* ... */
      },
      onIdleWarning: () => {
        /* ... */
      },
      activityEvents: ['mousemove', 'keydown'],
      idleWarningDuration: 10000
    })
    return { isIdle, isUserIdle, pause, resume, reset, destroy }
  }
}
```

## API

See [core README](../core/README.md) for full option and method details.
npm package: @idleaustralia/air-datepicker
Description: Lightweight customizable cross-browser jQuery datepicker, built with es5 and css-flexbox. Works in all modern desktop and mobile browsers (tested no Android 4.4+ and iOS8+) ![air datepicker image](https://github.com/t1m0n/air-datepicker/raw/master/docs/i
Author: t1m0n
Latest version: 2.3.0
npm package: @idleberg/configs
Description: A collection of configuration files for my own projects
Author: Jan T. Sott
Latest version: 0.4.2

# @idleberg/configs

[![License](https://img.shields.io/github/license/idleberg/configs?color=blue&style=for-the-badge)](https://github.com/idleberg/configs/blob/main/LICENSE)
[![Version](https://img.shields.io/npm/v/@idleberg/configs?style=for-the-badge)](https://www.npmjs.org/package/@idleberg/configs)
[![CI](https://img.shields.io/github/actions/workflow/status/idleberg/configs/ci.yml?logo=nodedotjs&logoColor=white&style=for-the-badge)](https://github.com/idleberg/configs/actions/workflows/ci.yml)

A collection of configuration files for my own projects.

## Configurations

### biome

```jsonc
{
	"extends": ["@idleberg/configs/biome"]
}
```

Requires `public-hoist-pattern[]=*@biomejs/biome*` in your `.npmrc` file.

### lefthook

```toml
[[remotes]]
git_url = "https://github.com/idleberg/configs"
ref = "v0.4.2"
configs = [
	"lefthook/biome.toml",
	"lefthook/commitlint.toml",
	"lefthook/e18e.toml"
]
```

This requires `public-hoist-pattern` for some dependencies enabled in the `.npmrc` file:

```rc
public-hoist-pattern[]=*@biomejs/biome*
public-hoist-pattern[]=*@e18e/cli*
public-hoist-pattern[]=*@total-typescript/tsconfig*
public-hoist-pattern[]=*lefthook*
```

### nix

To add the Nix flake to an existing project, run the following command:

```sh
nix flake init --template "github:idleberg/configs"
```

To launch the development shell, run `nix develop`.

### tsc

```json
{
	"extends": "@idleberg/configs/tsc"
}
```
npm package: @idleberg/hashman
Description: CLI to calculate multiple checksums at once
Author: Jan T. Sott
Latest version: 0.3.2

# @idleberg/hashman

> CLI to calculate multiple checksums at once.

[![License](https://img.shields.io/github/license/idleberg/hashman?color=blue&style=for-the-badge)](https://github.com/idleberg/hashman/blob/main/LICENSE)
[![Version: npm](https://img.shields.io/npm/v/@idleberg/hashman?style=for-the-badge)](https://www.npmjs.org/package/@idleberg/hashman)
![GitHub branch check runs](https://img.shields.io/github/check-runs/idleberg/hashman/main?style=for-the-badge)

Here's a tool that I personally use a lot. It concurrently calculates checksums of a file in a variety of formats. Supports Adler-32, CRC32, CRC32C, CRC64, MD4, MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3-224, SHA3-256, SHA3-384, and SHA3-512.

![Screenshot](resources/screenshot.png)

The name is inspired by [Hashman Deejay](https://futuretimes.bandcamp.com/album/sandopolis), whose music I love listening to while creating things.

## Installation 💿

> [!TIP]
>
> For single time use it's sufficient to run `npx @idleberg/hashman` rather than to install it.

```shell
npm install --global @idleberg/hashman
```

## Usage 🚀

```shell
npx hashman --all "Hashman Deejay - Sandopolis.zip"
```

See `npx hashman --help` for all available options.

## License ©️

This work is licensed under [The MIT License](LICENSE).
npm package: @idleberg/local-storage
Description: A NodeJS ponyfill for the Storage API, utilizing SQLite
Author: Jan T. Sott
Latest version: 1.0.4

# @idleberg/local-storage

> A NodeJS ponyfill for the Storage API, utilizing SQLite.

[![License](https://img.shields.io/github/license/idleberg/node-local-storage?color=blue&style=for-the-badge)](https://github.com/idleberg/node-local-storage/blob/main/LICENSE)
[![Version](https://img.shields.io/npm/v/@idleberg/local-storage?style=for-the-badge)](https://www.npmjs.org/package/@idleberg/local-storage)
![GitHub branch check runs](https://img.shields.io/github/check-runs/idleberg/node-local-storage/main?style=for-the-badge)

## Features

-   zero dependencies
-   fully API compatible to both, `localStorage` and `sessionStorage`
-   persists data across sessions
-   supports `storage` events
-   supports optional quota

> [!NOTE]
> This module depends on the experimental `node:sqlite` module included in NodeJS v22.5 and later.

## Installation

`npm install @idleberg/local-storage`

## Usage

### API

#### `createStorage`

Usage: `createStorage(dbFile?: string, options?: StorageFactoryOptions)`  
Returns: `{ sessionStorage, localStorage, emitter }`

Creates instances of both, [`sessionStorage`][] and [`localStorage`][], as well as a corresponding EventEmitter.

**Example:**

```typescript
import { createStorage } from "@idleberg/local-storage";

const { sessionStorage, localStorage, emitter } = createStorage("./db.sqlite");

// Listen for storage changes
emitter.on("storage", console.log);
```

##### Options

###### `options.quota`

#### `Storage` (Advanced Usage)

Usage: `new Storage(filePath: string | ':memory:', options: StorageClassOptions)`

This class is used internally by the above factory functions. It allows you more control over the EventEmitter, e.g. you could re-use an existing one from your application code.

**Example:**

```typescript
import { Storage } from "@idleberg/local-storage";
import EventEmitter from "events";

const myEmitter = new EventEmitter();

const localStorage = new Storage("./db.sqlite", {
    emitter: myEmitter,
});

// Listen for storage changes
myEmitter.on("storage", console.log);
```

##### Options

###### `options.emitter`

An instance of `EventEmitter` to use for dispatching storage events.

###### `options.eventName`

The name of the event to dispatch when a storage event occurs. Defaults to `storage`.

###### `options.quota`

Optional storage quota in bytes, useful for emulating browser behaviour.

## Related

-   [bun-storage](https://www.npmjs.com/package/bun-storage): a Bun implementation of this package

## License

This work is licensed under [The MIT License](https://opensource.org/licenses/MIT).

[`localStorage`]: https://developer.mozilla.org/docs/Web/API/Window/localStorage
[`sessionStorage`]: https://developer.mozilla.org/docs/Web/API/Window/sessionStorage
npm package: @idleberg/vite-plugin-devcert
Description: A Vite plugin to generate trusted SSL/TLS certificates for local development
Author: Jan T. Sott
Latest version: 0.5.3

# @idleberg/vite-plugin-devcert

> A Vite plugin to generate trusted SSL/TLS certificates for local development.

[![License](https://img.shields.io/github/license/idleberg/vite-plugin-devcert?color=blue&style=for-the-badge)](https://github.com/idleberg/vite-plugin-devcert/blob/main/LICENSE)
[![Version: npm](https://img.shields.io/npm/v/@idleberg/vite-plugin-devcert?style=for-the-badge)](https://www.npmjs.org/package/@idleberg/vite-plugin-devcert)
[![Version: jsr](https://img.shields.io/jsr/v/@idleberg/vite-plugin-devcert?style=for-the-badge)](https://jsr.io/@idleberg/vite-plugin-devcert)
![GitHub branch check runs](https://img.shields.io/github/check-runs/idleberg/vite-plugin-devcert/main?style=for-the-badge)


> [!IMPORTANT]
> 
> This plugin is based on [`@expo/devcert`](https://www.npmjs.com/package/@expo/devcert), an actively maintained fork of `devcert`. Read about [how it works](https://github.com/expo/devcert/#how-it-works) and [its implications on security](https://github.com/expo/devcert/#security-concerns).

## Installation 💿

On NodeJS or Bun, install from npm:

```shell
npm install @idleberg/vite-plugin-devcert
```

On Deno you will likely want to use JSR:

```shell
deno add jsr:@idleberg/vite-plugin-devcert
```

## Usage 🚀

```javascript
import { defineConfig } from "vite";
import devcert from "@idleberg/vite-plugin-devcert";

export default defineConfig({
	plugins: [devcert()],
});
```

### API ⚙️

`devcert(options?)`

### Options

#### `options.skipHostsFile`

If `certutil` is not installed already (for updating NSS databases; e.g. Firefox), do not attempt to install it. [Read the Expo documentation for more](https://github.com/expo/devcert#skiphostsfile).

#### `options.skipCertutil`

Do not update your systems host file with the domain name of the certificate. [Read the Expo documentation for more](https://github.com/expo/devcert#skipcertutil).

#### `options.hideInfoBox`

Hide the info box displayed at startup.

## Related 👫

If this project is not for you, maybe these alternatives suit you better:

- [vite-plugin-basic-ssl](https://www.npmjs.com/package/@vitejs/plugin-basic-ssl)
- [vite-plugin-mkcert](https://www.npmjs.com/package/vite-plugin-mkcert)

## License ©️

This work is licensed under [The MIT License](LICENSE).
npm package: @idleberg/yeoman-generator
Description: An opinionated drop-in replacement for Yeoman generators, using modern libraries
Author: Jan T. Sott
Latest version: 0.2.0

# @idleberg/yeoman-generator

[![License](https://img.shields.io/github/license/idleberg/yeoman-generator?color=blue&style=for-the-badge)](https://github.com/idleberg/yeoman-generator/blob/main/LICENSE)
[![Version: npm](https://img.shields.io/npm/v/@idleberg/yeoman-generator?style=for-the-badge)](https://www.npmjs.org/package/@idleberg/yeoman-generator)
![GitHub branch check runs](https://img.shields.io/github/check-runs/idleberg/yeoman-generator/main?style=for-the-badge)

An opinionated drop-in replacement for Yeoman generators, using modern libraries.

**Features**

- uses [Clack][Clack] for prompting
- uses [ETA][Eta] as template engine

## Installation 💿

```shell
npm i @idleberg/yeoman-generator
```

## Usage 🚀

**Example**

```typescript
import { Generator } from '@idleberg/yeoman-generator';

export default class extends Generator {
	async prompting() {
		this.clack.intro('Welcome to the generator!');

		const answers = await this.prompt([
			{
				type: 'text',
				name: 'name',
				message: 'What is your name?',
				placeholder: 'John Appleseed',
				validate: (value) => {
					if (value.length < 2) return 'Name must be at least 2 characters';
					return undefined;
				},
			},
		]);

		this.answers = answers
	}

	async writing() {
		this.fs.copyTpl(this.templatePath('index.eta'), this.destinationPath('index.html'), {
			...this.answers,
		});
	}
}
```

### API ⚙️

> [!IMPORTANT]
>
> While these generators aim at API-compatibility, you still need to be aware of the subtle differences in the ETA template engine. See [ETA vs EJS](https://eta.js.org/docs/2.x.x/about/eta-vs-ejs) for details.

#### `Generator`

For new generators, it's recommended to import the `Generator` class. Except for the prompts, it follows the default Yeoman generator API. Refer to the [Clack docs][Clack] on how to use prompts.

```typescript
import { Generator } from '@idleberg/yeoman-generator';

export default class extends Generator {}
```

#### `GeneratorCompat`

For existing generators, you might want to use `GeneratorCompat` class. It also uses Clack for prompts, but adheres to the default prompting API, [Inquirer]. Take note of the [known limitations](https://github.com/idleberg/yeoman-adapter-clack#limitations-%EF%B8%8F).

```typescript
import { GeneratorCompat } from '@idleberg/yeoman-generator';

export default class extends GeneratorCompat {}
```

#### Clack Prompts API

For your convenience, the full [prompts API][Clack] is exposed via the class property `this.clack`.

## Related 👫

- [yeoman-adapter-clack](https://www.npmjs.com/package/yeoman-adapter-clack)

## License ©️

This work is licensed under [The MIT License](LICENSE).

[Clack]: https://bomb.sh/docs/clack/packages/prompts/
[Eta]: https://eta.js.org/
[Inquirer]: https://github.com/SBoudrias/Inquirer.js
npm package: @idlebox/cli
Description: 统合包: * [@idlebox/args](../args) * [@idlebox/cli-help-builder](../builder) * [@idlebox/logger](../logger) * [@idlebox/source-map-support](../support)
Author: GongT
Latest version: 0.0.17

# cli tools

统合包:
* [@idlebox/args](../args)
* [@idlebox/cli-help-builder](../builder)
* [@idlebox/logger](../logger)
* [@idlebox/source-map-support](../support)

### Usage

### dynamic

```ts
import { makeApplication } from '@idlebox/cli';

await makeApplication('some-cli', 'a tool for better life')
	.dynamic(import.meta.dirname, 'commands/**/*.command.js');
```

### static

1. generate static file:
```bash
pnpx @idlebox/cli-static-generator 'src/commands/*.ts'
```

@see [example usage](../../@build-script/package-tools/src/main.ts)
npm package: @idlebox/dependency-graph
Description: * 运行（启动）状态管理 * 可以用于调试的信息输出 * 添加节点无顺序要求 * 节点状态标记
Author: GongT
Latest version: 0.0.24

# wrapper around [dependency-graph](https://www.npmjs.com/package/dependency-graph)

### 功能

* 运行（启动）状态管理
* 可以用于调试的信息输出
* 添加节点无顺序要求
* 节点状态标记


### 基础依赖关系图

```typescript

```

### 运行依赖关系图

```typescript
import { JobGraphBuilder, Job } from '@idlebox/dependency-graph';

class CleanJob extends Job {
	async override async _execute() {}
}
class BuildJob extends Job {
	async override async _execute() {}
}
class PublishJob extends Job {
	async override async _execute() {}
}

const graph = new JobGraphBuilder();
graph.addNode(new CleanJob("清理", []));
graph.addNode(new BuildJob("编译", ["清理"]));
graph.addNode(new PublishJob("发布", ["编译"]));

await graph.startup();
```
npm package: @idlebox/ensure-symlink
Description: ensure symbol link exists, and content (target) is what you want.
Author: GongT
Latest version: 1.0.43

# ensure-symlink

Ensure symbol link exists, and content (target) is what you want.

ensureLinkTarget(targetFile, symlinkFile);
ensureLinkTargetSync(targetFile, symlinkFile);
npm package: @idlebox/esbuild-executer
Description: A simple script to execute typescript file during development.
Author: GongT
Latest version: 0.0.19

# 一个小脚本，用来在开发时执行typescript代码

**需要 Node.js >= 18.19.0**

#### 使用
```js
let exports;
try {
	// 首先尝试加载编译好的代码
	exports = await import('../dist/index.js');
} catch (e) {
	if (e.code === 'ERR_MODULE_NOT_FOUND') {
		// 如果没有，则使用esbuild编译
		const { importFile } = await import('@idlebox/esbuild-executer')
		const tsFile = import.meta.resolve("../src/index.ts");
		exports = await importFile(tsFile);
	}
	throw e;
}

export const x = exports.x;
```

### 当然也可以无条件使用esbuild

```js
import { importFile } from '@idlebox/esbuild-executer'
const tsFile = import.meta.resolve("../src/index.ts");
const exports = await importFile(tsFile)

export const x = exports.x;
```

#### 原理
1. 注册加载器 ([Customization Hooks](https://nodejs.org/api/module.html#customization-hooks))
2. 使用esbuild将ts文件编译成js
3. 产生临时（虚拟）路径并`import()`

#### 和其他加载器（如ts-node、swc）的区别
这个脚本在运行esbuild时使用了“bundle=true”，也就是把所有文件一次性打包成一个文件，但不打包node_modules里的任何内容。也不会打包本地软连接的开发包（例如monorepo）。

其他加载器普遍是按需加载的，只有在import语句确实运行的时候才会加载对应的文件。此加载器调用时立刻运行编译，不会等待import语句。


### 其他说明
输入的文件必须是绝对路径，且是fileUrl，而不是路径字符串。例如使用 `import.meta.resolve('./path/to/file.ts')` 来获取。

设置环境变量 `WRITE_COMPILE_RESULT=true` 可以将编译结果写入到文件中，可以检查文件是否正常。（不会运行该文件）     
存在调试器时也会写入编译结果，并且实际运行的也是编译结果文件，而不是从内存运行。

已使用 [source-map-support](https://www.npmjs.com/package/source-map-support) 来支持源映射。    
设置环境变量 `DISABLE_SOURCE_MAP=true`，或者存在调试器时将会禁用源映射。

设置 `DEBUG=executer*` 查看详细调试日志

## API

* importFile
* execute - 和 importFile 完全一样，只是会把 `process.argv[1]` 设置为被执行文件的路径
* dispose - 提前释放资源，默认1s不使用会自动释放
npm package: @idlebox/ignore-edit
Description: api for modify .*ignore files
Author: GongT
Latest version: 0.0.29

# Structured Ignore Files

library to parse/modify ignore files like this:

```ignorefile
### dist files
/dist

### packages
node_modules

### logs
*.log

### temp folders
temp/
/generated-files
*.temp
```

```ts
import { loadFile, saveFile } from '@idlebox/ignore-edit';
const content = loadFile('.gitignore');

content.packages.push('jspm_packages');

content['new section'].push('some/folder');

content['temp folders'].delete('temp/');
content['temp folders'].push('!wanted.temp');

saveFile(content);
```
npm package: @idlebox/json-edit
Description: Edit json file with comments (jsonc), reformat or preserve it's original format.
Author: GongT
Latest version: 0.0.16

# json-edit

A tool for read and write json file **with comments**.

Additional:

-   Insert property at alphabet order, not at last.
-   Re-sort keys (in any order you want).
-   Format file with [prettier](https://prettier.io/).
-   Auto load prettier config (can override with argument).

## Usage
npm package: @idlebox/json-edit-biome
Description: biomejs formatter for @idlebox/json-edit.
Author: GongT
Latest version: 0.0.16

# [biome](https://biomejs.dev/) formatter for [json-edit](https://www.npmjs.com/package/@idlebox/json-edit)


```ts
import { setDefaultFormatter } from '@idlebox/json-edit';
import { BiomeFormatter } from '@idlebox/json-edit-biome';

setDefaultFormatter(BiomeFormatter);
npm package: @idlebox/json-extends-loader
Description: load JSON files with "extends" field
Author: GongT
Latest version: 1.0.36

# json extends loader

读取链式json配置文件。例如：

```json
{
	"extends": "...",
	// ...
}
```

## 用法：

```ts
import { loadInheritedJson } from '@idlebox/json-extends-loader';

const config = loadInheritedJson('src/tsconfig.json', { cwd: __dirname });
```

## 选项（第二个参数）

全部为可选项。

| 参数           | 类型                                                    | 默认值                                                                       | 说明                                                         |
| -------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------ |
| readJsonFile   | `(absPath: string) => any` 即 `IJsonLoader`             | 使用[comment-json](https://www.npmjs.com/package/comment-json)读取并解析文件 | 读取指定文件，你可以通过此函数读取任何内容（如yaml）         |
| cwd            | `string`                                                | `process.cwd()`                                                              | 如果第一个参数是相对路径，则与cwd拼接，否则无影响            |
| extendsField   | `string`                                                | `"extends"`                                                                  | 将"extends"更换为其他字段名                                  |
| nodeResolution | `boolean`                                               | `true`                                                                       | 若为false，则不搜索node_modules，只能继承相对路径            |
| arrayMerge     | `<T>(target: T[], source: T[], options?: Options): T[]` | 后者简单覆盖前者                                                             | 参考[deepmerge](https://www.npmjs.com/package/deepmerge)文档 |

## 额外的工具方法

#### readJsonFile(filePath: string): any

使用[comment-json](https://www.npmjs.com/package/comment-json)读取并解析json文件。

这是readJsonFile选项的默认值。


#### createDynamicReader(processor: IProcess): IJsonLoader

```ts
interface IProcess {
	(file: string, data: any): void;
}
```

返回一个函数，可用于`readJsonFile`选项。你可以在此回调中修改`data`。

### const tsconfigReader: IJsonLoader

预定义的loader，可作为`readJsonFile`选项使用。

为加载`tsconfig.json`优化

- 解析许多与路径相关的选项。例如 outDir、rootDir

### class NotFoundError

错误对象
npm package: @idlebox/logger
Description: A simple logger module for my self use (nodejs).
Author: GongT
Latest version: 0.0.27

# 日志工具

## 全局logger对象
```ts
import { logger, createRootLogger } from "@idlebox/logger";

createRootLogger('myapp'); // 如果tag为空，则不受“DEBUG”环境变量控制，无条件显示；DEBUG_LEVEL仍然生效
logger.log`debug message`;
```

## 模块logger对象
```ts
import { createLogger } from "@idlebox/logger";

const logger = createLogger('myapp:module');
logger.log`debug message`;
```

### 环境变量

|环境变量|描述|默认值|
|:---|:---|:---|
|DEBUG|调试模式，格式类似“模块1,模块2,模块3”，也可以用空格。底层调用[debug](https://www.npmjs.com/package/debug)包实现判断 |``|
|DEBUG_LEVEL|日志级别(verbose, debug, info, "", warn, error)|``|
|NO_COLOR|禁用颜色，任何非空的值都为真|``|
|NODE_DISABLE_COLORS|同上，但只支持“1”|0|
|FORCE_COLOR|强制启用颜色，任何非空的值都为真|``|

注意: 如果命令行存在`--verbose`、`-d, --debug`参数，会覆盖`DEBUG_LEVEL`环境变量，两个`-d`=`--verbose`，不支持`-v`。

### 可用命令

```ts
const veryLongString = "This is a very long string that might be truncated in logs";
logger.log`don't truncate: long<${veryLongString}>`;
```

|命令|描述|
|:---|:---|
|long|不要省略超长字符串、数组|
|inspect| 使用util.inspect()来格式化对象 |
|stripe| 单行显示（转义回车等字符） |
|list|以列表形式展示，要求参数为Iterable对象，且结果为`string`或`[string, string]`（也可以是实现`toString()`的对象）|
|commandline|优化显示命令行参数|
|relative|路径转换为相对于当前工作目录|
|printable|删除非可打印字符（序列）|
npm package: @idlebox/node-ignore-edit
Description: api for modify .*ignore files
Author: GongT
Latest version: 0.0.18
Deprecated: renamed to @idlebox/ignore-edit

# Structured Ignore Files

library to parse/modify ignore files like this:

```ignorefile
### dist files
/dist

### packages
node_modules

### logs
*.log

### temp folders
temp/
/generated-files
*.temp
```

```ts
import { loadFile, saveFile } from '@idlebox/node-ignore-edit';
const content = loadFile('.gitignore');

content.packages.push('jspm_packages');

content['new section'].push('some/folder');

content['temp folders'].delete('temp/');
content['temp folders'].push('!wanted.temp');

saveFile(content);
```
npm package: @idlebox/node-json-edit
Description: Edit json file with comments (jsonc), reformat or preserve it's original format.
Latest version: 2.0.37
Deprecated: renamed to @idlebox/json-edit

# node-json-edit

A tool for read and write json file **with comments**.

Additional:

-   Insert property at alphabet order, not at last.
-   Re-sort keys (in any order you want).
-   Format file with [prettier](https://prettier.io/).
-   Auto load prettier config (can override with argument).

## Usage
npm package: @idlebox/source-map-support
Description: 如果没有设置options，那么以下情况跳过加载: * `inspector.url()` 返回非空 * execArgv（或者 NODE_OPTIONS）包含“--inspect”、“--inspect-brk”、“--enable-source-maps” * DISABLE_SOURCE_MAP 非空
Author: GongT
Latest version: 0.0.23

# 分情况加载 [source-map-support](https://www.npmjs.com/package/source-map-support)

如果没有设置options，那么以下情况跳过加载:
* `inspector.url()` 返回非空
* execArgv（或者 NODE_OPTIONS）包含“--inspect”、“--inspect-brk”、“--enable-source-maps”
* DISABLE_SOURCE_MAP 非空

其余情况下 `install()` 就是 `source-map-support` 的导出

### usage

```ts
import { install } from '@idlebox/source-map-support';
install();

// ... or ...
import '@idlebox/source-map-support/register';
```
npm package: @idlebox/unshare
Description: use unshare
Author: GongT
Latest version: 0.0.14

# unshare

[unshare](https://man7.org/linux/man-pages/man1/unshare.1.html) 是一个可以在**修改过的环境中**运行程序的工具。新运行的程序将与系统的其余部分隔离。

这个包中提供了几个实用的 unshare 命令的封装
npm package: @idlework/compare
Description: Primitive set of functions to compare boolean, string, or number.
Author: Johan Haneveld
Latest version: 1.1.0

# Compare

Primitive set of functions to compare boolean, string, or number.

## Installation

```sh
npm install @idlework/compare --save
yarn add @idlework/compare
```

## Usage

```javascript
import {
  equal,
  greaterThan,
  greaterThanOrEqual,
  lessThan,
  lessThanOrEqual,
} from "@idlework/compare"
// or
import * as compare from "@idlework/compare"
// or
const {
  equal,
  greaterThan,
  greaterThanOrEqual,
  lessThan,
  lessThanOrEqual,
} = require("@idlework/compare")
// or
const compare = require("@idlework/compare")

// supported types for equal are boolean, string, number, object, and array.
const isEqual = equal(true, true)
const isEqual = equal("a", "a")
const isEqual = equal(1, 1)
const isEqual = equal(obj, obj)
const isEqual = equal(arr, arr)

// other compare functions, these work best with boolean, string, and number.
const isGreaterThan = greaterThan(2, 1)
const isGreaterThanOrEqual = greaterThanOrEqual(2, 1)
const isLessThan = lessThan(2, 1)
const isLesserThanOrEqual = lessThanOrEqual(2, 1)
```

## Contributing

Issues are welcome. The best way to report a problem is to reproduce it with a code example.

Pull requests are welcome. If you want to change the API, it's better to discuss it using an issue ticket.

## License

Compare is [MIT licensed](./LICENSE).
npm package: @idlework/dice
Description: A simple dice system in which you indicate the number of dice and how many sides the dice has. After rolling the dice the total is available but also the individual dice from the tray.
Author: Johan Haneveld
Latest version: 1.0.0

# Dice

## Installation
```shell
$ npm i @idlework/dice --save
```

## Usage
```javascript
import Dice from 'dice'

export default class Map extends Dice {
  constructor (dice, faces) {
    super(dice, faces)
  }
}
```

*or*

```javascript
import Dice from 'dice'

const dice = new Dice(2, 6)
```

*or*

```javascript
const Dice = require('dice')
const dice = new Dice(2, 6)
```

## API

### constructor

Intitialize Dice class.

#### Parameters

-   `dice` **[Number][1]** Number corresponding with the amount of dice.
-   `faces` **[Number][1]** Number corresponding with the amount of faces on the dice.

### roll

Roll the dice.

Returns **[Number][1]** Returns the total of all dice.

### clearTray

Clears the tray from dice. Result and tray will be cleared.

### dice

Return the amount of dice.

Returns **[Number][1]** Return the amount of dice.

### faces

Returns the amount of faces on a the dice.

Returns **[Number][1]** Returns the amount of faces on a the dice.

### result

Returns the total of all the dice.

Returns **[Number][1]** Returns the total of all the dice.

### tray

Returns the tray(array) with all the dice.

Returns **[Array][2]** Return an array with all the dice.

[1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number

[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array

## Contributing
Issues are welcome. The best way to report a problem is to reproduce it with a code example.

Pull requests are welcome. If you want to change the API, it's better to discuss it using an issue ticket.

## License

Dice is [MIT licensed](./LICENSE).
npm package: @idliapam/glitch-react
Description: Glitch Bug Reporter — React SDK with state capture, Redux middleware, and Error Boundary
Latest version: 1.2.0

# @glitch-sdk/react

React SDK for Glitch Bug Reporter. Captures component crashes, React state, Redux actions, and React Query failures automatically.

## Install

```bash
npm install @glitch-sdk/react
```

## Quick Start

```tsx
import { GlitchProvider, GlitchErrorBoundary, useGlitchState } from '@glitch-sdk/react';

function App() {
  return (
    <GlitchProvider projectKey="pak_splat_xxx" user={{ id: '123', email: 'user@app.com' }}>
      <GlitchErrorBoundary fallback={<ErrorPage />}>
        <MyApp />
      </GlitchErrorBoundary>
    </GlitchProvider>
  );
}
```

## Track React State

```tsx
function CheckoutPage() {
  const [cart, setCart] = useState([]);
  const [step, setStep] = useState(1);

  // These values are captured on every bug report
  useGlitchState('checkout', { cart, step });

  return <div>...</div>;
}
```

## Redux Middleware

```tsx
import { glitchReduxMiddleware } from '@glitch-sdk/react';

const store = configureStore({
  middleware: (getDefault) => getDefault().concat(
    glitchReduxMiddleware({
      maxActions: 50,
      sanitize: (action) => action.type.includes('auth')
        ? { ...action, payload: '[REDACTED]' }
        : action
    })
  )
});
```

## React Query Plugin

```tsx
import { glitchQueryPlugin } from '@glitch-sdk/react';

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      plugins: [glitchQueryPlugin({ captureFailedQueries: true, captureSlowQueries: 2000 })]
    }
  }
});
```

## Manual Bug Report

```tsx
import { glitch } from '@glitch-sdk/react';

glitch.report({
  title: 'Payment failed',
  severity: 'critical',
  metadata: { orderId: 'ORD-123' }
});
```

## API

| Export | Description |
|---|---|
| `GlitchProvider` | React context provider — wraps your app |
| `GlitchErrorBoundary` | Auto-catches React crashes and reports them |
| `useGlitchState(name, state)` | Registers React state for capture |
| `useGlitch()` | Access the Glitch client in any component |
| `glitch` | Global instance for manual operations |
| `glitchReduxMiddleware(config)` | Redux middleware for action capture |
| `glitchQueryPlugin(config)` | React Query plugin for query failure capture |