@conformetry/nx 0.0.31 → 0.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.0.32 (2026-10-16)
2
+
3
+ ### 🔥 Performance
4
+
5
+ - **configuration,conformetry,scripts:** ⚡️ raise local pre-commit parallelism and overlap conformetry ([#1663](https://github.com/organizzolini/codebase/pull/1663))
6
+
1
7
  ## 0.0.31 (2026-10-16)
2
8
 
3
9
  ### 🧱 Updated Dependencies
package/README.md CHANGED
@@ -159,9 +159,9 @@ Call stacks traced through `projects/ic-suite/conformetry/conformetry-nx`, deepe
159
159
 
160
160
  | Measure | Value |
161
161
  | --- | --- |
162
- | Callables | 111 |
163
- | Files | 47 |
164
- | Calls traced | 140 |
162
+ | Callables | 112 |
163
+ | Files | 48 |
164
+ | Calls traced | 141 |
165
165
  | Call stacks | 8 |
166
166
  | Deepest stack | 15 |
167
167
  | Stacks through recursion | 0 |
@@ -183,7 +183,7 @@ What this project is judged against, as declared in its own `callidescope.config
183
183
  ```text
184
184
  🚀 validateExecutor(…): Promise<{ success: boolean; }> [projects/ic-suite/conformetry/conformetry-nx/src/executors/validate/executor.ts:16]
185
185
  ↳ Validates one project's instances against their conformetry templates.
186
- └─> PluginService.runValidation(args: RunValidationArguments): Promise<RunValidationResult> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:399]
186
+ └─> PluginService.runValidation(args: RunValidationArguments): Promise<RunValidationResult> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:409]
187
187
  ↳ Validates one project's instances and renders the report.
188
188
  └─> ValidationService.validate(args: RunValidationArguments): RunValidationResult [projects/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:194]
189
189
  ↳ Validates every instance and returns the differences found.
@@ -215,11 +215,11 @@ What this project is judged against, as declared in its own `callidescope.config
215
215
  ```text
216
216
  🚀 runConformetryGenerator(…): Promise<string[]> [projects/ic-suite/conformetry/conformetry-nx/src/index.ts:93]
217
217
  ↳ Runs one configured generator against an Nx tree.
218
- └─> PluginService.runGenerator(args: RunGeneratorArguments): Promise<string[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:338]
218
+ └─> PluginService.runGenerator(args: RunGeneratorArguments): Promise<string[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:348]
219
219
  ↳ Runs one configured generator against an Nx tree.
220
- └─> PluginService.assertPluginInSync(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:120]
220
+ └─> PluginService.assertPluginInSync(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:121]
221
221
  ↳ Fails fast when the plugin would run against a stale or broken setup.
222
- └─> PluginService.assertEmittedPluginCurrent(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:86]
222
+ └─> PluginService.assertEmittedPluginCurrent(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:87]
223
223
  ↳ Fails when the emitted Nx plugin no longer matches the configuration. `generators.json` and its schemas are derived…
224
224
  └─> GeneratorService.emitPlugin(args: EmitPluginArguments): Promise<EmittedFile[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212]
225
225
  ↳ Returns every file the consumer's generator plugin consists of.
@@ -273,7 +273,7 @@ What this project is judged against, as declared in its own `callidescope.config
273
273
 
274
274
  ```text
275
275
  🚀 anonymous(…): Promise<CreateNodesResultArray> [projects/ic-suite/conformetry/conformetry-nx/src/index.ts:49]
276
- └─> PluginService.inferTargets(args: InferTargetsArguments): Promise<Map<string, InferredTargets>> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:273]
276
+ └─> PluginService.inferTargets(args: InferTargetsArguments): Promise<Map<string, InferredTargets>> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:283]
277
277
  ↳ Infers a validation target onto every project that holds at least one instance.
278
278
  └─> InstancesService.findProjectInstances(args: FindProjectInstancesArguments): Promise<Instance[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:68]
279
279
  ↳ Expands every instance group that applies to a project, keeping only the instances that live inside it.
