Node.js bindings for the Mathematical Expression Toolkit

ExprTk.js

License: ISC npm version Node.js CI Test published packages codecov

This is the Node.js bindings for ExprTk (Github) by @ArashPartow

ExprTk.js supports both synchronous and asynchronous background execution of thunks precompiled from a string including asynchronous and multithreaded versions of TypedArray.prototype.map and TypedArray.prototype.reduce.

Its main advantage is that it allows deferring of heavy computation for asynchronous execution in a background thread - something that Node.js/V8 does not allow without the very complex mechanisms of worker_threads.

Even in single-threaded synchronous mode ExprTk.js outperforms the native JS TypedArray.prototype.map running in V8 by a significant margin for all types and array sizes and it comes very close to a direct iterative for loop.

It also supports being directly called from native add-ons, including native threads, without any synchronization with V8, allowing JS code to drive multi-threaded mathematical transformations.

Installation

ExprTk.js uses node-pre-gyp and it comes with pre-built binaries for x86 for Linux (baseline is Ubuntu 18.04), Windows and OS X.

npm install exprtk.js

If your platform is not supported, you can rebuild the binaries:

npm install exprtk.js --build-from-source

Rebuilding requires a working C++17 environment. It has been tested with g++, clang and MSVS 2019.

Usage

Different methods of traversal work better for different array sizes, you should probably run/adjust the benchmarks - npm run bench - to see for yourself.

For very small array sizes, the fast setup of eval/evalAsync will be better. For large arrays, the tight internal loop of map()/mapAsync() will be better.

When launching a large number of parallel operations, unless the expression is very complex, the bottleneck will be the cache/memory bandwidth.

The original documentation of ExprTk and the syntax used for the expressions is available here: https://github.com/ArashPartow/exprtk

When launching an asynchronous operation, the scalar arguments will be copied and any TypedArrays will be locked in place and protected from the GC. The whole operation, including traversal and evaluation will happen entirely in a pre-existing background thread picked from a pool and won't solicit the main thread until completion.

An Expression is not reentrant so multiple concurrent evaluations of the same Expression object will wait on one another. Multiple evaluations on multiple objects will run in parallel up to the limit set by the Node.js environment variable UV_THREADPOOL_SIZE. Mixing synchronous and asynchronous evaluations is supported, but a synchronous evaluation will block the event loop until all asynchronous evaluations on that same object are finished.

Support for a reentrant MPExpression that can distribute its array over multiple threads is planned for the next version.

Simple examples

// internal type will be Float64 (C++ double)
const expr = require("exprtk.js").Float64;

// arithmetic mean
const mean = new expr('(a + b) / 2');

const m = mean.eval({a: 2, b: 4});

Array traversal with map()/mapAsync()

const inputArray = new Float64Array(n);
// clamp to a range
const clamp = new expr('clamp(minv, x, maxv)', ['minv', 'x', 'maxv']);

// these are equivalent
const resultingArray = clamp.map(inputArray, 'x', 5, 10);
const resultingArray = clamp.map(inputArray, 'x', {minv: 5, maxv: 10});

// async
const resultingArray = await clamp.mapAsync(inputArray, 'x', 5, 10);
const resultingArray = await clamp.mapAsync(inputArray, 'x', {minv: 5, maxv: 10});

Array traversal with reduce()/reduceAsync()

const inputArray = new Float64Array(n);
// sum n-powers
const sumPow = new expr('a + pow(x, n)', ['a', 'x', 'n']);
// these are equivalent
const sumSquares = sumPow.reduce(inputArray, 'x', 'a', 0, 2);
const sumSquares = sumPow.reduce(inputArray, 'x', 'a', 0, {p: 2});

// async
const sumSquares = await sumPow.reduceAsync(inputArray, 'x', 'a', 0, 2);
const sumSquares = await sumPow.reduceAsync(inputArray, 'x', 'a', 0, {p: 2});

Explicit traversal by using an ExprTk for loop

The data type and the array size must be known when compiling (constructing) the expression. ExprTk supports only fixed-size arrays.

const inputArray = new Float64Array(n);
const expr = require("exprtk.js").Float64;

const mean = new expr(
    'var r := 0;' + 
    'for (var i := 0; i < x[]; i += 1)' +
    '{ r += x[i]; };' +
    'r / x[];',
    [], { 'x': 6 });

const r = mean.eval(inputArray);
const r = await mean.evalAsync(inputArray);

API

Table of Contents

Expression

Parameters

  • expression string function
  • variables Array<string>? An array containing all the scalar variables' names, will be determined automatically if omitted, however order won't be guaranteed
  • vectors Record<string, number>? An object containing all the vector variables' names and their sizes, vector size must be known at compilation (object construction)

Examples

// This determines the internally used type
const expr = require("exprtk.js").Float64;

// arithmetic mean of 2 variables
const mean = new Expression('(a+b)/2', ['a', 'b']);

