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

@conformetry/core

v0.0.31

Published

Core types and structured contracts for the Conformetry code generation and conformance toolchain

Readme

👔 Conformetry Core

npm

The shared contract every other Conformetry package builds on. It is the contracts leaf of the five-layer spine — core <- configuration <- analysis <- output <- cli — so it declares types and holds nothing executable: no service, no NestJS module, no dependency on anything else in the conformetry graph. Importing a result type from here therefore drags nothing behind it.

npm install --save-dev @conformetry/core

What it owns

| File | Responsibility | | ---- | -------------- | | lib/differences.types.ts | The structured ConformetryDifference shape, and the language and category unions that discriminate it | | lib/inventory.types.ts | What discovery found, as the output layer renders it: templates, instances, and the pairings between them | | lib/runner.types.ts | The ConformetryLanguageValidator contract and the document, payload, and result shapes it is spoken in | | lib/scoring.types.ts | InstanceScore: how well one matched instance honours the template it matched |

The behavior these types describe lives above them. The difference and scoring primitives, the file-existence pass, and every per-format validator are in @conformetry/languages; the validator envelope is in @conformetry/validation; rendering is in @conformetry/output.

"Language" here means a validator for one file format — TypeScript, JSON, markdown, Python. The word "plugin" is reserved for the Nx plugin in @conformetry/nx, and is deliberately not used for these.

Writing a language validator

A validator supplies a descriptor and a single-document comparison. Extension filtering, grouping differences under their file, and assembling the result are handled once by RunnerService in @conformetry/validation, so a language package contains only its comparison logic:

@Injectable()
export class ExampleValidatorService implements ConformetryLanguageValidator {
  public readonly descriptor = EXAMPLE_VALIDATOR_DESCRIPTOR;

  public validateDocument(
    document: PreparedValidationDocument,
  ): DocumentValidationResult {
    // compare document.renderedTemplate against document.instance
    return { differences, totalWeight };
  }
}

Weight and score

A validator reports how much the template asked for alongside what it found. totalWeight counts every requirement the comparison weighed — conforming ones included, because leaving them out would score an instance only against the parts of itself that are already wrong.

Each difference may carry a weight, defaulting to 1. It says how many requirements that one finding stands in for: a validator reports a missing class once, however many members it held, so weighing the finding by its subtree is what keeps deleting a class from costing the same as deleting an import. No per-kind weight table is needed — a class is worth more because it contains more.

score = (totalWeight - sum(difference.weight ?? 1)) / totalWeight

ScoringService, in @conformetry/languages, owns that arithmetic, including the two cases worth getting right once: the default weight of a finding that declares none, and an empty template whose denominator is zero and which therefore conforms perfectly.

@conformetry/validation drives the registered validators; they are never responsible for discovering files or loading configuration.

Structured differences

Differences carry the location on both sides — instance and template — along with the expected value and a concrete fix. That last field is the point: reports are meant to be actionable by whoever, or whatever, has to make the file conform. Prefer populating instanceLine/templateLine (or instancePath for document formats) over folding a location into the message.

Exports

Types only: ConformetryDifference, ConformetryDifferenceLanguage, ConformetryDifferenceType, ConformetryLanguageValidator, DocumentValidationResult, InstanceScore, InventoriedInstance, InventoriedPairing, InventoriedTemplate, LanguageValidatorDescriptor, LanguageValidatorResult, PreparedValidationDocument, PreparedValidationPayload, and ValidationFileResult.

Test

nx run conformetry-core:vitest

One test, and it asserts the property that makes this package a leaf: the module contributes nothing at runtime, so importing a result type from here cannot drag a service or a NestJS module behind it. Exporting one value fails it.

License

MIT — see LICENSE.

👔 Conformetry

This project was generated from the nestjs-service-project conformetry template.

🔭 Callidescope

Call stacks traced through projects/ic-suite/conformetry/conformetry-core, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.

| Measure | Value | | --- | --- | | Callables | 1 | | Files | 11 | | Calls traced | 0 | | Call stacks | 0 | | Deepest stack | 0 | | Stacks through recursion | 0 | | Unfollowable calls | 0 |

Limits

What this project is judged against, as declared in its own callidescope.config.ts.

| Limit | Value | | --- | --- | | maximumDepth | 1 | | maximumBreadth | 1 |

Call stacks (depth)

None.

Breadth

None.

🕸️ Codependix

Dependency graphs exported by codependix, regenerated by nx run configuration:codependix:write.

Nx Neighborhood

