npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@processengine/decisions

v1.0.0

Published

Compile-first decision selection library for ProcessEngine.

Downloads

114

Readme

@processengine/decisions

npm version CI publish license: MIT node >= 18

Compile-first library for selecting a decision from JSON-safe facts.

What it does

  • compiles decision definitions into an immutable artifact
  • evaluates facts only against that compiled artifact
  • returns a stable result shape: MATCHED, DEFAULTED, or ABORT
  • keeps a strict architectural boundary: this package selects a decision and stops there

What it does not do

  • does not execute actions
  • does not orchestrate time, retries, queues, or external calls
  • does not replace @processengine/flows
  • does not support expressions, nested decisions, or side effects in v1

Install

npm install @processengine/decisions

Quick start

const { compile, evaluate } = require('@processengine/decisions');

const definition = {
  artifacts: [
    {
      id: 'risk.approve',
      type: 'decision-rule',
      description: 'approve low-risk request',
      when: { 'request.risk': 'low' },
      then: {
        decision: 'APPROVE',
        reason: 'low risk'
      }
    },
    {
      id: 'risk.route',
      type: 'decision-set',
      description: 'main routing',
      version: '1.0.0',
      mode: 'first_match_wins',
      rules: ['risk.approve'],
      defaultDecision: {
        decision: 'REVIEW',
        reason: 'fallback'
      }
    }
  ]
};

const compiled = compile(definition);
const result = evaluate(compiled, 'risk.route', { request: { risk: 'low' } });

Compile-first contract

  • compile(definition) returns an immutable compiled artifact
  • evaluate(compiled, entrypointId, facts) works only on a compiled artifact
  • mutating the original definition after compile() does not affect evaluation
  • run(definition, entrypointId, facts) is only a facade over compile() + evaluate()

Result model

MATCHED

A rule matched. The selected decision comes from that rule.

DEFAULTED

No rule matched and strict mode is off. The selected decision comes from defaultDecision.

ABORT

Evaluation stopped due to invalid input, missing required facts, strict default resolution, or another runtime contract violation.

Trace

Trace is part of the public contract.

Each trace item contains:

  • ruleId
  • matched
  • failedConditions when the rule did not match

Failed conditions include:

  • fact
  • expected
  • actual
  • conditionIndex

Trace order always follows rule order.

Missing facts

There are two levels of missing fact handling.

  • requiredFacts is checked before rule evaluation and may return REQUIRED_FACT_MISSING
  • rule conditions use missingFactPolicy
    • false: missing fact behaves like a failed condition
    • error: evaluation aborts with MISSING_FACT

Known limits of v1

  • only equality conditions are supported
  • no expression language
  • no nested decisions
  • no side effects
  • no dynamic action execution
  • compile-time overlap analysis is heuristic and intentionally limited

Schema

The package exports the canonical schema at subpath @processengine/decisions/schema.

CommonJS note

The first release is CommonJS-first. Use require() from Node.js or configure your toolchain accordingly.