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/validation

v0.0.34

Published

Template matching, existence verification, and conformance validation orchestrator for Conformetry

Readme

👔 Conformetry Validation

npm

The validation orchestrator for Conformetry: it matches instances to templates, checks the declared files exist, routes each document to the validator that claims its extension, and deduplicates what comes back.

npm install --save-dev @conformetry/validation

Usage

import { ValidationService } from "@conformetry/validation";

const result = validationService.validate({
  instances, // from DiscoveryService.findInstances
  templates, // from DiscoveryService.collectTemplate
  languageNames: ["typescript"], // optional filter
  threshold: 0.9, // optional run-level conformance floor
});
// → { ok, fileResults, checkedPaths, scores, unmatched }

Instances arrive from the caller. This package used to scan the workspace for project.json files and infer scope from generator name suffixes, which made a generic package depend on one repository's layout.

Order of checks

  1. Files exist. Every file the matched template declares is checked first, whatever its extension. A missing file cannot be compared, and reporting it once is clearer than every language reporting it in turn. See @conformetry/languages, whose FilesService owns that pass.
  2. Documents compare. Each validator sees only the documents whose extensions it claims.

Instances that matched no template are reported alongside the content differences rather than skipped, so one report covers both "this file is wrong" and "conformetry cannot tell what this path was generated from".

Scoring

Each matched instance is scored by how much of its template it honours, and passes when that reaches the threshold resolved for it — the instance group's, else the generator's, else the run's, else a perfect 1.

Scores are taken before deduplication. Deduplication decides which template gets to print a shared file's finding, which is a reporting concern; a score answers how well one instance honours its own template, so collapsing the report must not change it.

ok is false when any instance falls below its threshold, or when any instance matched no template at all — an unmatched path has no template to be held to, so no threshold could excuse it.

Language resolution

Which languages a run needs is @conformetry/languages's question, not this package's. LanguagesService is injected, asked which engines claim the extensions the run's templates declare, and its answer is what validate dispatches over. An extension no language claims is compared line by line by the text fallback, so no template file goes unchecked.

Nothing is imported on demand any more. That mechanism bought install-time optionality nobody was spending — the fallback makes every run need the package regardless — so the specifier registry, the module loader, and the loadLanguageModule option went with it. The trade-off, and the three alternatives weighed against it, are recorded in ADR 0006.

Exports

ValidationService, ValidationDeduplicationService, ValidationFindingsService, ValidationScoringService, ValidationModule, and the RunValidationArguments, RunValidationResult, and InstanceFileResults types.

Test

nx run conformetry-validation:vitest

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-validation, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.

| Measure | Value | | --- | --- | | Callables | 58 | | Files | 18 | | Calls traced | 61 | | Call stacks | 0 | | Deepest stack | 0 | | Stacks through recursion | 0 | | Unfollowable calls | 2 |

Limits

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

| Limit | Value | | --- | --- | | maximumDepth | 13 | | maximumBreadth | 10 |

Call stacks (depth)

None.

Breadth