// naive stddev of an array of 1024 elements
const stddev = new Expression(
 'var sum := 0; var sumsq := 0; ' + 
 'for (var i := 0; i < x[]; i += 1) { sum += x[i]; sumsq += x[i] * x[i] }; ' +
 '(sumsq - (sum*sum) / x[]) / (x[] - 1);',
 [], {x: 1024})

Returns Expression

expression

Return the expression as a string

Type: string

scalars

Return the scalar arguments as an array

Type: Array<string>

type

Return the type as a string

Type: string

vectors

Return the vector arguments as an object

Type: Record<string, Array<number>>

cwise

Generic vector operation with implicit traversal.

Supports automatic type conversions, multiple inputs and writing into a pre-existing array.

Parameters

Examples

// Air density of humid air from relative humidity (phi), temperature (T) and pressure (P)
// rho = ( Pd * Md + Pv * Mv ) / ( R * (T + 273.15) // density (Avogadro's law)
// Pv = phi * Ps                                    // vapor pressure of water
// Ps = 6.1078 * 10 ^ (7.5 * T / (T + 237.3))       // saturation vapor pressure (Tetens' equation)
// Pd = P - Pv                                      // partial pressure of dry air
// R = 0.0831446                                    // universal gas constant
// Md = 0.0289652                                   // molar mass of water vapor
// Mv = 0.018016                                    // molar mass of dry air
// ( this is the weather science form of the equation and not the hard physics one with T in C° )
// phi, T and P are arbitrary TypedArrays of the same size
//
// Calculation uses Float64 internally
// Result is stored in Float32

const R = 0.0831446;
const Md = 0.0289652;
const Mv = 0.018016;
// cwise()/cwiseAsync() accept and automatically convert all data types
const phi = new Float32Array([0, 0.2, 0.5, 0.9, 0.5]);
const P = new Uint16Array([1013, 1013, 1013, 1013, 995]);
const T = new Uint16Array([25, 25, 25, 25, 25]);

const density = new Float64Expression(
  'Pv := ( phi * 6.1078 * pow(10, (7.5 * T / (T + 237.3))) ); ' +  // compute Pv and store it
  '( (P - Pv) * Md + Pv * Mv ) / ( R * (T + 273.13) )',            // return expression
   ['P', 'T', 'phi', 'R', 'Md', 'Mv']
);
const result = new Float32Array(P.length);

// sync
density.cwise({phi, T, P, R, Md, Mv}, result);

// async
await density.cwiseAsync({phi, T, P, R, Md, Mv}, result);

Returns TypedArray<T>

eval

Evaluate the expression.

All arrays must match the internal data type.

Parameters

Examples

// These two are equivalent
const r1 = expr.eval({a: 2, b: 5});  // less error-prone
const r2 = expr.eval(2, 5);          // slightly faster

// These two are equivalent
expr.evalAsync({a: 2, b: 5}, (e,r) => console.log(e, r));
expr.evalAsync(2, 5, (e,r) => console.log(e, r));

Returns number

map

Evaluate the expression for every element of a TypedArray.

Evaluation and traversal happens entirely in C++ so this will be much faster than calling array.map(expr.eval).

All arrays must match the internal data type.

Parameters

Examples

// Clamp values in an array to [0..1000]
const expr = new Expression('clamp(f, x, c)', ['f', 'x', 'c']);

// r will be a TypedArray of the same type
// These two are equivalent
const r1 = expr.map(array, 'x', 0, 1000);
const r2 = expr.map(array, 'x', {f: 0, c: 0});

expr.mapAsync(array, 'x', 0, 1000, (e,r) => console.log(e, r));
expr.mapAsync(array, 'x', {f: 0, c: 0}, (e,r) => console.log(e, r));

Returns TypedArray<T>

reduce

Evaluate the expression for every element of a TypedArray passing a scalar accumulator to every evaluation.

Evaluation and traversal happens entirely in C++ so this will be much faster than calling array.reduce(expr.eval).

All arrays must match the internal data type.

Parameters

Examples

// n-power sum of an array
const sum = new Expression('a + pow(x, p)', ['a', 'x', 'p']);

// sumSq will be a scalar number

// These are equivalent
const sumSq = sum.reduce(array, 'x', 'a', 0, {'p': 2});
const sumSq = sum.reduce(array, 'x', 'a', 0, 2);

sum.reduceAsync(array, 'x', {'a' : 0}, (e,r) => console.log(e, r));
const sumSq = await sum.reduceAsync(array, 'x', {'a' : 0}, (e,r) => console.log(e, r));

Returns number

Notes

Integer types

Originally, ExprTk supports only floating point types. The version bundled with ExprTk.js has working integer support, but one should be extra careful as it internally uses NaN values and most built-in mathematical functions - like sin, cos, pow or exp - won't work correctly with integer types. Using unsigned types will further aggravate this. Always check the result of your function when using anything but basic arithmetic. Also, do not forget that the internal data type also applies to all eventual index variables - using an ExprTk for loop in an eval() over a large Int8 array is not possible as the index variable won't be able to hold the index. Implicit map(), reduce() and cwise() loops are not affected by this as they use internal C++ variables that are not affected by the Expression type.

