# coc-helper

> Helpers for coc.nvim

Latest version **0.16.3** (published 2023-01-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install coc-helper
pnpm add coc-helper
yarn add coc-helper
bun add coc-helper
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; large bundle; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.16.3 |
| Published | 2023-01-26 |
| First published | 2020-08-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 15 MB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 7 |
| Author | Weirong Xu |
| Maintainers | raidou1 |

## Links

- npm: https://www.npmjs.com/package/coc-helper
- Repository: git@github.com:weirongxu/coc-helper
- Homepage: https://github.com/weirongxu/coc-helper
- npm.io page: https://npm.io/package/coc-helper

## Dependencies (2)

- [uuid](https://npm.io/package/uuid.md) ^9.0.0
- [rimraf](https://npm.io/package/rimraf.md) ^3.0.2

## Recent versions

- 0.16.3 (latest) — 2023-01-26
- 0.16.2 — 2023-01-13
- 0.16.1 — 2023-01-13
- 0.16.0 — 2023-01-13
- 0.15.2 — 2022-09-22
- 0.15.1 — 2022-09-13
- 0.15.0 — 2022-09-13
- 0.14.0 — 2022-05-11
- 0.13.0 — 2022-01-17
- 0.12.1 — 2022-01-02
- 0.12.0 — 2021-09-14
- 0.11.1 — 2021-08-09
- 0.11.0 — 2021-08-09
- 0.10.1 — 2021-07-17
- 0.10.0 — 2021-07-16
- … 40 more at https://npm.io/package/coc-helper/versions

## README

# coc-helper

Helpers for coc.nvim

## Used by

- [coc-floatinput](https://github.com/weirongxu/coc-floatinput)
- [coc-explorer](https://github.com/weirongxu/coc-explorer)
- [coc-webview](https://github.com/weirongxu/coc-webview)

## Usage

### activateHelper

- **Note: Only some modules need to call activateHelper, as noted in the documentation below.**

```typescript
import { activateHelper } from 'coc-helper';

export async function activate(context: ExtensionContext) {
  await activateHelper(context);
}
```

### Notifier

Combine the notify of coc.nvim

```typescript
import { Notifier } from 'coc-helper';
import { workspace } from 'coc.nvim';

const { nvim } = workspace;

// create
const callNotifier = Notifier.create(() => {
  nvim.call('func', true);
  nvim.call('func2', true);
});

const callNotifier2 = Notifier.create(() => {
  nvim.call('func3', true);
});

// combine
const callNotifierCombined = callNotifier.concat(callNotifier2);
const callNotifierCombined2 = Notifier.combine([callNotifier, callNotifier2]);

async function fetchNotifier() {
  return callNotifier;
}

// run
await callNotifierCombined.run();
await Notifier.run(fetchNotifier());
await Notifier.runAll([fetchNotifier(), callNotifierCombined]);

// notify
nvim.pauseNotification();
(await fetchNotifier()).notify();
Notifier.notifyAll([callNotifierCombined, callNotifier2]);
callNotifierCombined.notify();
await nvim.resumeNotification();
```

### HelperLogger

Logger with OutputChannel support

```typescript
import { ExtensionContext } from 'coc.nvim';
import { HelperLogger } from 'coc-helper';
const logger = new HelperLogger('extensionChannelName');

// OutputChannel
const channel = logger.outputChannel;

function activate(context: ExtensionContext) {
  // Change level
  logger.level = isDebug ? 'debug' : 'info';
}

async function stuff() {
  logger.info('info');
  logger.warn('info');
  // Log and print error
  logger.error('error');

  logger.prettyPrint({ token: 'xxx', data: 'foo' });

  const [jobReturn, elapsedMilliseconds] = logger.measureTime(async () => {
    return await asyncJobs();
  });

  await helperLogger.measureTask(async () => {
    await asyncJobs();
  }, 'job name');
}
```

### HelperEventEmitter

Typed events emitter

```typescript
import { HelperEventEmitter, HelperLogger } from 'coc-helper';
const logger = new HelperLogger('extensionChannelName');

interface Events {
  foo: (foo: number) => void;
  bar: (bar: string) => Promise<void>;
}

const events = new HelperEventEmitter(logger);
events.on('foo', (foo) => {});
events.fire('foo', 1);
```

### WinLayoutFinder

Find the vim window by `winlayout()`

```typescript
import { WinLayoutFinder } from 'coc-helper';

const winFinder = WinLayoutFinder.create(tabnr);
const leaf = winFinder.find(winid);
// Parent
const parent = leaf.parent;
// Group type, 'col' or 'row'
const parentType = parent.group.type;
// Siblings
const siblings = parent.group.children;
```

### Jest setup and CI

jest.config.json

```javascript
const jest = require('./node_modules/coc-helper/jest.config.js');

module.exports = {
  ...jest,
  // your jest configuration in here
  // clearMocks: true,
  // moduleNameMapper: {
  //   ...jest.moduleNameMapper,
  //   '^lodash-es$': 'lodash',
  // },
};
```

[github ci workflows](./.github/workflows/ci.yml)

---
_Source: https://npm.io/package/coc-helper · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