| Callable | Breadth | Calls directly | Location | | --- | --- | --- | --- | | ValidationService.validate | 10 | ConfigurationService.matchInstances, ValidationService.selectValidators, LanguagesService.resolveValidators, ValidationService.readTemplateExtensions, ValidationService.map(…), ValidationScoringService.scoreInstances, ValidationDeduplicationService.deduplicate, ValidationFindingsService.buildUnmatchedResults, ValidationService.map(…), ValidationService.every(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:194 | | ValidationService.compareInstance | 6 | ConfigurationService.prepareDocuments, ValidationService.readClaimedExtensions, FilesService.checkInstanceFiles, ValidationService.map(…), ValidationService.flatMap(…), ValidationService.reduce(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:57 | | ValidationScoringService.scoreInstance | 5 | ValidationScoringService.reduce(…), ScoringService.calculateScore, ValidationScoringService.resolveThreshold, ValidationScoringService.resolveInstancePath, ValidationScoringService.some(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-scoring.service.ts:74 |

| Callable | Breadth | Calls directly | Location | | --- | --- | --- | --- | | ValidationService.inferPlaceholders | 5 | ConfigurationService.prepareDocuments, ValidationService.readClaimedExtensions, RunnerService.captureDocuments, ValidationService.flatMap(…), ValidationService.filter(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:102 | | RunnerService.runValidator | 4 | RunnerService.map(…), RunnerService.filter(…), RunnerService.filter(…), RunnerService.reduce(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:108 | | ValidationFindingsService.reportMissingPlaceholders | 3 | ValidationFindingsService.filter(…), ValidationFindingsService.map(…), ValidationFindingsService.map(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:109 | | ValidationService.map(…) | 3 | ValidationService.inferPlaceholders, ValidationFindingsService.reportMissingPlaceholders, ValidationService.compareInstance | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:205 | | ValidationDeduplicationService.deduplicate | 2 | ValidationDeduplicationService.selectOwners, ValidationDeduplicationService.flatMap(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-deduplication.service.ts:90 | | ValidationFindingsService.buildUnmatchedResults | 2 | ValidationFindingsService.resolveTemplatesRootPath, ValidationFindingsService.map(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:69 | | ValidationScoringService.scoreInstances | 2 | ValidationScoringService.scoreInstance, ValidationScoringService.resolveScoreKey | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-scoring.service.ts:119 | | RunnerService.captureDocuments | 1 | RunnerService.reduce(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:75 | | RunnerService.reduce(…) | 1 | RunnerService.find(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:80 | | RunnerService.find(…) | 1 | RunnerService.claimsDocument | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:81 | | RunnerService.filter(…) | 1 | RunnerService.claimsDocument | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:112 | | RunnerService.map(…) | 1 | RunnerService.validateDocument | projects/ic-suite/conformetry/conformetry-validation/src/modules/runner/runner.service.ts:115 | | ValidationDeduplicationService.selectOwners | 1 | ValidationDeduplicationService.compareInstances | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-deduplication.service.ts:57 | | ValidationDeduplicationService.flatMap(…) | 1 | ValidationDeduplicationService.filter(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-deduplication.service.ts:94 | | ValidationDeduplicationService.filter(…) | 1 | ValidationDeduplicationService.resolveFindingKey | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-deduplication.service.ts:95 | | ValidationFindingsService.resolveTemplatesRootPath | 1 | ValidationFindingsService.map(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:58 | | ValidationFindingsService.map(…) | 1 | ValidationFindingsService.describeReason | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:75 | | ValidationFindingsService.map(…) | 1 | ValidationFindingsService.filter(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:121 | | ValidationFindingsService.filter(…) | 1 | ValidationFindingsService.some(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-findings.service.ts:124 | | ValidationScoringService.reduce(…) | 1 | ScoringService.sumWeights | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-scoring.service.ts:75 | | ValidationScoringService.some(…) | 1 | ValidationScoringService.some(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation-scoring.service.ts:92 | | ValidationService.map(…) | 1 | RunnerService.runValidator | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:68 | | ValidationService.readClaimedExtensions | 1 | ValidationService.flatMap(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:142 | | ValidationService.readTemplateExtensions | 1 | ValidationService.flatMap(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:151 | | ValidationService.flatMap(…) | 1 | ValidationService.map(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:154 | | ValidationService.selectValidators | 1 | ValidationService.filter(…) | projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:164 |

🕸️ 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_examples["conformetry-examples"]
  conformetry_languages["conformetry-languages"]
  conformetry_nx["conformetry-nx"]
  conformetry_validation["conformetry-validation"]
  conformetry_cli --> conformetry_validation
  conformetry_examples --> conformetry_validation
  conformetry_nx --> conformetry_validation
  conformetry_validation --> conformetry_configuration
  conformetry_validation --> conformetry_core
  conformetry_validation --> conformetry_languages
  classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
  class conformetry_validation subject

NestJS Module Graph

flowchart LR
  ConfigurationModule
  DifferencesModule
  FilesModule
  InputModule
  InstanceDiscoveryModule
  InstanceGroupModule
  JsonModule
  JupyterModule
  LanguagesModule
  MarkdownModule
  PythonModule
  RenderingModule
  RunnerModule
  ScoringModule
  TemplateDiscoveryModule
  TextModule
  TypescriptModule
  ValidationModule
  ConfigurationModule --> InputModule
  ConfigurationModule --> InstanceDiscoveryModule
  ConfigurationModule --> InstanceGroupModule
  ConfigurationModule --> RenderingModule
  ConfigurationModule --> TemplateDiscoveryModule
  FilesModule --> ConfigurationModule
  FilesModule --> DifferencesModule
  InstanceDiscoveryModule --> InstanceGroupModule
  InstanceDiscoveryModule --> RenderingModule
  InstanceDiscoveryModule --> TemplateDiscoveryModule
  JsonModule --> ScoringModule
  JupyterModule --> JsonModule
  JupyterModule --> MarkdownModule
  JupyterModule --> PythonModule
  LanguagesModule --> JsonModule
  LanguagesModule --> JupyterModule
  LanguagesModule --> MarkdownModule
  LanguagesModule --> PythonModule
  LanguagesModule --> TextModule
  LanguagesModule --> TypescriptModule
  MarkdownModule --> ScoringModule
  PythonModule --> DifferencesModule
  PythonModule --> ScoringModule
  TemplateDiscoveryModule --> RenderingModule
  TypescriptModule --> ScoringModule
  ValidationModule --> ConfigurationModule
  ValidationModule --> FilesModule
  ValidationModule --> LanguagesModule
  ValidationModule --> RunnerModule
  ValidationModule --> ScoringModule

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_modules_runner_runner_constants_ts["src/modules/runner/runner.constants.ts"]
  file_src_modules_runner_runner_module_ts["src/modules/runner/runner.module.ts"]
  file_src_modules_runner_runner_module_unit_test_ts["src/modules/runner/runner.module.unit.test.ts"]
  file_src_modules_runner_runner_service_ts["src/modules/runner/runner.service.ts"]
  file_src_modules_runner_runner_service_unit_test_ts["src/modules/runner/runner.service.unit.test.ts"]
  file_src_modules_runner_runner_types_ts["src/modules/runner/runner.types.ts"]
  file_src_modules_validation_validation_deduplication_service_ts["src/modules/validation/validation-deduplication.service.ts"]
  file_src_modules_validation_validation_deduplication_service_unit_test_ts["src/modules/validation/validation-deduplication.service.unit.test.ts"]
  file_src_modules_validation_validation_findings_service_ts["src/modules/validation/validation-findings.service.ts"]
  file_src_modules_validation_validation_findings_service_unit_test_ts["src/modules/validation/validation-findings.service.unit.test.ts"]
  file_src_modules_validation_validation_scoring_service_ts["src/modules/validation/validation-scoring.service.ts"]
  file_src_modules_validation_validation_scoring_service_unit_test_ts["src/modules/validation/validation-scoring.service.unit.test.ts"]
  file_src_modules_validation_validation_constants_ts["src/modules/validation/validation.constants.ts"]
  file_src_modules_validation_validation_module_ts["src/modules/validation/validation.module.ts"]
  file_src_modules_validation_validation_service_ts["src/modules/validation/validation.service.ts"]
  file_src_modules_validation_validation_service_unit_test_ts["src/modules/validation/validation.service.unit.test.ts"]
  file_src_modules_validation_validation_types_ts["src/modules/validation/validation.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_modules_runner_runner_module_ts --> file_src_modules_runner_runner_service_ts
  file_src_modules_runner_runner_module_unit_test_ts --> file_src_modules_runner_runner_module_ts
  file_src_modules_runner_runner_module_unit_test_ts --> file_src_modules_runner_runner_service_ts
  file_src_modules_runner_runner_service_ts --> file_src_modules_runner_runner_types_ts
  file_src_modules_runner_runner_service_unit_test_ts --> file_src_modules_runner_runner_service_ts
  file_src_modules_validation_validation_deduplication_service_ts --> file_src_modules_validation_validation_constants_ts
  file_src_modules_validation_validation_deduplication_service_ts --> file_src_modules_validation_validation_types_ts
  file_src_modules_validation_validation_deduplication_service_unit_test_ts --> file_src_modules_validation_validation_deduplication_service_ts
  file_src_modules_validation_validation_deduplication_service_unit_test_ts --> file_src_modules_validation_validation_types_ts
  file_src_modules_validation_validation_findings_service_ts --> file_src_modules_validation_validation_types_ts
  file_src_modules_validation_validation_findings_service_unit_test_ts --> file_src_modules_validation_validation_findings_service_ts
  file_src_modules_validation_validation_scoring_service_ts --> file_src_modules_validation_validation_constants_ts
  file_src_modules_validation_validation_scoring_service_ts --> file_src_modules_validation_validation_types_ts
  file_src_modules_validation_validation_scoring_service_unit_test_ts --> file_src_modules_validation_validation_scoring_service_ts
  file_src_modules_validation_validation_module_ts --> file_src_modules_runner_runner_module_ts
  file_src_modules_validation_validation_module_ts --> file_src_modules_validation_validation_deduplication_service_ts
  file_src_modules_validation_validation_module_ts --> file_src_modules_validation_validation_findings_service_ts
  file_src_modules_validation_validation_module_ts --> file_src_modules_validation_validation_scoring_service_ts
  file_src_modules_validation_validation_module_ts --> file_src_modules_validation_validation_service_ts
  file_src_modules_validation_validation_service_ts --> file_src_modules_runner_runner_service_ts
  file_src_modules_validation_validation_service_ts --> file_src_modules_validation_validation_deduplication_service_ts
  file_src_modules_validation_validation_service_ts --> file_src_modules_validation_validation_findings_service_ts
  file_src_modules_validation_validation_service_ts --> file_src_modules_validation_validation_scoring_service_ts
  file_src_modules_validation_validation_service_ts --> file_src_modules_validation_validation_types_ts
  file_src_modules_validation_validation_service_unit_test_ts --> file_src_modules_validation_validation_module_ts
  file_src_modules_validation_validation_service_unit_test_ts --> file_src_modules_validation_validation_service_ts
  file_src_modules_validation_validation_service_unit_test_ts --> file_src_modules_validation_validation_types_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