@@ -350,7 +350,7 @@ What this project is judged against, as declared in its own `callidescope.config
350
350
 
351
351
  | Callable | Breadth | Calls directly | Location |
352
352
  | --- | --- | --- | --- |
353
- | `PluginService.runGenerator` | 9 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ConfigurationService.loadConformetryConfiguration`, `PluginService.find(…)`, `PluginService.map(…)`, `AdapterService.createAdapters`, `OptionsService.resolveGeneratorInputs`, `GenerationService.runGenerator`, `PathsService.resolveGenerationPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:338` |
353
+ | `PluginService.runGenerator` | 9 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ConfigurationService.loadConformetryConfiguration`, `PluginService.find(…)`, `PluginService.map(…)`, `AdapterService.createAdapters`, `OptionsService.resolveGeneratorInputs`, `GenerationService.runGenerator`, `PathsService.resolveGenerationPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:348` |
354
354
  | `bootstrapPlugin` | 9 | `resolveGeneratorService`, `resolveOptionsService`, `resolveProjectsService`, `GeneratorService.emitPlugin`, `OptionsService.resolveConfigurationPath`, `readNxConfiguration`, `ProjectsService.listWorkspaceProjects`, `writePlugin`, `linkPlugin` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:39` |
355
355
  | `syncGenerator` | 8 | `resolveGeneratorService`, `resolveOptionsService`, `resolveProjectsService`, `GeneratorService.emitPlugin`, `OptionsService.resolveConfigurationPath`, `readNxConfiguration`, `ProjectsService.listWorkspaceProjects`, `assign(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/generators/sync/generator.ts:32` |
356
356
 
@@ -361,17 +361,17 @@ What this project is judged against, as declared in its own `callidescope.config
361
361
  | --- | --- | --- | --- |
362
362
  | `GeneratorService.emitPlugin` | 6 | `ConfigurationService.loadConformetryConfiguration`, `GeneratorService.toSorted(…)`, `GeneratorService.buildGeneratorsManifest`, `GeneratorService.map(…)`, `GeneratorService.map(…)`, `GeneratorService.stringify` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212` |
363
363
  | `InstancesService.findProjectInstances` | 6 | `ConfigurationService.loadConformetryConfiguration`, `InstancesService.filter(…)`, `InstancesService.flatMap(…)`, `InstancesService.flatMap(…)`, `InstancesService.flatMap(…)`, `InstancesService.filter(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:68` |
364
- | `PluginService.runValidation` | 6 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ValidationService.validate`, `InstancesService.findProjectInstances`, `PluginService.resolveTemplates`, `ReportingService.formatReport` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:399` |
364
+ | `PluginService.runValidation` | 6 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ValidationService.validate`, `InstancesService.findProjectInstances`, `PluginService.resolveTemplates`, `ReportingService.formatReport` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:409` |
365
365
  | `PathsService.resolveGenerationPath` | 5 | `PathsService.resolveNewProjectPath`, `InstancesService.findProjectInstances`, `PathsService.requireModulePath`, `PathsService.resolveScopedDirectory`, `PathsService.resolveModuleParentPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:221` |
366
- | `PluginService.inferTargets` | 5 | `PluginService.resolveOptions`, `PluginService.resolveTemplateInputs`, `PluginService.filter(…)`, `ProjectsService.readProjectScope`, `InstancesService.findProjectInstances` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:273` |
366
+ | `PluginService.inferTargets` | 5 | `PluginService.resolveOptions`, `PluginService.resolveTemplateInputs`, `PluginService.filter(…)`, `ProjectsService.readProjectScope`, `InstancesService.findProjectInstances` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:283` |
367
367
  | `ScopeService.resolveScopedProjectNames` | 4 | `ScopeService.filter(…)`, `ScopeService.toSorted(…)`, `ScopeService.map(…)`, `ScopeService.filter(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:135` |
