addon-tools-el/README.md

3.5 KiB

Addon Tools

This is a part of Node3D project.

NPM

Build Status CodeFactor

npm i addon-tools-raub

Synopsis

This module contains numerous helpers for Node.js NAPI addons and dependency packages. On this page, helper scripts are described. For details on addon-tools.hpp and some additional snippets follow the links below.

Go to:

index.js

Main exports for cross-platform addon configuration.

  • paths(dir) - function. Returns a set of platform dependent paths depending on input dir.
    • bin - platform binary directory absolute path.
    • include - include directory for this dir.
  • include - both 'addon-tools-raub' and 'node-addon-api' include paths. Use with node -p through list context command expansion <!@(...).
  • bin - platform-dependent binary directory name.
  • platform - platform name: 'windows', 'linux', 'osx'.

download.js

Downloads a file into the memory, HTTP or HTTPS. async WritableBuffer download(string url) - accepts an URL, and returns an in-memory buffer, when file is loaded.

Example use:

download(srcUrl).then(
	data => useData(data),
	err => emit('error', err)
);
// or
const data = await download(srcUrl);
useData(data);

cpbin.js

Copies the addon binary from src/build/Release to the platform folder. It is useful for development builds. Use it in your src/package.json:

	"scripts": {
		"build": "node-gyp rebuild && node -e \"require('addon-tools-raub/cpbin')('ADDON')\""
	},

Here ADDON should be replaced with the name of your addon, without .node extension.

install.js

Downloads and unzips the platform specific binary for the calling package. To use it, create a new script for your package, which may as well be named install.js, with the following content:

'use strict';
const install = require('addon-tools-raub/install');
const prefix = 'https://github.com/USER/ADDON-NAME/releases/download';
const tag    = process.env.npm_package_config_install;
install(`${prefix}/${tag}`);
  • prefix - the constant base part of the download url.
  • tag - the version-dependent part of the url, here process.env.npm_package_config_install is taken (automatically) from package.json:
	"config": {
		"install": "v2.0.0"
	},
	"scripts": {
		"postinstall": "node install"
	},

writable-buffer.js

A Writable stream buffer, that is stored in-memory and can be fully obtained when writing was finished. It is equivalent to stream-writing a temporary file and then reading it into a Buffer.

Use stream.get() to obtain the data when writing was finished:

const stream = new WritableBuffer();
// ...
sourceStream.pipe(stream);
sourceStream.on('end', () => useData(stream.get()));