Evaluating expressions from another addon

One of the main features of ExprTk.js is allowing native C++ addons to accept expressions constructed in JS and then to evaluate them independently of the main V8 context.

You can check test/addon.test.cc for different examples of processing an Expression object received from JS and evaluating the expression. The calling JS code can be found in test/capi.test.js.

Be advised that, while being completely independent of V8, those function can still block if another asynchronous operation is running on that Expression object. At the moment an Expression object can not be evaluated multiple times in parallel. A reentrant, but more expensive for single use, version is planned for the next release.

Build time and binary size

ExprTk is a C++ template-based engine and it contains an exceptionally high number of symbols that are multiplied by the number of supported types. The final binary contains more than 250000 symbols which is the reason for the huge binary size and the slow build process. This has no effect on its performance or even its initial loading time as the symbols are not exported through the dynamic linker.

Owner
Momtchil Momtchev
Old-school UNIX guru, Node.js, TCP/IP, GIS, JS, V8. Currently unemployed because of an ugly scandal. Hears voices. Pronouns: we/us.
Momtchil Momtchev
Comments
  • [Snyk] Upgrade eslint from 8.9.0 to 8.10.0

    [Snyk] Upgrade eslint from 8.9.0 to 8.10.0

    Snyk has created this PR to upgrade eslint from 8.9.0 to 8.10.0.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-02-25.
    Release notes
    Package name: eslint
    • 8.10.0 - 2022-02-25

      Features

      • 6e2c325 feat: Add ignoreOnInitialization option to no-shadow rule (#14963) (Soufiane Boutahlil)
      • 115cae5 feat: --debug prints time it takes to parse a file (#15609) (Bartek Iwańczuk)
      • 345e70d feat: Add onlyOneSimpleParam option to no-confusing-arrow rule (#15566) (Gautam Arora)

      Bug Fixes

      • cdc5802 fix: Avoid __dirname for built-in configs (#15616) (DoZerg)
      • ee7c5d1 fix: false positive in camelcase with combined properties (#15581) (Nitin Kumar)

      Documentation

      • 1005bd5 docs: update CLA information (#15630) (Nitin Kumar)
      • 5d65c3b docs: Fix typo in no-irregular-whitespace (#15634) (Ryota Sekiya)
      • b93af98 docs: add links between rules about whitespace around block curly braces (#15625) (Milos Djermanovic)
      • ebc0460 docs: update babel links (#15624) (Milos Djermanovic)

      Chores

    • 8.9.0 - 2022-02-12

      Features

      • 68f64a9 feat: update eslint-scope to ignore "use strict" directives in ES3 (#15595) (Milos Djermanovic)
      • db57639 feat: add es2016, es2018, es2019, and es2022 environments (#15587) (Milos Djermanovic)
      • 2dc38aa feat: fix bug with arrow function return types in function-paren-newline (#15541) (Milos Djermanovic)
      • 6f940c3 feat: Implement FlatRuleTester (#15519) (Nicholas C. Zakas)

      Documentation

      • 570a036 docs: add one-var example with for-loop initializer (#15596) (Milos Djermanovic)
      • 417191d docs: Remove the $ prefix in terminal commands (#15565) (Andreas Lewis)
      • 389ff34 docs: add missing Variable#scope property in the scope manager docs (#15571) (Milos Djermanovic)
      • f63795d docs: no-eval replace dead link with working one (#15568) (rasenplanscher)
      • 0383591 docs: Remove old Markdown issue template (#15556) (Brandon Mills)
      • a8dd5a2 docs: add 'when not to use it' section in no-duplicate-case docs (#15563) (Milos Djermanovic)
      • 1ad439e docs: add missed verb in docs (#15550) (Jeff Mosawy)

      Chores

    from eslint GitHub release notes
    Commit messages
    Package name: eslint
    • f66890b 8.10.0
    • 2fe01f3 Build: changelog update for 8.10.0
    • cdc5802 fix: Avoid `__dirname` for built-in configs (#15616)
    • 7cec74e chore: upgrade @ eslint/[email protected] (#15648)
    • 6e2c325 feat: Add `ignoreOnInitialization` option to no-shadow rule (#14963)
    • 1005bd5 docs: update CLA information (#15630)
    • 5d65c3b docs: Fix typo in `no-irregular-whitespace` (#15634)
    • 11c8580 chore: read `ESLINT_MOCHA_TIMEOUT` env var in Makefile.js (#15626)
    • b93af98 docs: add links between rules about whitespace around block curly braces (#15625)
    • ebc0460 docs: update babel links (#15624)
    • 115cae5 feat: `--debug` prints time it takes to parse a file (#15609)
    • 345e70d feat: Add `onlyOneSimpleParam` option to no-confusing-arrow rule (#15566)
    • bfaa548 test: add integration tests with built-in configs (#15612)
    • 3023991 Sponsors: Sync README with website
    • 39a2fb3 perf: fix lazy loading of core rules (#15606)
    • 3fc9196 chore: include `tests/conf` in test runs (#15610)
    • ee7c5d1 fix: false positive in `camelcase` with combined properties (#15581)
    • d992382 Sponsors: Sync README with website
    • 8d3c25f Sponsors: Sync README with website

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @types/node from 17.0.19 to 17.0.21

    [Snyk] Upgrade @types/node from 17.0.19 to 17.0.21

    Snyk has created this PR to upgrade @types/node from 17.0.19 to 17.0.21.

    :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 2 versions ahead of your current version.
    • The recommended version was released 22 days ago, on 2022-02-23.
    Release notes
    Package name: @types/node
    • 17.0.21 - 2022-02-23
    • 17.0.20 - 2022-02-23
    • 17.0.19 - 2022-02-21
    from @types/node GitHub release notes

    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @types/node from 17.0.18 to 17.0.19

    [Snyk] Upgrade @types/node from 17.0.18 to 17.0.19

    Snyk has created this PR to upgrade @types/node from 17.0.18 to 17.0.19.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 22 days ago, on 2022-02-21.
    Release notes
    Package name: @types/node
    • 17.0.19 - 2022-02-21
    • 17.0.18 - 2022-02-14
    from @types/node GitHub release notes

    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @typescript-eslint/eslint-plugin from 5.12.0 to 5.12.1

    [Snyk] Upgrade @typescript-eslint/eslint-plugin from 5.12.0 to 5.12.1

    Snyk has created this PR to upgrade @typescript-eslint/eslint-plugin from 5.12.0 to 5.12.1.

    :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 16 versions ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-02-21.
    Release notes
    Package name: @typescript-eslint/eslint-plugin
    • 5.12.1 - 2022-02-21

      5.12.1 (2022-02-21)

      Bug Fixes

      • eslint-plugin: [no-unnecessary-type-arguments] fix comparison of types (#4555) (fc3936e)
    • 5.12.1-alpha.15 - 2022-02-21
    • 5.12.1-alpha.14 - 2022-02-17
    • 5.12.1-alpha.13 - 2022-02-16
    • 5.12.1-alpha.12 - 2022-02-16
    • 5.12.1-alpha.11 - 2022-02-16
    • 5.12.1-alpha.10 - 2022-02-16
    • 5.12.1-alpha.9 - 2022-02-16
    • 5.12.1-alpha.8 - 2022-02-16
    • 5.12.1-alpha.7 - 2022-02-16
    • 5.12.1-alpha.6 - 2022-02-16
    • 5.12.1-alpha.5 - 2022-02-16
    • 5.12.1-alpha.4 - 2022-02-16
    • 5.12.1-alpha.2 - 2022-02-16
    • 5.12.1-alpha.1 - 2022-02-16
    • 5.12.1-alpha.0 - 2022-02-14
    • 5.12.0 - 2022-02-14

      5.12.0 (2022-02-14)

      Bug Fixes

      • eslint-plugin: [init-declarations] fix nested namespace (#4544) (fe910e6)
      • eslint-plugin: [no-unnecessary-type-arguments] Use Symbol to check if it's the same type (#4543) (5b7d8df)
      • support nested object deconstructuring with type annotation (#4548) (4da9278)

      Features

      • eslint-plugin: [explicit-module-boundary-types ] add checking property definition for allowNames option (#4542) (e32bef6)
    from @typescript-eslint/eslint-plugin GitHub release notes
    Commit messages
    Package name: @typescript-eslint/eslint-plugin
    • e7857aa chore: publish v5.12.1
    • 0dd785f docs: add a missing " (#4577)
    • cc71766 docs(eslint-plugin): [member-ordering] correct options type (#4568)
    • b83f597 chore: bump @ commitlint/config-conventional from 16.0.0 to 16.2.1 (#4565)
    • 52506a2 chore: bump @ types/prettier from 2.4.3 to 2.4.4 (#4564)
    • 52618eb chore: bump @ commitlint/cli from 16.1.0 to 16.2.1 (#4563)
    • 6b9ad2d chore: bump eslint-visitor-keys from 3.2.0 to 3.3.0 (#4562)
    • 5c2b2a4 chore: bump webpack from 5.68.0 to 5.69.0 (#4561)
    • 3c3217b chore: bump pretty-format from 27.5.0 to 27.5.1 (#4559)
    • b1603c9 chore: bump eslint-plugin-jest from 26.1.0 to 26.1.1 (#4558)
    • 40538cd chore: bump enhanced-resolve from 5.8.3 to 5.9.0 (#4560)
    • 0dc7571 chore: bump @ babel/runtime from 7.17.0 to 7.17.2 (#4557)
    • 70066e2 chore: bump jest from 27.5.0 to 27.5.1 (#4550)
    • cd9722f chore: bump lint-staged from 12.3.3 to 12.3.4 (#4552)
    • 1520116 chore: bump rollup from 2.67.1 to 2.67.2 (#4551)
    • a04344e chore: bump follow-redirects from 1.14.7 to 1.14.8 (#4549)
    • fc3936e fix(eslint-plugin): [no-unnecessary-type-arguments] fix comparison of types (#4555)

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @typescript-eslint/parser from 5.12.0 to 5.12.1

    [Snyk] Upgrade @typescript-eslint/parser from 5.12.0 to 5.12.1

    Snyk has created this PR to upgrade @typescript-eslint/parser from 5.12.0 to 5.12.1.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 16 versions ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-02-21.
    Release notes
    Package name: @typescript-eslint/parser
    • 5.12.1 - 2022-02-21

      5.12.1 (2022-02-21)

      Bug Fixes

      • eslint-plugin: [no-unnecessary-type-arguments] fix comparison of types (#4555) (fc3936e)
    • 5.12.1-alpha.15 - 2022-02-21
    • 5.12.1-alpha.14 - 2022-02-17
    • 5.12.1-alpha.13 - 2022-02-16
    • 5.12.1-alpha.12 - 2022-02-16
    • 5.12.1-alpha.11 - 2022-02-16
    • 5.12.1-alpha.10 - 2022-02-16
    • 5.12.1-alpha.9 - 2022-02-16
    • 5.12.1-alpha.8 - 2022-02-16
    • 5.12.1-alpha.7 - 2022-02-16
    • 5.12.1-alpha.6 - 2022-02-16
    • 5.12.1-alpha.5 - 2022-02-16
    • 5.12.1-alpha.4 - 2022-02-16
    • 5.12.1-alpha.2 - 2022-02-16
    • 5.12.1-alpha.1 - 2022-02-16
    • 5.12.1-alpha.0 - 2022-02-14
    • 5.12.0 - 2022-02-14

      5.12.0 (2022-02-14)

      Bug Fixes

      • eslint-plugin: [init-declarations] fix nested namespace (#4544) (fe910e6)
      • eslint-plugin: [no-unnecessary-type-arguments] Use Symbol to check if it's the same type (#4543) (5b7d8df)
      • support nested object deconstructuring with type annotation (#4548) (4da9278)

      Features

      • eslint-plugin: [explicit-module-boundary-types ] add checking property definition for allowNames option (#4542) (e32bef6)
    from @typescript-eslint/parser GitHub release notes
    Commit messages
    Package name: @typescript-eslint/parser
    • e7857aa chore: publish v5.12.1
    • 0dd785f docs: add a missing " (#4577)
    • cc71766 docs(eslint-plugin): [member-ordering] correct options type (#4568)
    • b83f597 chore: bump @ commitlint/config-conventional from 16.0.0 to 16.2.1 (#4565)
    • 52506a2 chore: bump @ types/prettier from 2.4.3 to 2.4.4 (#4564)
    • 52618eb chore: bump @ commitlint/cli from 16.1.0 to 16.2.1 (#4563)
    • 6b9ad2d chore: bump eslint-visitor-keys from 3.2.0 to 3.3.0 (#4562)
    • 5c2b2a4 chore: bump webpack from 5.68.0 to 5.69.0 (#4561)
    • 3c3217b chore: bump pretty-format from 27.5.0 to 27.5.1 (#4559)
    • b1603c9 chore: bump eslint-plugin-jest from 26.1.0 to 26.1.1 (#4558)
    • 40538cd chore: bump enhanced-resolve from 5.8.3 to 5.9.0 (#4560)
    • 0dc7571 chore: bump @ babel/runtime from 7.17.0 to 7.17.2 (#4557)
    • 70066e2 chore: bump jest from 27.5.0 to 27.5.1 (#4550)
    • cd9722f chore: bump lint-staged from 12.3.3 to 12.3.4 (#4552)
    • 1520116 chore: bump rollup from 2.67.1 to 2.67.2 (#4551)
    • a04344e chore: bump follow-redirects from 1.14.7 to 1.14.8 (#4549)
    • fc3936e fix(eslint-plugin): [no-unnecessary-type-arguments] fix comparison of types (#4555)

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @mmomtchev/documentation from 14.0.0 to 14.0.1

    [Snyk] Upgrade @mmomtchev/documentation from 14.0.0 to 14.0.1

    Snyk has created this PR to upgrade @mmomtchev/documentation from 14.0.0 to 14.0.1.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-02-19.
    Release notes
    Package name: @mmomtchev/documentation from @mmomtchev/documentation GitHub release notes
    Commit messages
    Package name: @mmomtchev/documentation
    • d7350e4 chore(release): 14.0.1
    • a4824af support custom tags
    • 549e337 Merge branch 'unique-hash-ids' into main
    • a2b43f5 restore CI
    • dbafb9a always generate unique hash ids
    • 249b950 Merge branch 'master' of https://github.com/documentationjs/documentation into main
    • a31e732 the new sort order is the correct one
    • 308f740 correctly sort undefined values

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade documentation-polyglot from 1.0.0 to 1.0.1

    [Snyk] Upgrade documentation-polyglot from 1.0.0 to 1.0.1

    Snyk has created this PR to upgrade documentation-polyglot from 1.0.0 to 1.0.1.

    :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-02-19.
    Release notes
    Package name: documentation-polyglot from documentation-polyglot GitHub release notes
    Commit messages
    Package name: documentation-polyglot
    • ac2cc5b 1.0.1
    • 4a99267 upgrade documentation for custom tags
    • 37d04ef Merge branch 'master' of github.com:mmomtchev/documentation-polyglot
    • 2a7b5c1 support custom tags
    • 51b4f22 Merge pull request #16 from mmomtchev/snyk-upgrade-e85c76f9d051b01f2b17b8be6e6f46ff
    • b1c2b8b fix: upgrade eslint from 8.7.0 to 8.8.0
    • 7caed13 Merge pull request #14 from mmomtchev/snyk-upgrade-604b1c6f37380a6076f8ba2f5ed9c760
    • d84e3fb Merge pull request #15 from mmomtchev/snyk-upgrade-b8f09a9199279b3a40242ab6cc12bf0a
    • 7db1fd5 fix: upgrade eslint from 8.6.0 to 8.7.0
    • aeceb14 fix: upgrade eslint-plugin-jest from 25.3.4 to 25.7.0
    • ce0153c Merge pull request #13 from mmomtchev/snyk-upgrade-0b8ddad39f2a89069d0803e865d7c062
    • a17af6f fix: upgrade jest from 27.4.6 to 27.4.7
    • 2d05b97 Merge pull request #12 from mmomtchev/snyk-upgrade-1e498253ff7141b40ced5503640f773e
    • 021f1ea fix: upgrade jest from 27.4.5 to 27.4.6
    • 0faffb1 Merge pull request #11 from mmomtchev/snyk-upgrade-cdce549f0b961ae5cd16546bf059476c
    • f6b83fa Merge pull request #10 from mmomtchev/snyk-upgrade-2ad7eb43578a3042e4dbb5f616326802
    • ccedf41 fix: upgrade eslint-plugin-jest from 25.3.3 to 25.3.4
    • 44e2dc4 fix: upgrade eslint from 8.5.0 to 8.6.0
    • 1ce7f66 Merge pull request #9 from mmomtchev/snyk-upgrade-79708eb08aa0822af9532ec945e83367
    • ae34cc4 fix: upgrade eslint-plugin-jest from 25.3.2 to 25.3.3
    • 81cc20c Merge pull request #8 from mmomtchev/snyk-upgrade-f404f88d02cbca18991cc6302a21f331
    • bcc66bc fix: upgrade eslint-plugin-jest from 25.3.0 to 25.3.2
    • cb10422 Merge pull request #7 from mmomtchev/snyk-upgrade-df7dbce73fca104d3024f543eed778ff
    • 3141fbd fix: upgrade eslint from 8.4.1 to 8.5.0

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade mocha from 9.2.0 to 9.2.1

    [Snyk] Upgrade mocha from 9.2.0 to 9.2.1

    Snyk has created this PR to upgrade mocha from 9.2.0 to 9.2.1.

    :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 22 days ago, on 2022-02-19.
    Release notes
    Package name: mocha from mocha GitHub release notes
    Commit messages
    Package name: mocha
    • 547ffd7 build(v9.2.1): release
    • ca7432a build(v9.2.1): update CHANGELOG [ci skip]
    • 86305cf fix: wrong error thrown while loading config files (#4832)
    • 11c4560 fix: configurable max diff size (#4799)
    • 509938d doc: fix to show sponsors in narrow view (#4793)

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @typescript-eslint/parser from 5.10.1 to 5.10.2

    [Snyk] Upgrade @typescript-eslint/parser from 5.10.1 to 5.10.2

    Snyk has created this PR to upgrade @typescript-eslint/parser from 5.10.1 to 5.10.2.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 5 versions ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-01-31.
    Release notes
    Package name: @typescript-eslint/parser
    • 5.10.2 - 2022-01-31

      5.10.2 (2022-01-31)

      Bug Fixes

      • eslint-plugin: [no-restricted-imports] allow relative type imports with patterns configured (#4494) (4a6d217)
    • 5.10.2-alpha.3 - 2022-01-30
    • 5.10.2-alpha.2 - 2022-01-30
    • 5.10.2-alpha.1 - 2022-01-29
    • 5.10.2-alpha.0 - 2022-01-24
    • 5.10.1 - 2022-01-24

      5.10.1 (2022-01-24)

      Note: Version bump only for package @ typescript-eslint/typescript-eslint

    from @typescript-eslint/parser GitHub release notes
    Commit messages
    Package name: @typescript-eslint/parser
    • 1d88ac1 chore: publish v5.10.2
    • 04baac8 docs: standardized rule docs heading and option-less Options (#4367)
    • 4a6d217 fix(eslint-plugin): [no-restricted-imports] allow relative type imports with patterns configured (#4494)
    • 41c6474 chore(website): added cron job to update sponsors data daily (#4372)
    • d4768c0 chore: fix incorrect link in type-utils issue template

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade @typescript-eslint/eslint-plugin from 5.10.1 to 5.10.2

    [Snyk] Upgrade @typescript-eslint/eslint-plugin from 5.10.1 to 5.10.2

    Snyk has created this PR to upgrade @typescript-eslint/eslint-plugin from 5.10.1 to 5.10.2.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 5 versions ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-01-31.
    Release notes
    Package name: @typescript-eslint/eslint-plugin
    • 5.10.2 - 2022-01-31

      5.10.2 (2022-01-31)

      Bug Fixes

      • eslint-plugin: [no-restricted-imports] allow relative type imports with patterns configured (#4494) (4a6d217)
    • 5.10.2-alpha.3 - 2022-01-30
    • 5.10.2-alpha.2 - 2022-01-30
    • 5.10.2-alpha.1 - 2022-01-29
    • 5.10.2-alpha.0 - 2022-01-24
    • 5.10.1 - 2022-01-24

      5.10.1 (2022-01-24)

      Note: Version bump only for package @ typescript-eslint/typescript-eslint

    from @typescript-eslint/eslint-plugin GitHub release notes
    Commit messages
    Package name: @typescript-eslint/eslint-plugin
    • 1d88ac1 chore: publish v5.10.2
    • 04baac8 docs: standardized rule docs heading and option-less Options (#4367)
    • 4a6d217 fix(eslint-plugin): [no-restricted-imports] allow relative type imports with patterns configured (#4494)
    • 41c6474 chore(website): added cron job to update sponsors data daily (#4372)
    • d4768c0 chore: fix incorrect link in type-utils issue template

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

  • [Snyk] Upgrade eslint from 8.7.0 to 8.8.0

    [Snyk] Upgrade eslint from 8.7.0 to 8.8.0

    Snyk has created this PR to upgrade eslint from 8.7.0 to 8.8.0.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    • The recommended version is 1 version ahead of your current version.
    • The recommended version was released 21 days ago, on 2022-01-28.
    Release notes
    Package name: eslint
    • 8.8.0 - 2022-01-28

      Features

      • 5d60812 feat: implement rfc 2021-suppression-support (#15459) (Yiwei Ding)

      Documentation

      • 5769cc2 docs: fix relative link (#15544) (Nick Schonning)
      • ccbc35f docs: trimmed rules h1s to just be rule names (#15514) (Josh Goldberg)
      • 851f1f1 docs: fixed typo in comment (#15531) (Jiapei Liang)
      • 7d7af55 docs: address upcoming violation of markdownlint rule MD050/strong-style (#15529) (David Anson)
    • 8.7.0 - 2022-01-16

      Features

      • 19ad061 feat: no-restricted-imports support casing (#15439) (gfyoung)
      • 564ecdb feat: Support arbitrary module namespace names in no-restricted-imports (#15491) (Milos Djermanovic)
      • 968a02a feat: Support arbitrary module namespace names in no-useless-rename (#15493) (Milos Djermanovic)
      • 0d2b9a6 feat: move eslint --init to @ eslint/create-config (#15150) (唯然)
      • 127f524 feat: false negative with property option in id-match (#15474) (Nitin Kumar)
      • 359b2c1 feat: Support arbitrary module namespace names in the camelcase rule (#15490) (Milos Djermanovic)
      • 3549571 feat: Support arbitrary module namespace names in the quotes rule (#15479) (Milos Djermanovic)
      • 5563c45 feat: Support arbitrary module namespace names in keyword-spacing (#15481) (Milos Djermanovic)
      • fd3683f feat: Support arbitrary module namespace names in no-restricted-exports (#15478) (Milos Djermanovic)

      Bug Fixes

      • a8db9a5 fix: no-invalid-this false positive in class field initializer (#15495) (Milos Djermanovic)
      • 02d6426 fix: Correctly consume RuleTester statics (#15507) (Brad Zacher)
      • db15802 fix: Add property fatalErrorCount to ignored file results (#15520) (Francesco Trotta)
      • 03ac8cf fix: Prevent false positives with no-constant-condition (#15486) (Jordan Eldredge)

      Documentation

      • f50f849 docs: Update CLI docs to prefer local install (#15513) (Nicholas C. Zakas)
      • 0469eb1 docs: Update shell code fences for new website (#15522) (Olga)

      Chores

    from eslint GitHub release notes
    Commit messages
    Package name: eslint
    • b6f2bd8 8.8.0
    • 7d1366a Build: changelog update for 8.8.0
    • 5d60812 feat: implement rfc 2021-suppression-support (#15459)
    • 5769cc2 docs: fix relative link (#15544)
    • ccbc35f docs: trimmed rules h1s to just be rule names (#15514)
    • 851f1f1 docs: fixed typo in comment (#15531)
    • 7d7af55 docs: address upcoming violation of markdownlint rule MD050/strong-style (#15529)

    Compare


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    🧐 View latest project report

    🛠 Adjust upgrade PR settings

    🔕 Ignore this dependency or unsubscribe from future upgrade PRs

LLVM bindings for Node.js/JavaScript/TypeScript

llvm-bindings LLVM bindings for Node.js/JavaScript/TypeScript Supported OS macOS Ubuntu Windows Supported LLVM methods listed in the TypeScript defini

Jun 15, 2022
A simple implementation of a parser and its use to calculate simple mathematical expressions

Calculator C Parser A simple implementation of a parser and its use to calculate simple mathematical expressions I haven't written a detailed descript

Nov 8, 2021
C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions (SSE, AVX, NEON, AVX512)

C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions (SSE, AVX, NEON, AVX512)

Jun 24, 2022
Openmind - Deduction framework with arbitrary mathematical system solver.

openmind Compilation: Debian/Ubuntu: sudo apt install cmake g++ git libboost-all-dev libxss-dev libx11-dev libxcb-screensaver0-dev ocl-icd-opencl-dev

Apr 3, 2022
Itpp - IT++ library mirror/fork. C++ library of mathematical, signal processing and communication classes and functions.

Introduction ************ IT++ is a C++ library of mathematical, signal processing and communication classes and functions. Its main use is in simula

Apr 9, 2022
Parsing Expression Grammar Template Library
Parsing Expression Grammar Template Library

Welcome to the PEGTL The Parsing Expression Grammar Template Library (PEGTL) is a zero-dependency C++ header-only parser combinator library for creati

Jun 23, 2022
Header-only ECMAScript (JavaScript) compatible regular expression engine

SRELL (std::regex-like library) is a regular expression template library for C++ and has native support for UTF-8, UTF-16, and UTF-32. This is up-to-d

Mar 11, 2022
Love 6's Regular Expression Engine. Support Concat/Select/Closure Basic function. Hope u can enjoy this tiny engine :)
Love 6's Regular Expression Engine. Support Concat/Select/Closure Basic function. Hope u can enjoy this tiny engine :)

Regex_Engine Love 6's Blog Website: https://love6.blog.csdn.net/ Love 6's Regular Expression Engine Hope u can love my tiny regex engine :) maybe a fe

May 24, 2022
A C++ expression -> x64 JIT

NativeJIT NativeJIT is an open-source cross-platform library for high-performance just-in-time compilation of expressions involving C data structures.

Jun 11, 2022
A portable fork of the high-performance regular expression matching library

Vectorscan? A fork of Intel's Hyperscan, modified to run on more platforms. Currently ARM NEON/ASIMD is 100% functional, and Power VSX are in developm

Jun 17, 2022
Node.js Workers, except on the same thread

synchronous-worker – Run Node.js APIs synchronously Usage Example const w = new SynchronousWorker();

May 16, 2022
SmartShunt ve.direct to ESPHOME node

VictronSmartShunt-ESPHOME SmartShunt ve.direct to ESPHOME node A configured uart component is required. Example: victron: uart_id: the_uart sensor:

May 9, 2022
Integrate the ZENO node system into Blender for creating robust physics animations!

ZenoBlend Integrate the ZENO node system into Blender for creating robust physics animations! End-user Installation Goto Release page, and click Asset

Jun 10, 2022
Arduino M-BUS Master node for Arduino MKR M-BUS Shield
 Arduino M-BUS Master node for Arduino MKR M-BUS Shield

Arduino M-BUS Master node for Arduino MKR M-BUS Shield This software will read out a M-BUS device connected to an Arduino MKR board equipped with our

Dec 11, 2021
hotcaKey is the global shortcut (aka hotkey) module for node.js and electron.

?? hotcaKey is the global shortcut (aka hotkey) module for node.js and electron. hotcakey is now actively under deploment, so api may have

Jun 20, 2022
A C++ Node.js module that helps gathering informations on segmentation fault

node-segfault-handler A C++ Node.js module that helps gathering informations on segmentation fault Supported Platforms Linux Linux Alpine Windows MacO

Mar 15, 2022
Node running standalone on PC, with interface - self-containing all dependencies

GMD Node Windows Application It is the GMD Node App for Windows packaged in a simple "one-click" installer containing all necessary dependencies. We a

Jan 4, 2022
A rosbag2 recorder node that backs up split files to an external location during recording

System Data Recorder (SDR) A lifecycle node and executable for recording topic data to a rosbag2 bag, while simultaneously copying the split bag files

Mar 9, 2022
A composable container for Adaptive ROS 2 Node computations. Select between FPGA, CPU or GPU at run-time.

adaptive_component A composable stateless container for Adaptive ROS 2 Node computations. Select between FPGA, CPU or GPU at run-time. Nodes using har

Apr 25, 2022