graph LR
  conformetry_cli["conformetry-cli"]
  conformetry_configuration["conformetry-configuration"]
  conformetry_core["conformetry-core"]
  conformetry_languages["conformetry-languages"]
  conformetry_output["conformetry-output"]
  conformetry_validation["conformetry-validation"]
  conformetry_cli --> conformetry_core
  conformetry_configuration --> conformetry_core
  conformetry_languages --> conformetry_core
  conformetry_output --> conformetry_core
  conformetry_validation --> conformetry_core
  classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
  class conformetry_core subject

NestJS Module Graph

flowchart LR
  ConformetryCoreModule

File Imports

graph LR
  file_callidescope_config_ts["callidescope.config.ts"]
  file_codependix_config_ts["codependix.config.ts"]
  file_codometer_config_ts["codometer.config.ts"]
  file_eslint_config_ts["eslint.config.ts"]
  file_src_index_ts["src/index.ts"]
  file_src_index_unit_test_ts["src/index.unit.test.ts"]
  file_src_modules_conformetry_core_conformetry_core_constants_ts["src/modules/conformetry-core/conformetry-core.constants.ts"]
  file_src_modules_conformetry_core_conformetry_core_module_ts["src/modules/conformetry-core/conformetry-core.module.ts"]
  file_src_modules_conformetry_core_conformetry_core_service_ts["src/modules/conformetry-core/conformetry-core.service.ts"]
  file_src_modules_conformetry_core_conformetry_core_service_unit_test_ts["src/modules/conformetry-core/conformetry-core.service.unit.test.ts"]
  file_src_modules_conformetry_core_conformetry_core_types_ts["src/modules/conformetry-core/conformetry-core.types.ts"]
  file_testing_mocks_ts["testing/mocks.ts"]
  file_testing_setup_ts["testing/setup.ts"]
  file_vite_config_ts["vite.config.ts"]
  file_vitest_config_ts["vitest.config.ts"]
  file_src_index_unit_test_ts --> file_src_index_ts
  file_src_modules_conformetry_core_conformetry_core_module_ts --> file_src_modules_conformetry_core_conformetry_core_service_ts
  file_src_modules_conformetry_core_conformetry_core_service_unit_test_ts --> file_src_modules_conformetry_core_conformetry_core_service_ts

⏲️ Codometer

Project

Lines of Code Repository Size Folders Source Files

Measured Targets

Compiled JavaScript Size

TypeScript

TypeScript Files Interfaces Generic Declarations Enums Decorators Doc Comments Static Methods

JavaScript

JavaScript Files Test Files External Packages Classes Functions Methods Sync Functions Async Functions Constants Imports Exported Symbols Comments Comment Lines TODO Comments

Python

Python Files Python Lines Python Classes Python Functions Python Protocols Python Constants Python Imports Python Decorators Docstrings Docstring Lines Python Comments Python Comment Lines

JSON

JSON Files JSON Lines JSON Objects JSON Arrays JSON Properties JSON Strings JSON Numbers JSON Booleans JSON Nulls JSON Items JSON Nodes JSON Max Depth

YAML

YAML Files YAML Lines YAML Documents YAML Mappings YAML Sequences YAML Keys YAML Scalars YAML Anchors YAML Aliases YAML Comments YAML Max Depth

TOML

TOML Files TOML Lines TOML Tables TOML Array Tables TOML Keys TOML Arrays TOML Comments

Shell

Shell Files Shell Lines Shell Functions Shell Variables Shell Exports Shell Conditionals Shell Loops Shell Pipelines Shebangs Shell Comments Shell Comment Lines

SQL

SQL Files SQL Lines SQL Statements SQL Selects SQL Inserts SQL Updates SQL Deletes SQL Creates SQL Joins SQL CTEs SQL Comments

HCL

HCL Files HCL Lines HCL Blocks HCL Resources HCL Variables HCL Outputs HCL Attributes HCL Interpolations HCL Comments

CSS

CSS Files CSS Lines CSS Rules CSS Selectors CSS Declarations CSS At Rules CSS Media Queries CSS Custom Properties CSS Comments

Conventions

Module Files Service Files Command Files Constants Files Types Files Utilities Files TypeORM Entities Unit Tests Integration Tests End To End Tests CSS Comment Budget HCL Comment Budget Python Comment Budget SQL Comment Budget TOML Comment Budget TypeScript Comment Budget YAML Comment Budget Shell Comment Budget

Jupyter

Notebooks Notebook Cells Code Cells Markdown Cells Raw Cells Executed Cells Cell Outputs Notebook Code Lines Notebook Classes Notebook Functions Notebook Imports Notebook Decorators Notebook Prose Lines Notebook Headings Notebook Links Notebook Images Notebook Code Blocks Notebook Properties Notebook Nodes Notebook Max Depth

Markdown

Markdown Files Markdown Lines H1 H2 H3 H4 H5 H6 Paragraphs Lists List Items Task List Items Tables Table Rows Links Images Code Blocks Inline Code Block Quotes Thematic Breaks