# codespan-napi

> Template project for writing node package with napi-rs

Latest version **0.4.0** (published 2022-04-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install codespan-napi
pnpm add codespan-napi
yarn add codespan-napi
bun add codespan-napi
```

## Health

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

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.0 |
| Published | 2022-04-07 |
| First published | 2022-03-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >= 10 |
| Dependencies | 14 |
| Unpacked size | 16.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | IWANABETHATGUY |
| Maintainers | iwanabethatguy |
| Keywords | napi-rs, NAPI, N-API, Rust, node-addon, node-addon-api |

## Links

- npm: https://www.npmjs.com/package/codespan-napi
- Repository: https://github.com/IWANABETHATGUY/codespan-napi
- Homepage: https://github.com/IWANABETHATGUY/codespan-napi#readme
- Issues: https://github.com/IWANABETHATGUY/codespan-napi/issues
- npm.io page: https://npm.io/package/codespan-napi

## Dependencies (14)

- [@node-rs/helper](https://npm.io/package/@node-rs/helper.md) ^1.2.1
- [codespan-napi-darwin-x64](https://npm.io/package/codespan-napi-darwin-x64.md) 0.4.0
- [codespan-napi-freebsd-x64](https://npm.io/package/codespan-napi-freebsd-x64.md) 0.4.0
- [codespan-napi-darwin-arm64](https://npm.io/package/codespan-napi-darwin-arm64.md) 0.4.0
- [codespan-napi-android-arm64](https://npm.io/package/codespan-napi-android-arm64.md) 0.4.0
- [codespan-napi-linux-x64-gnu](https://npm.io/package/codespan-napi-linux-x64-gnu.md) 0.4.0
- [codespan-napi-linux-x64-musl](https://npm.io/package/codespan-napi-linux-x64-musl.md) 0.4.0
- [codespan-napi-win32-x64-msvc](https://npm.io/package/codespan-napi-win32-x64-msvc.md) 0.4.0
- [codespan-napi-linux-arm64-gnu](https://npm.io/package/codespan-napi-linux-arm64-gnu.md) 0.4.0
- [codespan-napi-win32-ia32-msvc](https://npm.io/package/codespan-napi-win32-ia32-msvc.md) 0.4.0
- [codespan-napi-android-arm-eabi](https://npm.io/package/codespan-napi-android-arm-eabi.md) 0.4.0
- [codespan-napi-linux-arm64-musl](https://npm.io/package/codespan-napi-linux-arm64-musl.md) 0.4.0
- [codespan-napi-win32-arm64-msvc](https://npm.io/package/codespan-napi-win32-arm64-msvc.md) 0.4.0
- [codespan-napi-linux-arm-gnueabihf](https://npm.io/package/codespan-napi-linux-arm-gnueabihf.md) 0.4.0

## Recent versions

- 0.4.0 (latest) — 2022-04-07
- 0.3.1 — 2022-04-02
- 0.3.0 — 2022-04-01
- 0.2.0 — 2022-04-01
- 0.1.9 — 2022-03-31
- 0.1.8 — 2022-03-31

## README

# `codespan-napi`

![https://github.com/napi-rs/package-template/actions](https://github.com/napi-rs/package-template/workflows/CI/badge.svg)

> codespan-reporting node binding powered by napi-rs

## Installation 

```
yarn add codespan-napi
```

## Examples
1. You could see an equivalent example to https://github.com/brendanzab/codespan readme here [examples/simple.js](examples/simple.js)
2. Save diagnostic message as svg [examples/generateSvg](examples/generateSvg.js), the preview svg is generated by the example
![diagnostic_svg](misc/generateSvg.svg)
3. [Diagnostic cross multiple file](examples/multiple.js)
![multiple.svg](misc/multiple_file.svg)
## Support matrix

### Operating Systems

|                  | node12 | node14 | node16 |
| ---------------- | ------ | ------ | ------ |
| Windows x64      | ✓      | ✓      | ✓      |
| Windows x32      | ✓      | ✓      | ✓      |
| Windows arm64    | ✓      | ✓      | ✓      |
| macOS x64        | ✓      | ✓      | ✓      |
| macOS arm64      | ✓      | ✓      | ✓      |
| Linux x64 gnu    | ✓      | ✓      | ✓      |
| Linux x64 musl   | ✓      | ✓      | ✓      |
| Linux arm gnu    | ✓      | ✓      | ✓      |
| Linux arm64 gnu  | ✓      | ✓      | ✓      |
| Linux arm64 musl | ✓      | ✓      | ✓      |
| Android arm64    | ✓      | ✓      | ✓      |
| Android armv7    | ✓      | ✓      | ✓      |
| FreeBSD x64      | ✓      | ✓      | ✓      |

## Ability

### Build

After `yarn build/npm run build` command, you can see `package-template.[darwin|win32|linux].node` file in project root. This is the native addon built from [lib.rs](./src/lib.rs).

### Test

With [ava](https://github.com/avajs/ava), run `yarn test/npm run test` to testing native addon. You can also switch to another testing framework if you want.

### CI

With GitHub actions, every commits and pull request will be built and tested automatically in [`node@12`, `node@14`, `@node16`] x [`macOS`, `Linux`, `Windows`] matrix. You will never be afraid of the native addon broken in these platforms.

### Release

Release native package is very difficult in old days. Native packages may ask developers who use its to install `build toolchain` like `gcc/llvm` , `node-gyp` or something more.

With `GitHub actions`, we can easily prebuild `binary` for major platforms. And with `N-API`, we should never afraid of **ABI Compatible**.

The other problem is how to deliver prebuild `binary` to users. Download it in `postinstall` script is a common way which most packages do it right now. The problem of this solution is it introduced many other packages to download binary which has not been used by `runtime codes`. The other problem is some user may not easily download the binary from `GitHub/CDN` if they are behind private network (But in most case, they have a private NPM mirror).

In this package we choose a better way to solve this problem. We release different `npm packages` for different platform. And add it to `optionalDependencies` before release the `Major` package to npm.

`NPM` will choose which native package should download from `registry` automatically. You can see [npm](./npm) dir for details. And you can also run `yarn add codespan-napi` to see how it works.

## Develop requirements

- Install latest `Rust`
- Install `Node.js@10+` which fully supported `Node-API`
- Install `yarn@1.x`

## Test in local

- yarn
- yarn build
- yarn test

And you will see:

```bash
$ ava --verbose

  ✔ sync function from native code
  ✔ sleep function from native code (201ms)
  ─

  2 tests passed
✨  Done in 1.12s.
```

## Release package

Ensure you have set you **NPM_TOKEN** in `GitHub` project setting.

In `Settings -> Secrets`, add **NPM_TOKEN** into it.

When you want release package:

```
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

git push
```

GitHub actions will do the rest job for you.

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