368
368
  | `ProjectsService.listWorkspaceProjects` | 4 | `ProjectsService.toSorted(…)`, `ProjectsService.map(…)`, `ProjectsService.listProjectConfigurationFiles`, `ProjectsService.readIgnoredPaths` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:118` |
369
+ | `PluginService.resolveTemplateInputs` | 4 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)`, `PluginService.map(…)`, `buildTemplateHashCommand` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:234` |
369
370
  | `anonymous` | 4 | `resolvePluginService`, `PluginService.inferTargets`, `filter(…)`, `map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/index.ts:49` |
370
371
  | `ScopeService.resolveGroup` | 3 | `ScopeService.matchesProject`, `ScopeService.isProjectGroup`, `ScopeService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:75` |
371
372
  | `AdapterService.listDirectory` | 3 | `AdapterService.resolveTreePath`, `AdapterService.map(…)`, `AdapterService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:42` |
372
373
  | `PathsService.resolveScopedDirectory` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PathsService.find(…)`, `ScopeService.resolveScopedDirectory` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:167` |
373
- | `PluginService.resolveOptions` | 3 | `OptionsService.readRegisteredConfigurationPath`, `PluginService.readNxConfiguration`, `OptionsService.resolvePluginOptions` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:192` |
374
- | `PluginService.resolveTemplateInputs` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)`, `PluginService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:227` |
374
+ | `PluginService.resolveOptions` | 3 | `OptionsService.readRegisteredConfigurationPath`, `PluginService.readNxConfiguration`, `OptionsService.resolvePluginOptions` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:193` |
375
375
  | `ScopeService.matchesProject` | 2 | `ScopeService.isProjectGroup`, `ScopeService.every(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:53` |
376
376
  | `ScopeService.resolveScopedDirectory` | 2 | `ScopeService.find(…)`, `ScopeService.findIndex(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:109` |
377
377
  | `GeneratorService.buildSchema` | 2 | `GeneratorService.stringify`, `GeneratorService.buildSchemaProperties` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:122` |
@@ -382,9 +382,9 @@ What this project is judged against, as declared in its own `callidescope.config
382
382
  | `PathsService.resolveNewProjectPath` | 2 | `missingDirectoryError`, `PathsService.resolveTypeDirectoryPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:140` |
383
383
  | `ProjectsService.readIgnoredPaths` | 2 | `ProjectsService.filter(…)`, `ProjectsService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:97` |
384
384
  | `ProjectsService.readProjectScope` | 2 | `ProjectsService.isUnknownArray`, `ProjectsService.filter(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:134` |
385
- | `PluginService.assertEmittedPluginCurrent` | 2 | `GeneratorService.emitPlugin`, `ProjectsService.listWorkspaceProjects` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:86` |
386
- | `PluginService.assertPluginInSync` | 2 | `PluginService.assertTemplatesExist`, `PluginService.assertEmittedPluginCurrent` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:120` |
387
- | `PluginService.resolveTemplates` | 2 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:244` |
385
+ | `PluginService.assertEmittedPluginCurrent` | 2 | `GeneratorService.emitPlugin`, `ProjectsService.listWorkspaceProjects` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:87` |
386
+ | `PluginService.assertPluginInSync` | 2 | `PluginService.assertTemplatesExist`, `PluginService.assertEmittedPluginCurrent` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:121` |
387
+ | `PluginService.resolveTemplates` | 2 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:254` |
388
388
  | `runConformetryGenerator` | 2 | `resolvePluginService`, `PluginService.runGenerator` | `projects/ic-suite/conformetry/conformetry-nx/src/index.ts:93` |
389
389
  | `validateExecutor` | 2 | `resolvePluginService`, `PluginService.runValidation` | `projects/ic-suite/conformetry/conformetry-nx/src/executors/validate/executor.ts:16` |
390
390
  | `ScopeService.isProjectGroup` | 1 | `ConfigurationService.isProjectScoped` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:39` |
@@ -406,8 +406,8 @@ What this project is judged against, as declared in its own `callidescope.config
406
406
  | `PathsService.resolveModuleParentPath` | 1 | `PathsService.toSorted(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:86` |
