open-index/open-npm huggingface dataset:
npm package: @honem/native-video-compressor
Description: Capacitor plugin for video compression using native platform APIs (iOS AVFoundation, Android MediaCodec)
Author: honem
Latest version: 0.2.3

# @honem/native-video-compressor

Capacitor plugin for video compression using native platform APIs.

- **iOS**: AVFoundation with VideoToolbox hardware acceleration
- **Android**: MediaCodec with hardware acceleration

## Installation

```bash
npm install @honem/native-video-compressor
npx cap sync
```

## Usage

```typescript
import { VideoCompressor } from '@honem/native-video-compressor';

try {
  const result = await VideoCompressor.compressVideo({
    inputPath: '/path/to/video.mp4',
    quality: 'medium',
  });

  console.log(result.outputPath);       // Path to compressed file
  console.log(result.compressionRatio); // e.g., 3.5

  // Optional: delete temp file immediately after use
  await VideoCompressor.deleteFile({ path: result.outputPath });
} catch (error) {
  // Handle error (e.g., web platform not supported)
  console.error(error);
}
```

**Note:** This plugin only works on iOS and Android. Calling these functions on web will throw an error, so always wrap calls in try/catch.

## API

### compressVideo(options)

| Option | Type | Required | Description |
|--------|------|----------|-------------|
| `inputPath` | string | Yes | Path to input video |
| `outputPath` | string | No | Output path (temp file if omitted) |
| `quality` | `'low'` \| `'medium'` \| `'high'` \| `'custom'` | No | Default: `'medium'` |
| `bitrate` | number | No | Bitrate in bps (for `'custom'` quality) |
| `width` | number | No | Output width (for `'custom'` quality) |
| `height` | number | No | Output height (for `'custom'` quality) |
| `format` | `'mp4'` \| `'mov'` \| `'m4v'` \| `'3gp'` \| `'webm'` | No | Default: same as input |

**Returns:**

| Property | Type | Description |
|----------|------|-------------|
| `outputPath` | string | Path to compressed file |
| `originalSize` | number | Original size in bytes |
| `compressedSize` | number | Compressed size in bytes |
| `compressionRatio` | number | originalSize / compressedSize |
| `duration` | number | Compression time in ms |

### deleteFile(options)

When `outputPath` is not provided, compressed files are saved to the system temp directory which is automatically cleaned up by the OS. Use `deleteFile()` if you want to delete the file immediately after use.

Deletes a file. 

```typescript
await VideoCompressor.deleteFile({ path: result.outputPath });
```

## Quality Presets

| Preset | Max Resolution | Bitrate |
|--------|---------------|---------|
| `low` | 854x480 | 800 kbps |
| `medium` | 1280x720 | 1.5 Mbps |
| `high` | Original | 8 Mbps |
| `custom` | User-defined | User-defined |

## Platform Requirements

- **iOS**: 15.0+
- **Android**: API 22+ (Android 5.1)
- **Web**: Not supported

## License

MIT
npm package: @honeo/await-event
Description: イベントの発生を待つやつ
Author: honeo
Latest version: 2.0.0

