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 🙏

© 2025 – Pkg Stats / Ryan Hefner

bpm-core

v0.0.146

Published

- Update your project to **Angular 19** to avoid compatibility issues. - Review the [Changes Log](#changes-log) for breaking changes and apply necessary updates.

Readme

⚠️ Read Before Upgrading

  • Update your project to Angular 19 to avoid compatibility issues.
  • Review the Changes Log for breaking changes and apply necessary updates.

Table of Contents


Recently Added Features

  • BPM Core CLI

    A command-line interface tool that provides helper scripts to speed up common tasks.

    Run the tool using the bpm-core command in your terminal.
    To see all available commands, run:

    npx bpm-core --help

    The BPM Core CLI includes several helper scripts. You can run any script using its corresponding command.

    Below is the available commands:


    • deploySupports only library services.

      Use this command to deploy your service to one of the following environments: dev, sit, or bat.

      The deployment process includes:

      • Running the Angular build
      • Syncing with the remote repository
      • Triggering a Jenkins job

      Example usage
      In your terminal, navigate to the service directory and run the following command:

      npx bpm-core deploy --env sit --repo-path D:\stc\build\sit --commit-msg "COW: correct typo in Arabic translation" --remote-dir "cow-new" --username jenkinsUserName --token jenkinsTokenOrPassword

      For more details about available options, run:

      npx bpm-core deploy --help

    • generate (alias: g) — Supports only library services.

      Provides the following subcommands:

      • mock (alias: m).

        Use this subcommand to generate mock data for your service. The generated mock data will be saved in your service root as a file named mock-output.json.

        Example usage

        In your terminal, navigate to the service directory and run the following command:

        npx bpm-core generate mock
        # or using aliases
        npx bpm-core g m

      • new (alias: n)

        Use this subcommand to generate a new service, just like the form builder does.

        Example usage

        First, create the service directory. Then, in your terminal, navigate to that directory and run the following command:

        npx bpm-core generate new --config config.json --service-code MSM
        # or using aliases
        npx bpm-core g n --config config.json --service-code MSM

        The required options are:

        • --config the generation config path (like a form builder config).
        • --service-code the service code.

    Uploading file as formdata ** "version": "0.0.144"**

    Examples:

    • Example 1: upload file using file-uploader component

      <app-file-uploader [maxSize]="'20'" [sendAsFormdata]="true" 
        [multiple]="true"
       >
      </app-file-uploader>
      • Example 2: upload file using attachment-section component
       <app-attachment-section  
       [sendAsFormdata]="true">
      </app-attachment-section>
      </app-file-uploader>
  • Input Mapping and Filtering

    The app-input component now supports two powerful inputs:

    • [mapFn] — A function that modifies the input value before it's rendered, allowing for transformations like uppercase conversion, formatting, or character replacement.
    • [filterFn] — A function that validates or restricts what characters can be typed, pasted, or dropped into the input.

    Built-in Utility Classes Provided:

    • InputFilters:
      • InputFilters.arabicOnly
      • InputFilters.englishOnly
      • InputFilters.digitsOnly
      • InputFilters.buildPattern()
    • InputMappers:
      • InputMappers.toUpperCase
      • InputMappers.toLowerCase

    Examples:

    • Example 1: Custom filter – Allow only numbers

      numbersOnlyFilter: InputFilterFn = (char, current, next, event) => {
        return /^[0-9]+$/.test(char);
      };
      <app-input
        label="Phone Number"
        [filterFn]="numbersOnlyFilter"
      ></app-input>
    • Example 2: Built-in filter – Arabic-only characters

      import { InputFilters } from 'bpm-core';
      
      class MyComponent {
        InputFilters = InputFilters;
      }
      <app-input
        label="الاسم بالعربية"
        [filterFn]="InputFilters.arabicOnly"
      ></app-input>

      💡 Hint: Use InputFilters.buildPattern() when you need to customize exactly which characters are allowed in an input.
      You can combine multiple character groups like Arabic letters, digits, symbols, and spaces then generate a custom filter function using .build().

    • Example 3: Custom filter using buildPattern() — Allow English letters, digits, spaces, and symbols

      import { InputFilters } from 'bpm-core';
      
      class MyComponent {
        customEnglishFilter = InputFilters.buildPattern()
          .allowEnglishAlphabets()
          .allowDigits()
          .allowSpace()
          .allowSymbols()
          .build();
      }
      <app-input
        label="Username"
        [filterFn]="customEnglishFilter"
      ></app-input>
    • Example 4: Custom map — Capitalize first letter of each word

      capitalizeWordsMapFn: InputMapFn = (char, current, next) => {
        return next.replace(/\b\w/g, (match) => match.toUpperCase());
      };
      <app-input
        label="Full Name"
        [mapFn]="capitalizeWordsMapFn"
      ></app-input>
    • Example 5: Built-in map — Force lowercase

      import { InputMappers } from 'bpm-core';
      
      class MyComponent {
        InputMappers = InputMappers;
      }
      <app-input
        label="Email"
        [mapFn]="InputMappers.toLowercase"
      ></app-input>
  • Time Picker

    To use it, import TimepickerComponent in your TypeScript file and add <app-timepicker> to your template. For more information, hover over the selector after adding it to your template.

  • Summary Section

    This is a stage that appears before the request stage.

    To enable this feature:

    • The summary section must be the first item in the workflowSteps list.

    • The details object for this step must include the following property:

      "stage0": {
        "isStage0": "true"
      }

    Example of a full payload:

    {
      "data": {
        "requester": { ... },
        "workflowSteps": [
          {
            "actor": {
              "recipient": {
                "role": "stage0"
              }
            },
            "details": {
              "litigantType": "",
              "other": "",
              "requestType": "",
              "reqSubject": "",
              "claimValue": "",
              "subClassification": "",
              "reqDetails": "",
              "plainName": "",
              "stage0": {
                "isStage0": "true"
              }
            }
          },
          {
            "actor": { ... },
            "date": "",
            "details": { ... }
          }
        ],
        "request": { ... },
        "form": { ... }
      },
      "meta": { ... }
    }

Changes Log

[email protected] — 2025-10-06

  • fix(npm): resolve npm install issues.

[email protected] — 2025-09-18

  • feat(cli): add generate new command to generate an initial service from a config like the form builder.
  • fix(cli/mock-data): restructure LOVs in payload and enhance logged path generation.
  • [BREAKING CHANGE] fix(custom-searchable): update the default value of the key input property to 'value' (was 'description').
  • feat(radio): activate and enhance radio component.
  • refactor: remove ngx-translate package.
  • [BREAKING CHANGE] refactor(input & textarea): remove 'enOnly' and 'arOnly' type values, use filterFn instead.
  • fix(input-number): prevent dropping text into input number.
  • [BREAKING CHANGE] refactor(attachment-section): replace isRequired input with descriptionRequired input and add commentsRequired input.
  • fix(attachment-section): hide label in read-only mode if no attachments.
  • fix(custom-searchable): add padding for search and clear icons in RTL.
  • feat(input): add maxLength input property.
  • feat(datepicker): support typed inputs for minDate, maxDate, customMinDate, and customMaxDate.
  • feat(search-employee): add selectedEmployee output to emit the full details of the selected employee.

[email protected] — 2025-09-01

  • feat(cli): add generate command with mock subcommand to produce mock data
  • fix(file-uploader): update max length error visibility when removing an attachment from multiple files.

[email protected] — 2025-08-25

  • feat(cli): implement BPM Core CLI with deploy command.
  • refactor(app-input): remove keyType parameter from filter function.

[email protected] — 2025-08-06

  • feat(app-input): app-input now supports filterFn and mapFn inputs.
  • feat(validation-errors): Added default error messages for max and min validators.

[email protected] — 2025-07-30

  • fix(file-uploader): avoid clearing attachments with multiple enabled.
  • fix(file-uploader): activate "maxLength" input to specify maximum number of files
  • fix(attachment-section): resolve _intl console error and translate MatPaginator labels to Arabic.

[email protected] — 2025-07-23

  • fix: resolve issue with downloading attachments from comments history.

[email protected] — 2025-07-17

  • Added default placeholders for all inputs.
  • Ensured placeholders passed to inputs display correctly.