407
407
  | `PathsService.resolveModulePath` | 1 | `PathsService.find(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:118` |
408
408
  | `ProjectsService.map(…)` | 1 | `ProjectsService.readProjectScope` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:124` |
409
- | `PluginService.assertTemplatesExist` | 1 | `ConfigurationService.loadConformetryConfiguration` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:136` |
410
- | `PluginService.map(…)` | 1 | `ConfigurationService.collectTemplate` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:253` |
409
+ | `PluginService.assertTemplatesExist` | 1 | `ConfigurationService.loadConformetryConfiguration` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:137` |
410
+ | `PluginService.map(…)` | 1 | `ConfigurationService.collectTemplate` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:263` |
411
411
  | `resolveGeneratorService` | 1 | `resolvePluginContext` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:18` |
412
412
  | `resolveOptionsService` | 1 | `resolvePluginContext` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:25` |
413
413
  | `resolvePluginService` | 1 | `resolvePluginContext` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:32` |
@@ -593,6 +593,8 @@ graph LR
593
593
  file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
594
594
  file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
595
595
  file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
596
+ file_src_modules_plugin_plugin_utilities_ts["src/modules/plugin/plugin.utilities.ts"]
597
+ file_src_modules_plugin_plugin_utilities_unit_test_ts["src/modules/plugin/plugin.utilities.unit.test.ts"]
596
598
  file_src_modules_projects_projects_constants_ts["src/modules/projects/projects.constants.ts"]
597
599
  file_src_modules_projects_projects_module_ts["src/modules/projects/projects.module.ts"]
598
600
  file_src_modules_projects_projects_service_ts["src/modules/projects/projects.service.ts"]
@@ -703,6 +705,7 @@ graph LR
703
705
  file_src_modules_plugin_plugin_service_ts --> file_src_modules_paths_paths_service_ts
704
706
  file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
705
707
  file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
708
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_utilities_ts
706
709
  file_src_modules_plugin_plugin_service_ts --> file_src_modules_projects_projects_service_ts
707
710
  file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_generator_generator_constants_ts
708
711
  file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_generator_generator_service_ts
@@ -711,6 +714,8 @@ graph LR
711
714
  file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
712
715
  file_src_modules_plugin_plugin_types_ts --> file_src_modules_instances_instances_types_ts
713
716
  file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts
717
+ file_src_modules_plugin_plugin_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
718
+ file_src_modules_plugin_plugin_utilities_unit_test_ts --> file_src_modules_plugin_plugin_utilities_ts
714
719
  file_src_modules_projects_projects_module_ts --> file_src_modules_projects_projects_service_ts
715
720
  file_src_modules_projects_projects_service_ts --> file_src_modules_instances_instances_types_ts
716
721
  file_src_modules_projects_projects_service_ts --> file_src_modules_projects_projects_constants_ts
@@ -730,40 +735,40 @@ graph LR
730
735
 
731
736
  ### Project
732
737
 
733
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6219-22c55e?style=flat-square)
734
- ![Repository Size](https://img.shields.io/badge/Repository_Size-223.76_kB-6b7280?style=flat-square)
738
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6350-22c55e?style=flat-square)
739
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-228.37_kB-6b7280?style=flat-square)
735
740
  ![Folders](https://img.shields.io/badge/Folders-15-4a4a4a?style=flat-square)
736
- ![Source Files](https://img.shields.io/badge/Source_Files-65-3178c6?style=flat-square)
741
+ ![Source Files](https://img.shields.io/badge/Source_Files-67-3178c6?style=flat-square)
737
742
 
738
743
  ### Measured Targets
739
744
 
740
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-10.85_kB_gzip-6b7280?style=flat-square)
745
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-11.24_kB_gzip-6b7280?style=flat-square)
741
746
 
742
747
  ### TypeScript
743
748
 
744
- ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-64-3178c6?style=flat-square)
749
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-66-3178c6?style=flat-square)
745
750
  ![Interfaces](https://img.shields.io/badge/Interfaces-20-0ea5e9?style=flat-square)
746
751
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
747
752
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
748
753
  ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
749
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-146-6366f1?style=flat-square)
754
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-148-6366f1?style=flat-square)
750
755
  ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
