@conformetry/cli
v0.0.33
Published
Command-line toolchain for scaffolding code from templates and holding implementations to them
Maintainers
Readme
👔 Conformetry
Scaffold from a template, then hold the result to it.
Conformetry is a code generation toolchain whose templates keep working after generation. The same template folder that produces a new module is the specification that module is later checked against, so scaffolding conventions and enforcing them are one artifact instead of two that drift apart.
npm install --save-dev @conformetry/cli# Scaffold a new module from the `nestjs-service-module` template
conformetry generate --config projects/configuration/conformetry.config.ts --template nestjs-service-module --name billing
# Check every existing instance still matches the template it came from
conformetry validate --config projects/configuration/conformetry.config.tsWhy
Scaffolding tools stop caring the moment the files are written. A month later
a module has lost its constants.ts, a service dropped its section comments,
and nobody notices until someone reads it. Linters can't help — the convention
isn't a rule about syntax, it's a rule about the shape of a template that only
exists in a generator's output directory.
Conformetry closes the loop. Templates are rendered twice: once to create files, and again — with the same substitutions, by the same renderer — to compare against the files that already exist. A file that would not be regenerated the way it is written today is a finding.
Comparison is structural, not textual. A TypeScript instance is compared as
a syntax tree, markdown as an mdast tree, Python through Python's own ast
module. Reformatting a file, renaming a local, or adding a method does not fail
validation; deleting a required export, dropping a declared file, or losing a
section comment does.
Install
| Package | Install when |
| ------- | ------------ |
| @conformetry/cli | You want the conformetry command |
| @conformetry/nx | Your workspace is an Nx monorepo |
| @conformetry/generation + @conformetry/validation | You are embedding conformetry in your own tool |
npm install --save-dev @conformetry/cli
# or
pnpm add --save-dev @conformetry/cliNode.js 20 or newer. Validating Python or Jupyter instances additionally needs
python3 on PATH — the Python validator compares through the interpreter's
own ast module rather than reimplementing a parser.
Commands
conformetry generate
Renders one template folder into a target directory.
| Flag | Purpose |
| ---- | ------- |
| --template [name] | Which template from the registry to render. Asked for when omitted |
| --config <path> | Configuration file to read. Required: the run is refused without it, and no filename is searched for |
| --directory [path] | Where to write the rendered files. Required: the run is refused without it |
A blank --config is refused by @conformetry/configuration with a
ConfigurationPathRequiredError naming the --config flag; commander refuses a
missing one before that.
A template's own inputs are passed as flags alongside these:
conformetry generate --config projects/configuration/conformetry.config.ts --template react-component --name search-barOmitting --template at a terminal offers a picker — an autocomplete over
every configured template, each shown with its description, filtering as you
type. A name like nestjs-service-module is long by design, and typing
service is what makes it cheap to reach; nobody has to break off and run
conformetry templates to look one up. Passing --template skips the picker
entirely, because supplying a value is itself how a caller opts out of being
asked.
With no terminal, a missing template is refused — listing every available name — rather than waited on, so a CI job fails immediately instead of hanging until it times out.
--generator was removed rather than kept as an alias, and passing it is
refused by name. Unknown flags are accepted here so a template's own inputs can
be passed as flags, which means commander would otherwise read --generator as
an input nothing declares and drop it silently — the "appears to work" the
rename set out to avoid.
Unknown flags are accepted deliberately. Which inputs exist is not known until
the template is chosen, so they are matched against that template's schema
rather than declared ahead of time. This is also why the template is selected
with --template and not --name: almost every template takes a name, and
reserving that flag would leave no way to supply it.
Missing inputs are prompted for whenever stdin is a terminal, and there is no flag to turn that off — an attached terminal is the whole condition, so a script, a hook, or a CI job is never prompted.
Every input a template declares is required. A template substitutes each
of its placeholders, and mustache renders a missing one as an empty string
rather than failing, so an optional input would quietly produce a hole in the
generated file. nx g conformetry:<template> has always taken that line; this
command now does too, so the same template asks for the same values whichever
way it is run.
With no terminal, a missing input is therefore refused — naming the flag to
pass — and the run exits non-zero. That refusal is the load-bearing half.
prompts does not fail on a non-terminal stdin: it draws its menu, never
resolves, and lets the process exit 0 having generated nothing, which is how
this command used to hang in CI. It now asserts a terminal before prompting at
all and reports a rejected command line instead.
conformetry templates
Names every template the loaded configuration declares, with its description
and folder. generate and validate both offer that list as a picker now, so
this command is for reading it rather than for looking a name up before typing
one.
| Flag | Purpose |
| ---- | ------- |
| --config <path> | Configuration file to read. Required |
| --instances [globs] | Comma-separated paths or globs; report only the templates that explain them |
| --json | Write the listing as JSON |
With --instances it answers the other direction — which templates explain a
given path:
conformetry templates --config projects/configuration/conformetry.config.ts --instances packages/billing/src/modules/billing nestjs-service-module (nsm)
Generate a NestJS service module
Template: projects/configuration/conformetry-templates/nestjs-service-module
Instances:
packages/billing/src/modules/billing 5/5 files 100%
nestjs-command-module (ncm)
Generate a NestJS command module
Template: projects/configuration/conformetry-templates/nestjs-command-module
Instances:
packages/billing/src/modules/billing 3/5 files 60%Every template that explains the path is listed, because a path can belong to more than one. Nothing records where an instance came from — attribution is inferred from how much of a template's structure the path already has — so a single verdict would hide the tie that makes an ambiguous instance ambiguous.
A bare listing omits the instances; they appear only when you narrow by path, so the registry stays readable.
conformetry instances
Lists every instance the configured globs find, and which templates explain each one. The complement of the command above: that one asks what standard a path answers to, this one asks what generated code exists.
conformetry instances --config projects/configuration/conformetry.config.ts --templates nestjs-service-module packages/billing/src/modules/billing
Templates:
nestjs-service-module 5/5 files 100%| Flag | Purpose |
| ---- | ------- |
| --config <path> | Configuration file to read. Required |
| --json | Write the listing as JSON |
| --templates [names] | Comma-separated template names; report only the instances they explain |
Each path printed is usable as the --instances argument above, so the two
compose without reformatting. --templates is how you find every instance a
template change would affect.
Note that instances located by project tags rather than globs are invisible here: tag resolution belongs to the Nx plugin, and the command-line host locates instances by glob alone.
conformetry validate
Expands the configured instance globs and compares everything it finds against the template it was generated from.
| Flag | Purpose |
| ---- | ------- |
| --config <path> | Configuration file to read. Required |
| --instances [globs] | Comma-separated globs to validate, overriding the configuration |
| --languages [names] | Comma-separated languages to run — typescript, markdown, python, json, jupyter, text |
| --templates [names] | Comma-separated template names to narrow the run to, or all for every one |
| --threshold [ratio] | Lowest conformance score an instance may have, 0 to 1. The weakest of the three threshold levels |
Every flag but --config is optional; an absent filter means "everything". The command exits
non-zero when any instance scores below its threshold, which is what makes it
usable as a pre-merge gate.
--templates and --instances are two independent filters, and a run
is their intersection — each removes candidates from one side before templates
and instances are paired:
| --instances | --templates | What is validated |
| ------------- | ------------- | ----------------- |
| absent | all, or absent with no terminal | Every template against every configured instance |
| present | all, or absent with no terminal | The globbed instances against every applicable template |
| absent | named | Every instance belonging to those templates, against them |
| present | named | The globbed instances narrowed to those templates' instances |
Omitting --templates at a terminal offers the same picker generate does,
ticking more than one, with all offered alongside the names. With no terminal
it falls back to every template rather than asking — which is exactly what an
invocation predating this flag already did, so scripts and CI jobs are
unaffected. all is reserved: a configuration cannot declare a template of
that name.
A template whose instances are scoped by project tags cannot be located by
this host, and a narrowed run says so rather than reporting nothing found. A
group carrying tags reads its globs inside each project the tags select, so
src/modules/* has no meaning until a project root is joined to it — which
only a host with a project graph can do. Such a group is left out rather than
expanded from the working directory, where it would match whatever happened to
sit at the same relative path and measure it against a template scoped to other
projects. Run those through @conformetry/nx,
or pass --instances with the paths to check.
Naming a template that does not exist is refused, listing the real names, rather than silently narrowing to nothing. A selection that matches no instances is reported as "no instances belong to …" rather than as a clean report, so "nothing to check" can be told apart from "everything checks out".
Scoring
Validation reports how much of its template an instance honours, not just whether it does. Every template element the comparison weighs is one requirement, and a missing element costs the whole subtree it stood for — so deleting a class costs far more than dropping an import, without anyone maintaining a table of weights.
The same three numbers — met, total, percentage — are reported at every level:
Conformance scores:
✗ projects/logging/src/modules/logger (nestjs-service-module) — 149/151 requirements met (98.7%), below threshold 100.0%
✗ projects/logging/src/modules/logger/logger (nestjs-service-file) — 108/109 requirements met (99.1%), below threshold 100.0%
Total — 257/260 requirements met (98.8%) across 2 instance(s), 2 below threshold
1. file: logger.types.ts — 1/2 requirements met (50.0%)
Instance: projects/logging/src/modules/logger/logger.types.ts
Template: projects/configuration/conformetry-templates/nestjs-service-module/{{nameKebabCase}}/{{nameKebabCase}}.types.ts
1. Missing comment // 🏷️ Types
Template: Line 1, Column 1
Expected: `// 🏷️ Types`
Weight : 1 of the 2 requirements in this file
Fix : Add the comment // 🏷️ Types to the instance file.| Level | Answers | | ----- | ------- | | File | How much of this file drifted — a small file can lose half of itself to one finding | | Instance | Whether this instance clears its threshold; this is the level thresholds apply to | | Total | How the whole run did, across every instance/template pair |
The fraction is printed alongside the percentage because a percentage hides its own scale: 99.3% reads the same whether one requirement of 151 went missing or thirty of four thousand did, and only the first is a five-minute fix.
The total is counted in instance/template pairs rather than files. A file governed by two templates owes both of them, so its requirements genuinely count once per template.
A finding that stands in for more than itself says so, which is what tells the expensive drift from the trivial — a missing class carries the weight of every member it held.
An instance must score at or above its threshold to pass. The default is
1 — a perfect match, which is what conformetry has always demanded — so
adding scoring changes nothing until a threshold is lowered deliberately.
Three levels set it, narrowest first:
| Level | Where | Applies to |
| ----- | ----- | ---------- |
| Instance group | instances[].threshold | Only the paths that group's globs locate |
| Generator | threshold on the generator | Every instance of that template |
| Run | --threshold | Every instance the run touches |
That is what makes introducing a template bearable. A new template can be
adopted with the directory still being migrated held to 0.75 while every
other instance of it stays strict, instead of having to bring the whole
workspace over in one change.
Findings print either way. A lowered threshold is permission to ship the drift, not a reason to stop showing it.
Differences are grouped by file and each one carries the location on both sides — where the instance is wrong and where the template says so — plus the expected value and a concrete fix:
1. file: billing.service.ts
Instance: packages/billing/src/modules/billing/billing.service.ts
Template: projects/configuration/conformetry-templates/nestjs-service-module/…
1. Missing required comment
Instance: line 24
Template: line 31
Expected: `// 🌎 Public Methods`
Fix : Add the `// 🌎 Public Methods` section comment above the first public method.The fix field is the point of the format: reports are meant to be actionable
by whoever — or whatever — has to make the file conform.
Configuration
A single conformetry.config.ts declares every generator: the template folder
it renders, the inputs it takes, and the paths its output already occupies.
import { type ConformetryConfiguration } from "@conformetry/configuration";
const conformetryConfiguration: ConformetryConfiguration = [
{
description: "Generate a NestJS service module",
inputs: {
name: { description: "Module name in kebab-case", type: "string" },
},
instances: [{ patterns: ["packages/*/src/modules/*"] }],
name: "nestjs-service-module",
templatePath: "templates/nestjs-service-module",
},
];
export default conformetryConfiguration;instances is what makes validation possible: it says where this generator's
output already lives, so validation knows what to check without being told
twice. The full field reference — instance groups, tag selectors, input
schemas, discovery, and the supported file formats — is in
@conformetry/configuration.
Templates
A template is an ordinary folder of ordinary files. Both file contents and file
paths are rendered with mustache, so a folder
named {{nameKebabCase}} becomes billing and a file named
{{namePascalCase}}.tsx becomes SearchBar.tsx:
templates/nestjs-service-module/
└── {{nameKebabCase}}/
├── {{nameKebabCase}}.constants.ts
├── {{nameKebabCase}}.module.ts
├── {{nameKebabCase}}.service.ts
├── {{nameKebabCase}}.service.unit.test.ts
└── {{nameKebabCase}}.types.tsEvery generator's name input is expanded into four case variants
automatically, so a template never has to case-convert by hand:
| Placeholder | search bar becomes |
| ----------- | -------------------- |
| {{nameCamelCase}} | searchBar |
| {{nameKebabCase}} | search-bar |
| {{namePascalCase}} | SearchBar |
| {{nameSnakeCase}} | search_bar |
An explicit input of the same name always wins over the derived variant. Full mustache is available — sections, inverted sections, partials — with HTML escaping disabled so substituted values cannot corrupt source code.
Supply every placeholder a template uses when generating. An interpolated placeholder nobody supplied fails
generatewithMissingSubstitutionError, naming the placeholder and the template file. Mustache would otherwise render it as an empty string.validateinstead reads the value from the instance — the text where the template first uses the placeholder — and reportsCould not infer {{…}}when nothing there reveals it.Sections are the exception, and are how a template asks for something optional:
{{#owner}}Owner: {{owner}}{{/owner}}renders nothing whenowneris absent, rather than refusing.
Validators
Which validator handles a file is decided by its extension, and only the packages a run actually needs are loaded.
| Validator | Extensions | Compares |
| --------- | ---------- | -------- |
| typescript | .ts, .tsx | Syntax tree structure and required section comments |
| markdown | .md | mdast structure — headings, lists, tables — rather than prose |
| python | .py | Structure via Python's own ast module |
| json | .json, .jsonc | Key structure and values |
| jupyter | .ipynb | Notebook envelope, delegating cells to the markdown and Python validators |
| text | everything else | Duplicate-aware line conformance — the floor, so no extension goes unchecked |
Before any of them runs, every file the template declares is checked to
exist. That pass covers extensions no validator claims — .gitignore,
.env.default, pyproject.toml — which would otherwise be deletable without
failing anything. A missing directory is reported once rather than as twenty
missing files.
A template comment containing TODO is treated as a prompt rather than text to
copy, so any instance comment satisfies it.
Nx workspaces
@conformetry/nx is a second host over the same
runtime. It adds two things the standalone CLI cannot offer:
- A
conformetry-validatetarget inferred onto every project that holds instances, so validation is cached and participates innx affected. - Generators addressed by name —
nx g conformetry:nestjs-service-module— with Nx prompting for inputs and writing through its virtualTree.
Because which generators exist is a property of your configuration rather than of the package, the plugin exposing them is emitted at install time rather than shipped:
{ "scripts": { "postinstall": "conformetry-nx-bootstrap-generators" } }Instance groups may additionally select projects by Nx tag, with their globs read inside each matching project:
instances: [{ patterns: ["src/modules/*"], tags: ["framework:nestjs"] }];Packages
Conformetry is deliberately split so that embedding it does not mean depending
on a CLI. @conformetry/core is the leaf — it depends on nothing else in the
graph — and every other package declares exactly which siblings it may import.
Hosts
| Package | Role |
| ------- | ---- |
| @conformetry/cli | The conformetry command: expands globs, prompts for inputs, prints reports |
| @conformetry/nx | Nx plugin: inferred validation targets, tag-scoped instances, emitted generators |
Runtime
| Package | Role |
| ------- | ---- |
| @conformetry/core | Contracts leaf: the structured difference shape, the score, the inventory, and the language validator contract |
| @conformetry/configuration | Config loading, template discovery, instance matching, input resolution, placeholder rendering |
| @conformetry/generation | The generator lifecycle, rendering each template through the configuration layer |
| @conformetry/validation | Validation orchestration, language routing, finding deduplication |
| @conformetry/languages | Every Language module, the facade that resolves extensions to them, the existence check for every declared file, and the difference and scoring primitives they share |
| @conformetry/output | Every render target: the validation report and the template and instance inventory |
Languages
@conformetry/languages holds one module per Language, all reached through its
single LanguagesModule facade rather than as separate packages.
| Module | Extensions |
| ------ | ---------- |
| typescript | .ts, .tsx |
| markdown | .md |
| python | .py |
| json | .json, .jsonc |
| jupyter | .ipynb |
| text | the fallback for everything else |
Nothing depends on @conformetry/cli. Embedding conformetry means depending on
the runtime packages directly — the CLI is one host among others, and holds no
logic of its own.
Embedding
Both runtimes are NestJS providers, so a host wires them the way it wires anything else:
import { GenerationService } from "@conformetry/generation";
const result = await generationService.runGenerator({
definition: {
name: "nestjs-service-module",
templateDirectoryPath: "templates/nestjs-service-module",
},
inputs: { name: "billing" },
instancePath: "packages/billing/src/modules",
});Filesystem and formatter access go through adapters, which is how
@conformetry/nx reuses this runtime unchanged against a virtual Tree.
Rendering deliberately is not an adapter: validation must substitute exactly
as generation does, or validation would flag the files the generator itself
produced.
Agent skills
Agent skills for coding agents working with conformetry are published in
@conformetry/agents:
| Skill | Description |
| ----- | ----------- |
| conformetry-generate | Scaffold code from templates using conformetry generators |
| conformetry-configure | Configure generators, templates, and validation rules in conformetry.config.ts |
| conformetry-validate | Run structural conformance checks against templates |
Examples
Worked examples and sandboxes are in
@conformetry/examples — eleven self-contained
examples covering template authoring, case variants, structural comparison, drift detection, and Nx integration. An agent arriving from a conformance report can use
AGENTS.md to find the example that explains each finding.
Start
Run the CLI from source:
nx run conformetry-cli:startPass a subcommand and its flags after --:
nx run conformetry-cli:start -- validate --config projects/configuration/conformetry.config.ts --languages typescriptTest
nx run conformetry-cli:vitestBuild
nx run conformetry-cli:buildLicense
MIT — see LICENSE.
👔 Conformetry
This project was generated from the nestjs-command-project conformetry template.
🔭 Callidescope
Call stacks traced through projects/ic-suite/conformetry/conformetry-cli, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
| Measure | Value | | --- | --- | | Callables | 61 | | Files | 27 | | Calls traced | 75 | | Call stacks | 16 | | Deepest stack | 15 | | Stacks through recursion | 0 | | Unfollowable calls | 4 |
Limits
What this project is judged against, as declared in its own callidescope.config.ts.
| Limit | Value |
| --- | --- |
| maximumDepth | 15 |
| maximumBreadth | 9 |
Call stacks (depth)
1. InstancesCommand.run — depth ≥ 15 · decorated-method
🚀 InstancesCommand.run(_passedParameters: string[], options: InstancesCommandOptions): Promise<void> [projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:91]
↳ Writes every instance found, filtered to the given templates.
└─> ConfigurationService.resolveInventoriedInstances(…): InventoriedInstance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:368]
↳ Lists every instance found, paired with the templates that explain it.
└─> InstanceDiscoveryService.resolveInventoriedInstances(args: ResolveInventoryArguments): InventoriedInstance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:219]
↳ Lists every instance found, paired with the templates that explain it. `templateNames` narrows the pairing rather than…
└─> InstanceDiscoveryService.takeInventory(…): { templates: TemplateDefinition[]; weighed: { instance: Instance; pairings: InventoriedPairing[]; }[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:283]
↳ Weighs every instance the globs find against every declared template.
└─> InstanceDiscoveryService.map(…)(instance: Instance): { instance: Instance; pairings: InventoriedPairing[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:295]
└─> InstanceDiscoveryService.weighInstance(…): { instance: Instance; pairings: InventoriedPairing[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:84]
↳ Weighs one instance against every template, best fit first.
└─> InstanceDiscoveryMatchingService.matchTemplates(…): TemplateMatch[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:180]
↳ Weighs every template that shares at least one file with the instance, best-first.
└─> InstanceDiscoveryMatchingService.map(…)(…): { matchedFileCount: number; matchRatio: number; template: TemplateDefinition; placeholderValues: Substitutions; substitutions: Substitutions; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:186]
└─> TemplateDiscoveryService.countMatchingFiles(…): number [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:146]
↳ Counts how many of a template's files the instance path already has.
└─> TemplateDiscoveryService.filter(…)(templateFilePath: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:155]
└─> TemplateDiscoveryService.resolveInstanceFilePath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:204]
↳ Maps a template file path to the instance file path it governs.
└─> RenderingService.renderPath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142]
↳ Renders a template path with mustache, the same way contents are rendered.
└─> RenderingService.assertEverySubstitutionSupplied(…): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35]
↳ Refuses to render a template asking for a value nobody supplied.
└─> RenderingService.collectInterpolatedNames(template: string): string[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:80]
↳ Every placeholder a template interpolates, deduplicated.
└─> RenderingService.walk(spans: TemplateSpans): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:82]2. TemplatesCommand.run — depth ≥ 15 · decorated-method
🚀 TemplatesCommand.run(_passedParameters: string[], options: TemplatesCommandOptions): Promise<void> [projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:92]
↳ Writes every declared template, filtered to the given instances.
└─> ConfigurationService.resolveInventoriedTemplates(…): InventoriedTemplate[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:375]
↳ Lists every template declared, paired with the instances it explains.
└─> InstanceDiscoveryService.resolveInventoriedTemplates(args: ResolveInventoryArguments): InventoriedTemplate[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:244]
↳ Lists every template declared, paired with the instances it explains. `instancePatterns` narrows which instances are…
└─> InstanceDiscoveryService.takeInventory(…): { templates: TemplateDefinition[]; weighed: { instance: Instance; pairings: InventoriedPairing[]; }[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:283]
↳ Weighs every instance the globs find against every declared template.
└─> InstanceDiscoveryService.map(…)(instance: Instance): { instance: Instance; pairings: InventoriedPairing[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:295]
└─> InstanceDiscoveryService.weighInstance(…): { instance: Instance; pairings: InventoriedPairing[]; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:84]
↳ Weighs one instance against every template, best fit first.
└─> InstanceDiscoveryMatchingService.matchTemplates(…): TemplateMatch[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:180]
↳ Weighs every template that shares at least one file with the instance, best-first.
└─> InstanceDiscoveryMatchingService.map(…)(…): { matchedFileCount: number; matchRatio: number; template: TemplateDefinition; placeholderValues: Substitutions; substitutions: Substitutions; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:186]
└─> TemplateDiscoveryService.countMatchingFiles(…): number [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:146]
↳ Counts how many of a template's files the instance path already has.
└─> TemplateDiscoveryService.filter(…)(templateFilePath: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:155]
└─> TemplateDiscoveryService.resolveInstanceFilePath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:204]
↳ Maps a template file path to the instance file path it governs.
└─> RenderingService.renderPath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142]
↳ Renders a template path with mustache, the same way contents are rendered.
└─> RenderingService.assertEverySubstitutionSupplied(…): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35]
↳ Refuses to render a template asking for a value nobody supplied.
└─> RenderingService.collectInterpolatedNames(template: string): string[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:80]
↳ Every placeholder a template interpolates, deduplicated.
└─> RenderingService.walk(spans: TemplateSpans): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:82]3. ValidateCommand.run — depth ≥ 14 · decorated-method
🚀 ValidateCommand.run(_passedParameters: string[], options: ValidateCommandOptions): Promise<void> [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:369]
↳ Runs validation and reports every difference found.
└─> ValidationService.validate(args: RunValidationArguments): RunValidationResult [projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:194]
↳ Validates every instance and returns the differences found.
└─> ConfigurationService.matchInstances(…): ResolvedInstances [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:264]
↳ Resolves every instance to the template, or templates, that explain it.
└─> InstanceDiscoveryService.matchInstances(…): ResolvedInstances [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:123]
↳ Resolves every instance to the template, or templates, that explain it.
└─> InstanceDiscoveryMatchingService.matchInstances(…): ResolvedInstances [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:118]
↳ Resolves every instance to the template — or templates — that explain it.
└─> InstanceDiscoveryMatchingService.matchTemplates(…): TemplateMatch[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:180]
↳ Weighs every template that shares at least one file with the instance, best-first.
└─> InstanceDiscoveryMatchingService.map(…)(…): { matchedFileCount: number; matchRatio: number; template: TemplateDefinition; placeholderValues: Substitutions; substitutions: Substitutions; } [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:186]
└─> TemplateDiscoveryService.countMatchingFiles(…): number [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:146]
↳ Counts how many of a template's files the instance path already has.
└─> TemplateDiscoveryService.filter(…)(templateFilePath: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:155]
└─> TemplateDiscoveryService.resolveInstanceFilePath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:204]
↳ Maps a template file path to the instance file path it governs.
└─> RenderingService.renderPath(…): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142]
↳ Renders a template path with mustache, the same way contents are rendered.
└─> RenderingService.assertEverySubstitutionSupplied(…): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35]
↳ Refuses to render a template asking for a value nobody supplied.
└─> RenderingService.collectInterpolatedNames(template: string): string[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:80]
↳ Every placeholder a template interpolates, deduplicated.
└─> RenderingService.walk(spans: TemplateSpans): void [projects/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:82]4. GenerateCommand.run — depth ≥ 11 · decorated-method
🚀 GenerateCommand.run(passedParameters: string[], options: GenerateCommandOptions): Promise<void> [projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:292]
↳ Renders the template, reporting a refused command line as one.
└─> GenerateCommand.generate(…): Promise<void> [projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:65]
↳ Resolves the template's inputs and writes its files.
└─> ConfigurationService.resolveGeneratorInputs(args: ResolveGeneratorInputsArguments): Promise<Record<string, string>> [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:356]
↳ Resolves generator inputs from raw command-line arguments.
└─> InputService.resolveGeneratorInputs(args: ResolveGeneratorInputsArguments): Promise<Record<string, string>> [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:180]
↳ Resolves generator inputs from raw command-line arguments.
└─> InputService.resolveInputs(…): Promise<Record<string, string>> [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:53]
↳ Walks a schema, taking each value from the resolver or a prompt.
└─> InputService.acceptProvidedValue(args: { input: SchemaInput; value: string; }): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:39]
↳ Validates a value the caller already had, throwing if it is invalid.
└─> InputSchemaService.validateValue(args: { input: SchemaInput; value: unknown; }): string | true [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:158]
↳ Validates a value, returning `true` or the reason it failed.
└─> InputSchemaService.validateEnum(args: { input: SchemaInput; value: string; }): string | true [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:39]
↳ Validates a value against a schema `enum`, when one is declared.
└─> InputSchemaService.readEnumValues(propertySchema: unknown): string[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:123]
↳ Reads the string members of a schema `enum`.
└─> InputSchemaService.readSchemaProperty(propertySchema: unknown, key: string): unknown [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:26]
↳ Reads one property off a schema fragment when it is an object.
└─> InputSchemaService.find(…)([entryKey]: [string, any]): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:31]5. InstancesCommand.parseTemplates — depth 4 · decorated-method
🚀 InstancesCommand.parseTemplates(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:81]
↳ Parses the optional template filter.
└─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.filter(…)(item: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:128]6. TemplatesCommand.parseInstances — depth 4 · decorated-method
🚀 TemplatesCommand.parseInstances(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:73]
↳ Parses the optional instance filter.
└─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.filter(…)(item: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:128]7. ValidateCommand.parseInstances — depth 4 · decorated-method
🚀 ValidateCommand.parseInstances(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:326]
↳ Parses the optional instance glob override.
└─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.filter(…)(item: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:128]8. ValidateCommand.parseLanguages — depth 4 · decorated-method
🚀 ValidateCommand.parseLanguages(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:336]
↳ Parses the optional language filter.
└─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.filter(…)(item: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:128]9. ValidateCommand.parseTemplates — depth 4 · decorated-method
🚀 ValidateCommand.parseTemplates(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:350]
↳ Parses the optional template filter.
└─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118]
↳ Splits a comma-delimited filter option into its values.
└─> InputService.filter(…)(item: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:128]10. ValidateCommand.parseThreshold — depth 4 · decorated-method
🚀 ValidateCommand.parseThreshold(value: string | undefined): number | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:359]
↳ Parses the optional run-level conformance threshold.
└─> ConfigurationService.parseThresholdOption(value: string | undefined): number | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:284]
↳ Parses a threshold option as a ratio from 0 to 1.
└─> InputService.parseThresholdOption(value: string | undefined): number | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:161]
↳ Parses a threshold option as a ratio from 0 to 1.
└─> InputService.parseOptionalOption(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:134]
↳ Trims an optional string option, treating blank as absent.11. GenerateCommand.parseConfig — depth ≥ 3 · decorated-method
🚀 GenerateCommand.parseConfig(value: string | undefined): string [projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:250]
↳ Parses the required configuration path.
└─> ConfigurationService.requireConfigurationPath(value: string | undefined, surface: string): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:342]
↳ Returns the configuration path a run was given, or refuses.
└─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:16]12. GenerateCommand.parseDirectory — depth 3 · decorated-method
🚀 GenerateCommand.parseDirectory(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:263]
↳ Parses the output directory override.
└─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:279]
↳ Trims an optional string option, treating blank as absent.
└─> InputService.parseOptionalOption(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:134]
↳ Trims an optional string option, treating blank as absent.13. GenerateCommand.parseTemplate — depth 3 · decorated-method
🚀 GenerateCommand.parseTemplate(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:277]
↳ Parses the name of the template to render.
└─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:279]
↳ Trims an optional string option, treating blank as absent.
└─> InputService.parseOptionalOption(value: string | undefined): string | undefined [projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:134]
↳ Trims an optional string option, treating blank as absent.14. InstancesCommand.parseConfig — depth ≥ 3 · decorated-method
🚀 InstancesCommand.parseConfig(value: string | undefined): string [projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:59]
↳ Parses the required configuration path.
└─> ConfigurationService.requireConfigurationPath(value: string | undefined, surface: string): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:342]
↳ Returns the configuration path a run was given, or refuses.
└─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:16]15. TemplatesCommand.parseConfig — depth ≥ 3 · decorated-method
🚀 TemplatesCommand.parseConfig(value: string | undefined): string [projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:60]
↳ Parses the required configuration path.
└─> ConfigurationService.requireConfigurationPath(value: string | undefined, surface: string): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:342]
↳ Returns the configuration path a run was given, or refuses.
└─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:16]16. ValidateCommand.parseConfig — depth ≥ 3 · decorated-method
🚀 ValidateCommand.parseConfig(value: string | undefined): string [projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:313]
↳ Parses the required configuration path.
└─> ConfigurationService.requireConfigurationPath(value: string | undefined, surface: string): string [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:342]
↳ Returns the configuration path a run was given, or refuses.
└─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:16]Breadth
| Callable | Breadth | Calls directly | Location |
| --- | --- | --- | --- |
| GenerateCommand.generate | 8 | GenerateCommand.rejectRemovedGeneratorOption, ConfigurationService.loadConformetryConfiguration, GenerateCommand.resolveTemplateName, GenerateCommand.requireDefinition, GenerateCommand.requireDirectory, ConfigurationService.resolveGeneratorInputs, GenerationService.runGenerator, GenerateCommand.map(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:65 |
| ValidateCommand.run | 7 | ConfigurationService.loadConformetryConfiguration, ValidateCommand.selectTemplates, ValidateCommand.selectInstances, ValidateCommand.reportEmptySelection, ValidationService.validate, ConfigurationService.collectTemplates, ValidateCommand.reportResult | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:369 |
| GenerateCommand.resolveTemplateName | 4 | GenerateCommand.map(…), ConfigurationService.isAtTerminal, missingTemplateError, ConfigurationService.promptForTemplate | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:217 |
| Callable | Breadth | Calls directly | Location |
| --- | --- | --- | --- |
| InstancesCommand.run | 4 | ConfigurationService.loadConformetryConfiguration, InventoryService.shortenInstancePaths, ConfigurationService.resolveInventoriedInstances, InventoryService.describeInstances | projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:91 |
| TemplatesCommand.run | 4 | ConfigurationService.loadConformetryConfiguration, InventoryService.shortenTemplatePairings, ConfigurationService.resolveInventoriedTemplates, InventoryService.describeTemplates | projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:92 |
| ValidateCommand.selectInstances | 4 | ValidateCommand.findInstances, ValidateCommand.flatMap(…), ValidateCommand.map(…), ValidateCommand.filter(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:231 |
| GenerateCommand.requireDefinition | 3 | GenerateCommand.find(…), unknownTemplateError, GenerateCommand.map(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:163 |
| ValidateCommand.reportEmptySelection | 3 | ValidateCommand.map(…), ValidateCommand.map(…), ValidateCommand.filter(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:152 |
| ValidateCommand.reportResult | 3 | ReportingService.formatReport, ValidateCommand.filter(…), ValidateCommand.describeFailure | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:193 |
| ValidateCommand.map(…) | 3 | ValidateCommand.find(…), unknownTemplateError, ValidateCommand.map(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:289 |
| GenerateCommand.rejectRemovedGeneratorOption | 2 | GenerateCommand.some(…), removedGeneratorOptionError | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:149 |
| GenerateCommand.run | 2 | GenerateCommand.generate, GenerateCommand.rejectCommandLine | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:292 |
| ValidateCommand.describeFailure | 2 | ValidateCommand.filter(…), ValidateCommand.map(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:73 |
| ValidateCommand.findInstances | 2 | ValidateCommand.flatMap(…), ConfigurationService.readWorkspaceGroups | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:97 |
| ValidateCommand.promptForTemplateNames | 2 | ConfigurationService.isAtTerminal, ConfigurationService.promptForTemplates | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:134 |
| ValidateCommand.selectTemplates | 2 | ValidateCommand.promptForTemplateNames, ValidateCommand.map(…) | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:274 |
| missingTemplateError | 1 | InputError.constructor | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.constants.ts:12 |
| GenerateCommand.requireDirectory | 1 | missingDirectoryError | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:194 |
| GenerateCommand.parseConfig | 1 | ConfigurationService.requireConfigurationPath | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:250 |
| GenerateCommand.parseDirectory | 1 | ConfigurationService.parseOptionalOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:263 |
| GenerateCommand.parseTemplate | 1 | ConfigurationService.parseOptionalOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/generate/generate.command.ts:277 |
| InstancesCommand.parseConfig | 1 | ConfigurationService.requireConfigurationPath | projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:59 |
| InstancesCommand.parseTemplates | 1 | ConfigurationService.parseCommaDelimitedOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/instances/instances.command.ts:81 |
| TemplatesCommand.parseConfig | 1 | ConfigurationService.requireConfigurationPath | projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:60 |
| TemplatesCommand.parseInstances | 1 | ConfigurationService.parseCommaDelimitedOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/templates/templates.command.ts:73 |
| ValidateCommand.map(…) | 1 | ReportingService.formatPercentage | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:76 |
| ValidateCommand.flatMap(…) | 1 | ConfigurationService.findInstances | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:105 |
| ValidateCommand.filter(…) | 1 | ConfigurationService.readWorkspaceGroups | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:160 |
| ValidateCommand.parseConfig | 1 | ConfigurationService.requireConfigurationPath | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:313 |
| ValidateCommand.parseInstances | 1 | ConfigurationService.parseCommaDelimitedOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:326 |
| ValidateCommand.parseLanguages | 1 | ConfigurationService.parseCommaDelimitedOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:336 |
| ValidateCommand.parseTemplates | 1 | ConfigurationService.parseCommaDelimitedOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:350 |
| ValidateCommand.parseThreshold | 1 | ConfigurationService.parseThresholdOption | projects/ic-suite/conformetry/conformetry-cli/src/modules/validate/validate.command.ts:359 |
🕸️ 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_generation["conformetry-generation"]
conformetry_output["conformetry-output"]
conformetry_validation["conformetry-validation"]
logging["logging"]
conformetry_cli --> conformetry_configuration
conformetry_cli --> conformetry_core
conformetry_cli --> conformetry_generation
conformetry_cli --> conformetry_output
conformetry_cli --> conformetry_validation
conformetry_cli --> logging
conformetry_examples -.-> conformetry_cli
classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
class conformetry_cli subjectDashed edges are dependencies Nx inferred from configuration rather than from code.
NestJS Module Graph
flowchart LR
ConfigModule([ConfigModule])
ConfigurationModule
DifferencesModule
DiscoveryModule
FilesModule
GenerateModule
GenerationModule
InputModule
InstanceDiscoveryModule
InstanceGroupModule
InstancesModule
InventoryModule
JsonModule
JupyterModule
LanguagesModule
LoggerModule([LoggerModule])
MainModule
MarkdownModule
PythonModule
RenderingModule
ReportingModule
RunnerModule
ScoringModule
TemplateDiscoveryModule
TemplatesModule
TextModule
TypescriptModule
ValidateModule
ValidationModule
ConfigurationModule --> InputModule
ConfigurationModule --> InstanceDiscoveryModule
ConfigurationModule --> InstanceGroupModule
ConfigurationModule --> RenderingModule
ConfigurationModule --> TemplateDiscoveryModule
FilesModule --> ConfigurationModule
FilesModule --> DifferencesModule
GenerateModule --> ConfigurationModule
GenerateModule --> GenerationModule
GenerationModule --> ConfigurationModule
InstanceDiscoveryModule --> InstanceGroupModule
InstanceDiscoveryModule --> RenderingModule
InstanceDiscoveryModule --> TemplateDiscoveryModule
InstancesModule --> ConfigurationModule
InstancesModule --> InventoryModule
JsonModule --> ScoringModule
JupyterModule --> JsonModule
JupyterModule --> MarkdownModule
JupyterModule --> PythonModule
LanguagesModule --> JsonModule
LanguagesModule --> JupyterModule
LanguagesModule --> MarkdownModule
LanguagesModule --> PythonModule
LanguagesModule --> TextModule
LanguagesModule --> TypescriptModule
MainModule --> DiscoveryModule
MainModule --> GenerateModule
MainModule --> InstancesModule
MainModule --> TemplatesModule
MainModule --> ValidateModule
MarkdownModule --> ScoringModule
PythonModule --> DifferencesModule
PythonModule --> ScoringModule
ReportingModule --> ScoringModule
TemplateDiscoveryModule --> RenderingModule
TemplatesModule --> ConfigurationModule
TemplatesModule --> InventoryModule
TypescriptModule --> ScoringModule
ValidateModule --> ConfigurationModule
ValidateModule --> ReportingModule
ValidateModule --> ValidationModule
ValidationModule --> ConfigurationModule
ValidationModule --> FilesModule
ValidationModule --> LanguagesModule
ValidationModule --> RunnerModule
ValidationModule --> ScoringModuleRounded modules are global: every module can inject them, so their edges are left out.
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_conformetry_cli_constants_ts["src/conformetry-cli.constants.ts"]
file_src_conformetry_cli_main_end_to_end_test_ts["src/conformetry-cli.main.end-to-end.test.ts"]
file_src_conformetry_cli_main_integration_test_ts["src/conformetry-cli.main.integration.test.ts"]
file_src_conformetry_cli_main_ts["src/conformetry-cli.main.ts"]
file_src_conformetry_cli_main_unit_test_ts["src/conformetry-cli.main.unit.test.ts"]
file_src_conformetry_cli_module_ts["src/conformetry-cli.module.ts"]
file_src_conformetry_cli_repl_ts["src/conformetry-cli.repl.ts"]
file_src_conformetry_cli_repl_unit_test_ts["src/conformetry-cli.repl.unit.test.ts"]
file_src_index_ts["src/index.ts"]
file_src_modules_generate_generate_command_ts["src/modules/generate/generate.command.ts"]
file_src_modules_generate_generate_command_unit_test_ts["src/modules/generate/generate.command.unit.test.ts"]
file_src_modules_generate_generate_constants_ts["src/modules/generate/generate.constants.ts"]
file_src_modules_generate_generate_module_ts["src/modules/generate/generate.module.ts"]
file_src_modules_generate_generate_types_ts["src/modules/generate/generate.types.ts"]
file_src_modules_instances_instances_command_ts["src/modules/instances/instances.command.ts"]
file_src_modules_instances_instances_command_unit_test_ts["src/modules/instances/instances.command.unit.test.ts"]
file_src_modules_instances_instances_constants_ts["src/modules/instances/instances.constants.ts"]
file_src_modules_instances_instances_module_ts["src/modules/instances/instances.module.ts"]
file_src_modules_instances_instances_types_ts["src/modules/instances/instances.types.ts"]
file_src_modules_templates_templates_command_ts["src/modules/templates/templates.command.ts"]
file_src_modules_templates_templates_command_unit_test_ts["src/modules/templates/templates.command.unit.test.ts"]
file_src_modules_templates_templa