# await-event
* [honeo/await-event](https://github.com/honeo/await-event)  
* [@honeo/await-event](https://www.npmjs.com/package/@honeo/await-event)

## なにこれ
Promiseインスタンスを返し、イベントを一度だけ掴んでresolve(event)する。  
ブラウザ拡張機能のAPIでも動く（といいなと思っている）。

## 使い方
```sh
$ npm i @honeo/await-event
```

### Browser (EventTarget)
```js
import AwaitEvent from '@honeo/await-event';

// or Dynamic import, CDN
const AwaitEvent = await import('https://cdn.rawgit.com/honeo/await-event/master/index.mjs').then( (mod)=>{
	return mod.default;
});



(async function(){
	const event = await AwaitEvent(document.body, 'click', false);
	console.log(event.type); // "click"
}());

document.body.click();
```

### Node.js (EventEmitter)
```js
import AwaitEvent from '@honeo/await-event';
import {EventEmitter} from 'events';

const eventemitter = new EventEmitter();

(async function(){
	const event = await AwaitEvent(eventemitter, 'hoge');
	console.log(event.fuga); // "piyo"
}());

eventemitter.emit('hoge', {fuga: 'piyo'});
```
npm package: @honeo/lru-cache
Description: Map実装のLRU Cache
Author: honeo
Latest version: 1.0.0

# lru-cache
* [honeo/lru-cache](https://github.com/honeo/lru-cache)  
* [@honeo/lru-cache](https://www.npmjs.com/package/@honeo/lru-cache)

## なにこれ
Map実装のかんたんLRU Cacheモジュール。

## 使い方
```bash
$ npm i @honeo/lru-cache
```
```js
const LRUCache = require('@honeo/lru-cache');
const cache = new LRUCache();

cache.set('foo', 'bar');
cache.get('foo'); // "bar"

for(let [key, value] of cache){
	key+value; // "foobar"
}
```

## API
[Map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map)を継承している。

### new LRUCache([option])
インスタンスを作る。
```js
const cache = new LRUCache({
	capacity: 2501,
	expire: 1000*60*60 // 1h
});
```
#### option
|   key    |  type  | default  |    description     |
|:-------- |:------ | -------- | ------------------ |
| capacity | number | Infinity | キャッシュの最大数 |
| expire   | number | Infinity | キャッシュの期限ms |

#### expireについて
Lazy Expiration実装のため、すぐにGCさせたい場合は明示的に#delete()などで要素を削除する必要がある。また#sizeは期限切れの要素を含んだ数を返す。

<!--
### LRUCache#peek(key)
\#get()のキャッシュ順位を更新しない版。
```js
const value = cache.get('hoge');
``` -->

### LRUCache#set(key, value [, expire])
引数1をkeyとして引数2のvalueをキャッシュする。  
自身を返す。
```js
cache.set('hoge', 'hogehoge');

// expire: 1m
cache.set('fuga', 'fugafuga', 1000*60);
```

### LRUCache#capacity
インスタンスの最大キャッシュ数を取得・設定する。
```js
const number = cache.capacity;

// Max: 1000
cache.capacity = 1000;
```

### LRUCache#expire
インスタンスの標準キャッシュ期限を取得・設定する。
```js
const number = cache.expire;

// expire: 1h
cache.expire = 1000*60*60;
```
npm package: @honeo/sleep
Description: よくあるPromiseなsleep関数
Author: honeo
Latest version: 2.2.0

# sleep
* [honeo/sleep](https://github.com/honeo/sleep)
* [@honeo/sleep](https://www.npmjs.com/package/@honeo/sleep)


## なにこれ
よくあるPromiseなsleep関数。


## 使い方
```bash
$ npm i @honeo/sleep
```
```js
// ESM
import sleep from '@honeo/sleep';

// Dynamic import & CDN
const {default: sleep} = await import('https://raw.githack.com/honeo/sleep/master/index.mjs');


await sleep(1000, 'foobar').then( (arg)=>{
	console.log(arg); // after 1sec "foobar"
});
```

## API

### sleep([ms|date [, arg [, options]]])
```js
// 1sec
await sleep(1000);

// promise<"foo">
await sleep(1000, 'foo');

// AbortController
await sleep(1000, 'bar', {
	signal: new AbortController().signal
}).catch( (err)=>{
	console.log(err.message); // "sleep: aborted"
});

// date
const date_after1s = new Date(Date.now()+1000);
await sleep(date_after1s);

// very fucking bad
sleep(1000, null, {
	sync: true
});


// default
sleep(1, undefined, {
	sync: false
});
```


## Breaking Changes

### v2

#### CommonJS
廃止。

#### sleep()
引数1にdefault値を設定。

#### register (Promise.prototype.sleep)
廃止。
npm package: @honeo/test
Description: test module
Author: honeo
Latest version: 3.3.0

# test
* [honeo/test](https://github.com/honeo/test)  
* [@honeo/test](https://www.npmjs.com/package/@honeo/test)


## なにこれ
かんたんテストモジュール。


## 使い方
```sh
$ npm i -D @honeo/test
```
```js
const Test = require('@honeo/test');

await Test([function(){
	return true;
}, function(){
	return new Promise( (resolve, reject)=>{
	    setTimeout(resolve, 1000, true);
	});
}], {
	console: true
});
```


## API

### Test([..callback] [, options])
引数1配列内の関数を失敗するまで順に実行する。  
全ての関数が成功したら解決するpromiseを返す。

#### 成否判定
callbackの返り値が以下の場合は成功とする。
* true
* promise{[[state]]: "fulfilled", [[value]]: true}

#### options
| key          | type     | default | description                                                                    |
|:------------ |:-------- | ------- | ------------------------------------------------------------------------------ |
| chtmpdir     | boolean  | false   | trueなら一時作業ディレクトリを作り、初期化してからinit・テスト関数を実行する。 |
| console      | boolean  | true    | Console表示の有無。                                                            |
| exit         | boolean  | false   | 実行環境がNode.jsならテスト失敗時にプロセスも失敗させる。                      |
| init         | function | null    | 各テスト関数前に実行する初期化用関数。promiseが返れば解決まで待つ。            |
| tmpdirOrigin | string   | null    | 各テスト開始時、実行ディレクトリに中身をコピーするディレクトリのパス。         |
| debug        | boolean  | false   | Consoleにdebug情報を出す。                                                                               |
npm package: @honeo/version-compare
Description: version比較
Author: honeo
Latest version: 1.0.1

# version-compare
* [honeo/version-compare](https://github.com/honeo/version-compare)  
* [@honeo/version-compare](https://www.npmjs.com/package/@honeo/version-compare)

## なにこれ
バージョン文字列を比較するやつ。

## 使い方
```sh
$ npm i -S @honeo/version-compare
```
```js
import versionCompare from '@honeo/version-compare';

versionCompare('2.0.0', '>', '1.0.0');
> true

versionCompare('1.0.0', '<=', '2.0.0');
> true

versionCompare('1.2.3.4', '===', '1.2.3');
> false
```
npm package: @honeo/web-api-polyfill
Description: WebAPIのPolyfill詰め合わせ
Author: honeo
Latest version: 1.1.0

# web-api-polyfill
* [honeo/web-api-polyfill](https://github.com/honeo/web-api-polyfill)
* [@honeo/web-api-polyfill](https://www.npmjs.com/package/@honeo/web-api-polyfill)


## なにこれ
自分で使うWebAPIのPolyfill詰め合わせ。  


## 使い方
Babelを通すとコケるかもしれない。
```sh
$ npm i @honeo/web-api-polyfill
```
```js
require('@honeo/web-api-polyfill');
```


## 参考
* [HTML5 Cross Browser Polyfills · Modernizr/Modernizr Wiki](https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills)
* [Polyfills as a Service](http://polyfills.io/)


## 使ってるやつ

### 自前
document.head  
~~Element.prototype.matches~~ => dom4  
location.origin  
HTMLCollection, NodeListをIterableに。

### BroadcastChannel
* [pubkey/broadcast-channel: BroadcastChannel that works in New Browsers, Old Browsers, WebWorkers and NodeJs](https://github.com/pubkey/broadcast-channel#readme)

### CSS.supports
* [termi/CSS.supports](https://github.com/termi/CSS.supports/)


### DOMParser
* [DOMParser HTML extension - Now a polyfill since HTML parsing was added to the DOMParser specification](https://gist.github.com/eligrey/1129031)

### EventTarget
* [WebReflection/event-target: The EventTarget Class Polyfill.](https://github.com/WebReflection/event-target)


### fetch
* [github/fetch: A window.fetch JavaScript polyfill.](https://github.com/github/fetch)

### dom4
* [WebReflection/dom4](https://github.com/WebReflection/dom4)

DOM Lv.4その他。
#### 不具合
Firefox拡張機能のContentsScript内コンテキストではパーミッションエラーが出て動作しない。
#### ParentNode
ParentNode.prepend(), ParentNode.appnd(), ParentNode.query(), ParentNode.queryAll()
#### ChildNode
ChildNode.before(), ChildNode.after(), ChildNode.replaceWith(), ChildNode.remove()
#### Element
Element#classList, Element#matches(), Element#closest()
#### Event
add,removeEventListener(,,object)
#### Other
~~requestAnimationFrame()~~ => requestAnimationFrame polyfill

### ChildNode
* ~~[JAK/childNode.js at master · seznam/JAK](https://github.com/seznam/JAK/blob/master/lib/polyfills/childNode.js)~~ => dom4

### classList
* ~~[eligrey/classList.js](https://github.com/eligrey/classList.js)~~ => dom4

### requestAnimationFrame
* [requestAnimationFrame polyfill](https://gist.github.com/paulirish/1579671)
 * setTimeout実装、dom4内蔵のものはレガシー環境で止まりやすいため。

### performance.now()
* [performance.now() polyfill (aka perf.now())](https://gist.github.com/paulirish/5438650)

### URL
* [lifaon74/url-polyfill: Polyfill URL and URLSearchParams to match last ES7 specifications](https://github.com/lifaon74/url-polyfill#readme)

### Web Animations API
* [web-animations/web-animations-js](https://github.com/web-animations/web-animations-js)

#### 不具合
* Firefox v~57
    - SDK, WebExtensionsともに、拡張機能のContentsScript内コンテキストではパーミッションエラーが出て動作しない。
* Safari
    - Safari v5.1.7とPolyfill v2.2.2で[TypeError: setting a property that has only a getter]が発生する。
    - Polyfill v2.2.1に固定中。

### XMLHttpRequest, FormData
* [polyfill/xhr.js at master · inexorabletash/polyfill](https://github.com/inexorabletash/polyfill/blob/master/xhr.js)
npm package: @honest-magic/caldav-mcp
Description: MCP server for AI-powered calendar access via CalDAV
Author: honest-magic
Latest version: 0.3.1

# caldav-mcp

MCP server for AI-powered calendar access via CalDAV. Works with Claude Desktop and other MCP clients.

## Features

- List calendars and events across multiple CalDAV accounts
- Create, update, and delete calendar events (with confirmation)
- Check scheduling conflicts (expands recurring events)
- Suggest available time slots with working hours filter
- Parse `.ics` calendar invite files
- OS keychain credential storage (no plaintext secrets)

## Install

### Homebrew (macOS)

```bash
brew tap honest-magic/tap
brew install caldav-mcp
```

### npm

```bash
npm install -g @honest-magic/caldav-mcp
```

### npx (no install)

```bash
npx @honest-magic/caldav-mcp accounts add
```

## Setup

### 1. Add a CalDAV account

```bash
caldav-mcp accounts add
```

Interactive prompts for account ID, server URL, username, and password. Password is stored in your OS keychain. Connection is tested automatically.

**Common server URLs:**
- iCloud: `https://caldav.icloud.com` (use an [app-specific password](https://support.apple.com/en-us/102654))
- Google: `https://apidata.googleusercontent.com/caldav/v2`
- Fastmail: `https://caldav.fastmail.com`
- Nextcloud: `https://your-server.com/remote.php/dav`

### 2. Register with Claude Desktop

```bash
caldav-mcp --install-claude
```

Restart Claude Desktop after running this.

### 3. Verify

```bash
caldav-mcp --validate-accounts
```

## CLI

```
caldav-mcp [options] [command]

Commands:
  accounts add        Add a new CalDAV account (interactive)
  accounts list       List configured accounts
  accounts remove ID  Remove an account

Options:
  --validate-accounts Probe CalDAV connections and exit
  --install-claude    Write caldav-mcp to Claude Desktop config and exit
  --version           Show version number
  -h, --help          Show this help message
```

## MCP Tools

| Tool | Description |
|------|-------------|
| `list_calendars` | List all calendars across accounts |
| `list_events` | List events in a date range (expands recurring) |
| `read_event` | Read full event details |
| `create_event` | Create a new event (requires confirmation) |
| `update_event` | Update an existing event (requires confirmation + etag) |
| `delete_event` | Delete an event (requires confirmation + etag) |
| `check_conflicts` | Check if a time range conflicts with existing events |
| `suggest_slots` | Find available time slots with optional working hours |
| `parse_ics` | Parse raw iCalendar data |
| `register_oauth2_account` | Register a Google/OAuth2 calendar account |

## Requirements

- Node.js >= 18
- A CalDAV-compatible calendar server

## License

MIT
npm package: @honestdev/eslint-config
Description: Configuração do Eslint usada pela honest
Author: renanhangai
Latest version: 0.0.7

# Instalação

Typescript:

```sh
yarn add --dev @honestdev/eslint-config \
	eslint-config-airbnb-typescript \
	eslint-config-prettier \
	eslint-plugin-import \
	eslint-plugin-prettier \
	@typescript-eslint/parser \
	@typescript-eslint/eslint-plugin
```

### `vue-typescript`

```sh
yarn add --dev @honestdev/eslint-config \
	eslint-config-airbnb-typescript \
	eslint-config-prettier \
	eslint-plugin-import \
	eslint-plugin-prettier \
	eslint-plugin-vue \
	@typescript-eslint/parser \
	@typescript-eslint/eslint-plugin
```

```js
module.export = {
	extends: ['@honestdev/eslint-config/vue-typescript'],
	parserOptions: {
		project: 'tsconfig.json',
	},
};
```
npm package: @honestdev/honest-components
Description: Honest Components
Latest version: 0.6.4

# Componentes

## hc-select

- Props:
	- items: `Array|Function` Array de items ou uma função que retorna as opções para o select
	- placeholder: `String` O placeholder para o campo do select
	- cache: `Boolean` Faz o cache da primeira requisição e sempre retorna ela
	- value: `any`
	- disabled: `Boolean`
	
- Exemplo 
```html
<hc-select 
	items="[{ id: 1, text: 'Item1' }, { id: 2, text: 'Item2' }]"
	placeholder="Exemplo de select"
	v-model="myselect" />
```
	
## hc-input-mask: InputMask

- Props:
	- mask: `String|Array` A máscara a ser usada no campo
	- value: `String`
	- `...` Qualquer coisa que vale no elemento input
	
- Exemplo 
```html
<hc-input-mask 
	mask="000.000.000-00"
	v-model="cpf" />
```		
- Funções:
   - `registerMask( name, mask )` Registra uma nova máscara
   - `getMask( name )` Pega a máscara dada pelo nome