751
756
 
752
757
  ### JavaScript
753
758
 
754
759
  ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-1-f7df1e?style=flat-square)
755
- ![Test Files](https://img.shields.io/badge/Test_Files-15-10b981?style=flat-square)
756
- ![External Packages](https://img.shields.io/badge/External_Packages-18-8b5cf6?style=flat-square)
760
+ ![Test Files](https://img.shields.io/badge/Test_Files-16-10b981?style=flat-square)
761
+ ![External Packages](https://img.shields.io/badge/External_Packages-19-8b5cf6?style=flat-square)
757
762
  ![Classes](https://img.shields.io/badge/Classes-17-7c3aed?style=flat-square)
758
- ![Functions](https://img.shields.io/badge/Functions-284-16a34a?style=flat-square)
763
+ ![Functions](https://img.shields.io/badge/Functions-295-16a34a?style=flat-square)
759
764
  ![Methods](https://img.shields.io/badge/Methods-84-15803d?style=flat-square)
760
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-224-4ade80?style=flat-square)
765
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-235-4ade80?style=flat-square)
761
766
  ![Async Functions](https://img.shields.io/badge/Async_Functions-144-059669?style=flat-square)
762
- ![Constants](https://img.shields.io/badge/Constants-282-dc2626?style=flat-square)
763
- ![Imports](https://img.shields.io/badge/Imports-270-0284c7?style=flat-square)
764
- ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-78-ea580c?style=flat-square)
765
- ![Comments](https://img.shields.io/badge/Comments-332-64748b?style=flat-square)
766
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-727-475569?style=flat-square)
767
+ ![Constants](https://img.shields.io/badge/Constants-287-dc2626?style=flat-square)
768
+ ![Imports](https://img.shields.io/badge/Imports-278-0284c7?style=flat-square)
769
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-80-ea580c?style=flat-square)
770
+ ![Comments](https://img.shields.io/badge/Comments-336-64748b?style=flat-square)
771
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-742-475569?style=flat-square)
767
772
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
768
773
 
769
774
  ### Python
@@ -879,9 +884,9 @@ graph LR
879
884
  ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
880
885
  ![Constants Files](https://img.shields.io/badge/Constants_Files-8-ea580c?style=flat-square)
881
886
  ![Types Files](https://img.shields.io/badge/Types_Files-10-db2777?style=flat-square)
882
- ![Utilities Files](https://img.shields.io/badge/Utilities_Files-2-0ea5e9?style=flat-square)
887
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-3-0ea5e9?style=flat-square)
883
888
  ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
884
- ![Unit Tests](https://img.shields.io/badge/Unit_Tests-15-ca8a04?style=flat-square)
889
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-16-ca8a04?style=flat-square)
885
890
  ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
886
891
  ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
887
892
  ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
@@ -919,20 +924,20 @@ graph LR
919
924
  ### Markdown
920
925
 
921
926
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
922
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-494-1f6feb?style=flat-square)
927
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-500-1f6feb?style=flat-square)
923
928
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
924
- ![H2](https://img.shields.io/badge/H2-34-8b5cf6?style=flat-square)
925
- ![H3](https://img.shields.io/badge/H3-47-a78bfa?style=flat-square)
929
+ ![H2](https://img.shields.io/badge/H2-35-8b5cf6?style=flat-square)
930
+ ![H3](https://img.shields.io/badge/H3-48-a78bfa?style=flat-square)
926
931
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
927
932
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
928
933
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
929
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-159-64748b?style=flat-square)
930
- ![Lists](https://img.shields.io/badge/Lists-41-16a34a?style=flat-square)
931
- ![List Items](https://img.shields.io/badge/List_Items-139-22c55e?style=flat-square)
934
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-160-64748b?style=flat-square)
935
+ ![Lists](https://img.shields.io/badge/Lists-42-16a34a?style=flat-square)
936
+ ![List Items](https://img.shields.io/badge/List_Items-140-22c55e?style=flat-square)
932
937
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
933
938
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
934
939
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
935
- ![Links](https://img.shields.io/badge/Links-21-059669?style=flat-square)
940
+ ![Links](https://img.shields.io/badge/Links-22-059669?style=flat-square)
936
941
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
937
942
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
938
943
  ![Inline Code](https://img.shields.io/badge/Inline_Code-72-ef4444?style=flat-square)
@@ -1,4 +1,4 @@
1
- import { g as e, h as t, i as n, n as r, t as i, x as a } from "./plugin-context.utilities-BKyER2ln.js";
1
+ import { g as e, h as t, i as n, n as r, t as i, x as a } from "./plugin-context.utilities-fOm9HZq-.js";
2
2
  import { existsSync as o, lstatSync as s, mkdirSync as c, readFileSync as l, realpathSync as u, rmSync as d, symlinkSync as f, writeFileSync as p } from "node:fs";
3
3
  import m from "node:path";
4
4
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts
@@ -708,7 +708,37 @@ J = __decorate([u({
708
708
  })], J);
709
709
  //#endregion
710
710
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.constants.ts
711
- var me = "**/{project.json,conformetry.config.*}", he = "project.json", Y = "__conformetryPluginContext", X, Z = X = class PluginService {
711
+ var me = "**/{project.json,conformetry.config.*}", he = "project.json", Y = "__conformetryPluginContext", ge = String.raw`
712
+ const crypto = require("crypto");
713
+ const fs = require("fs");
714
+ const path = require("path");
715
+ const list = (directory) =>
716
+ fs
717
+ .readdirSync(directory, { withFileTypes: true })
718
+ .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))
719
+ .flatMap((entry) =>
720
+ entry.isDirectory()
721
+ ? list(path.join(directory, entry.name))
722
+ : [path.join(directory, entry.name)],
723
+ );
724
+ const hash = crypto.createHash("sha256");
725
+ for (const directory of DIRECTORIES) {
726
+ if (!fs.existsSync(directory)) continue;
727
+ for (const file of list(directory)) {
728
+ hash.update(file + "\0");
729
+ hash.update(fs.readFileSync(file));
730
+ }
731
+ }
732
+ process.stdout.write(hash.digest("base64"));
733
+ `;
734
+ //#endregion
735
+ //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.utilities.ts
736
+ function buildTemplateHashCommand(e) {
737
+ return `node -e '${ge.replace("DIRECTORIES", JSON.stringify(e)).replaceAll(/\s*\n\s*/g, " ").trim().replaceAll("'", String.raw`'\''`)}'`;
738
+ }
739
+ //#endregion
740
+ //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts
741
+ var X, Z = X = class PluginService {
712
742
  adapterService;
713
743
  instancesService;
714
744
  configurationService;
@@ -761,8 +791,8 @@ var me = "**/{project.json,conformetry.config.*}", he = "project.json", Y = "__c
761
791
  }, e.surface ?? "the \"configurationPath\" option of the @conformetry/nx plugin in nx.json");
762
792
  }
763
793
  async resolveTemplateInputs(e) {
764
- let t = await this.configurationService.loadConformetryConfiguration(e.configurationPath);
765
- return [...new Set(t.map((e) => e.templatePath))].map((e) => `{workspaceRoot}/${e}/**/*`);
794
+ let t = await this.configurationService.loadConformetryConfiguration(e.configurationPath), n = [...new Set(t.map((e) => e.templatePath))];
795
+ return [...n.map((e) => `{workspaceRoot}/${e}/**/*`), { runtime: buildTemplateHashCommand(n) }];
766
796
  }
767
797
  async resolveTemplates(e) {
768
798
  return (await this.configurationService.loadConformetryConfiguration(e.configurationPath)).map((t) => this.configurationService.collectTemplate({
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as e } from "../bootstrap.utilities-SrW64gG2.js";
2
+ import { n as e } from "../bootstrap.utilities-BmaK-AfQ.js";
3
3
  //#region projects/ic-suite/conformetry/conformetry-nx/src/conformetry-nx.main.ts
4
4
  e(process.cwd());
5
5
  //#endregion
@@ -1,4 +1,4 @@
1
- import { r as e } from "../../../plugin-context.utilities-BKyER2ln.js";
1
+ import { r as e } from "../../../plugin-context.utilities-fOm9HZq-.js";
2
2
  //#region projects/ic-suite/conformetry/conformetry-nx/src/executors/validate/executor.ts
3
3
  async function validateExecutor(t, n) {
4
4
  let r = n.projectName;
@@ -1,4 +1,4 @@
1
- import { _ as e, b as t, i as n, n as r, t as i, x as a } from "../../../plugin-context.utilities-BKyER2ln.js";
1
+ import { _ as e, b as t, i as n, n as r, t as i, x as a } from "../../../plugin-context.utilities-fOm9HZq-.js";
2
2
  //#region projects/ic-suite/conformetry/conformetry-nx/src/generators/sync/generator.ts
3
3
  async function syncGenerator(a, o) {
4
4
  let s = await i(), c = await r(), l = await n(), u = await s.emitPlugin({
@@ -237,8 +237,13 @@ declare class GeneratorService {
237
237
  declare interface InferredTarget {
238
238
  readonly cache: boolean;
239
239
  readonly executor: string;
240
- /** Files whose change must invalidate the cached result. */
241
- readonly inputs?: string[];
240
+ /**
241
+ * What must invalidate the cached result: files and globs, or the output of
242
+ * a command (`runtime`).
243
+ */
244
+ readonly inputs?: (string | {
245
+ readonly runtime: string;
246
+ })[];
242
247
  readonly options: Record<string, unknown>;
243
248
  }
244
249
 
@@ -857,13 +862,19 @@ export declare class PluginService {
857
862
  */
858
863
  private resolveOptions;
859
864
  /**
860
- * Builds one input glob per configured generator's template folder.
865
+ * Builds the inputs that invalidate a validation when a template changes: one
866
+ * glob per configured generator's template folder, and one command hashing
867
+ * the folders' contents.
861
868
  *
862
869
  * A template's own files are not part of `configurationPath` or the emitted
863
870
  * plugin, so without this an instance's validate target would keep a stale
864
871
  * cache hit across an edit to the very template it is measured against —
865
872
  * which is exactly how a broken template placeholder once reached every
866
873
  * matched instance's `package.json` unnoticed.
874
+ *
875
+ * The globs read Nx's file map, which leaves out any file the workspace
876
+ * excludes from it, whether through an ignore file or a plugin. The command
877
+ * reads the disk instead, so no template file escapes the cache key.
867
878
  */
868
879
  private resolveTemplateInputs;
869
880
  /** Reads every configured generator's template folder. */
package/dist/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { a as e, c as t, d as n, f as r, l as i, m as a, o, p as s, r as c, s as l, u, v as d, y as f } from "../plugin-context.utilities-BKyER2ln.js";
2
- import { n as p, t as m } from "../bootstrap.utilities-SrW64gG2.js";
1
+ import { a as e, c as t, d as n, f as r, l as i, m as a, o, p as s, r as c, s as l, u, v as d, y as f } from "../plugin-context.utilities-fOm9HZq-.js";
2
+ import { n as p, t as m } from "../bootstrap.utilities-BmaK-AfQ.js";
3
3
  import h from "node:path";
4
4
  //#region projects/ic-suite/conformetry/conformetry-nx/src/index.ts
5
5
  var g = {
package/package.json CHANGED
@@ -84,5 +84,5 @@
84
84
  "strict": true
85
85
  },
86
86
  "types": "./dist/src/index.d.ts",
87
- "version": "0.0.31"
87
+ "version": "0.0.32"
88
88
  }