addon-tools-el/README.md

4.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()));

utils.js

  • read - (async) Reads a whole file to string, NOT A Buffer.
  • write - (async) Write a file.
  • copy - (async) Copy a file.
  • exists - (async) Check if a file/folder exists.
  • mkdir - (async) Create an empty folder.
  • stat - (async) Get status on a file.
  • isDir - (async) Check if the path is a folder.
  • isFile - (async) Check if the path is a file.
  • dirUp - Cut the path one folder up.
  • ensuredir - (async) Like mkdir -p, makes sure a directory exists.
  • copysafe - (async) Copy a file, dest folder is created if needed.
  • readdir - (async) Get file/folder names of the 1st level.
  • subdirs - (async) Get folder paths (concatenated with input) of the 1st level.
  • subfiles - (async) Get file paths (concatenated with input) of the 1st level.
  • traverse - (async) Get all nested files recursively.
  • copyall - (async) Copy a folder with all the contained files.
  • rmdir - (async) Like rm -rf, removes everything recursively.
  • rm - (async) Remove a file. Must be a file, not a folder. Just fs.unlink.