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

@contracthero/common

v1.2.0

Published

`@contracthero/common` contains utility functions that are used across the ContractHero platform.

Readme

Common

@contracthero/common contains utility functions that are used across the ContractHero platform.

ocr

partionBlocks

Simplifying textract result by grouping and reording blocks in similar positions (like columns) into the same group.

parser

Different kind of data parser especially used to convert data from raw contract PDFs into common formats.

  • parsePaymentCycle: maps free-text / AI-extracted billing-frequency phrases (EN + DE) to a payment-cycle enum key. Recognised cycles: PER_HOUR, PER_DAY, PER_UNIT, PROJECT_BASED, ONETIME, WEEKLY, BIWEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, BIANNUAL, YEARLY, NO_PAYMENT. Matching is case-insensitive and tolerant of commas/newlines; unknown input throws a ParserError. When adding a new cycle, add its synonyms here so document analysis can auto-fill it.

Document:

  • acceptedMimetypeExtensionMap: This constant provides a mapping of accepted MIME types to their corresponding file extensions. It can be used to validate file types based on their MIME type or file extension and ensure that only supported types are processed.
  • isAcceptedMimetype: Checks if mimetype is one of the accepted mimetypes

Lexical:

  • extractTextFromLexical: This function extract text from simple lexical string.

dashboard

Shared types and defaults for the customisable dashboard, used by both the API (wrapped in class-validator DTOs) and the webapp (to render and seed layouts). Kept framework-agnostic — plain types and data, no validation library.

  • DashboardConfiguration / WidgetConfig / WidgetRect: the stored layout shape — an ordered list of widgets, each with a source (SYSTEM | REPORT), an id, and a rect. x + width are in 24-column grid units; y and height are optional, derived by the frontend this version (reserved for v2 resize).
  • WidgetSource: where a widget comes from — SYSTEM (built-in) or REPORT (a user report; reserved for the reporting story).
  • WidgetType: what a widget renders as — metric, table, list, chart.
  • SystemWidgetId / SYSTEM_WIDGETS: the catalog of built-in widgets and their default sizes (placement lives on the dashboard, not in the catalog).
  • DEFAULT_DASHBOARD_CONFIGURATION: the default layout used to seed a member who has not customised their own, in dashboard order.

Installation

Use npm or yarn to install @contracthero/common

npm install @contracthero/common

Type definitions for TypeScript are included.

Release a new version

Releases are automated. Every pull request must bump the version in package.json — CI fails the PR if the version is unchanged or not higher than the version on the target branch (semver-aware comparison).

On merge to main, the ci workflow runs the test job (lint + tests) and, only if it passes, the publish job detects the version change, builds, publishes the new version to the npm registry, and tags the commit v<version>. No manual npm publish is needed.

Publishing authenticates via the NPM_TOKEN repository secret (an npm automation token with publish access to @contracthero).