@conformetry/nx 0.0.65 → 0.0.67

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,25 @@
1
+ ## 0.0.67 (2026-11-04)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated conformetry-configuration to 0.0.66
6
+ - Updated conformetry-generation to 0.0.66
7
+ - Updated conformetry-validation to 0.0.65
8
+ - Updated conformetry-output to 0.0.65
9
+
10
+ ## 0.0.66 (2026-11-04)
11
+
12
+ ### 🔥 Performance
13
+
14
+ - **conformetry:** ⚡️ expand each instance glob once per inferTargets pass ([#2102](https://github.com/organizzolini/codebase/pull/2102))
15
+
16
+ ### 🧱 Updated Dependencies
17
+
18
+ - Updated conformetry-configuration to 0.0.65
19
+ - Updated conformetry-generation to 0.0.65
20
+ - Updated conformetry-validation to 0.0.64
21
+ - Updated conformetry-output to 0.0.64
22
+
1
23
  ## 0.0.65 (2026-11-04)
2
24
 
3
25
  ### 🧱 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 | 130 |
163
- | Files | 49 |
164
- | Calls traced | 167 |
162
+ | Callables | 131 |
163
+ | Files | 50 |
164
+ | Calls traced | 168 |
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:447]
186
+ └─> PluginService.runValidation(args: RunValidationArguments): Promise<RunValidationResult> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:449]
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,7 +215,7 @@ 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:402]
218
+ └─> PluginService.runGenerator(args: RunGeneratorArguments): Promise<string[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:404]
219
219
  ↳ Runs one configured generator against an Nx tree.
220
220
  └─> PluginService.assertPluginInSync(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:122]
221
221
  ↳ Fails fast when the plugin would run against a stale or broken setup.
@@ -269,27 +269,29 @@ What this project is judged against, as declared in its own `callidescope.config
269
269
  <details>
270
270
  <summary>5 more call stacks</summary>
271
271
 
272
- **4. `anonymous`** — depth ≥ 11 · orphan-root
272
+ **4. `anonymous`** — depth ≥ 12 · orphan-root
273
273
 
274
274
  ```text
275
275
  🚀 anonymous(…): Promise<CreateNodesResultArray> [projects/ic-suite/conformetry/conformetry-nx/src/index.ts:49]
276
276
  └─> PluginService.inferTargets(args: InferTargetsArguments): Promise<Map<string, InferredTargets>> [projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:335]
277
277
  ↳ Infers a validation target onto every project that holds at least one instance.
278
- └─> InstancesService.findProjectInstances(args: FindProjectInstancesArguments): Promise<Instance[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:68]
278
+ └─> InstancesService.findProjectInstances(args: FindProjectInstancesArguments): Promise<Instance[]> [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:109]
279
279
  ↳ Expands every instance group that applies to a project, keeping only the instances that live inside it.
280
- └─> InstancesService.flatMap(…)(this: undefined, group: ConformetryInstanceGroup): Instance[] [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:84]
281
- └─> ConfigurationService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:216]
282
- ↳ Expands instance globs into the instances that exist.
283
- └─> InstanceDiscoveryService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:118]
280
+ └─> InstancesService.flatMap(…)(this: undefined, group: ConformetryInstanceGroup): Instance[] [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:125]
281
+ └─> InstancesService.discoverGroup(…): Instance[] [projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:46]
282
+ ↳ Expands one group's globs, reusing an earlier expansion of the same ones.
283
+ └─> ConfigurationService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:216]
284
284
  ↳ Expands instance globs into the instances that exist.
285
- └─> InstanceDiscoveryLocatingService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:156]
286
- ↳ Expands every pattern and returns one instance per distinct path, name, and scope kind.
287
- └─> InstanceDiscoveryLocatingService.globEntries(…): Dirent<string>[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:66]
288
- ↳ Expands one pattern, leaving out every path an exclude glob matches.
289
- └─> InstanceDiscoveryLocatingService.filter(…)(entry: fs.Dirent<string>): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:76]
290
- └─> InstanceDiscoveryLocatingService.isExcluded(…): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:85]
291
- ↳ Whether an exclude glob matches a found path, workspace-relative.
292
- └─> InstanceDiscoveryLocatingService.some(…)(pattern: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:95]
285
+ └─> InstanceDiscoveryService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:118]
286
+ ↳ Expands instance globs into the instances that exist.
287
+ └─> InstanceDiscoveryLocatingService.findInstances(args: FindInstancesArguments): Instance[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:156]
288
+ ↳ Expands every pattern and returns one instance per distinct path, name, and scope kind.
289
+ └─> InstanceDiscoveryLocatingService.globEntries(…): Dirent<string>[] [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:66]
290
+ ↳ Expands one pattern, leaving out every path an exclude glob matches.
291
+ └─> InstanceDiscoveryLocatingService.filter(…)(entry: fs.Dirent<string>): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:76]
292
+ └─> InstanceDiscoveryLocatingService.isExcluded(…): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:85]
293
+ ↳ Whether an exclude glob matches a found path, workspace-relative.
294
+ └─> InstanceDiscoveryLocatingService.some(…)(pattern: string): boolean [projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:95]
293
295
  ```
294
296
 
295
297
  **5. `syncGenerator`** — depth ≥ 11 · orphan-root
@@ -352,18 +354,18 @@ What this project is judged against, as declared in its own `callidescope.config
352
354
  | --- | --- | --- | --- |
353
355
  | `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` |
354
356
  | `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` |
355
- | `PluginService.runGenerator` | 7 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `PluginService.resolveGeneratorDefinition`, `AdapterService.createAdapters`, `OptionsService.resolveGeneratorInputs`, `GenerationService.runGenerator`, `PathsService.resolveGenerationPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:402` |
357
+ | `PluginService.runGenerator` | 7 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `PluginService.resolveGeneratorDefinition`, `AdapterService.createAdapters`, `OptionsService.resolveGeneratorInputs`, `GenerationService.runGenerator`, `PathsService.resolveGenerationPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:404` |
356
358
 
357
359
  <details>
358
- <summary>67 more callables</summary>
360
+ <summary>68 more callables</summary>
359
361
 
360
362
  | Callable | Breadth | Calls directly | Location |
361
363
  | --- | --- | --- | --- |
362
364
  | `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
- | `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` |
365
+ | `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:109` |
364
366
  | `PathsService.resolveAllowedDirectories` | 6 | `ConfigurationService.loadConformetryConfiguration`, `PathsService.flatMap(…)`, `PathsService.filter(…)`, `PathsService.find(…)`, `PathsService.some(…)`, `PathsService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:126` |
365
367
  | `PathsService.resolveGenerationPath` | 6 | `PathsService.resolveAllowedDirectories`, `PathsService.resolveExplicitDirectory`, `PathsService.resolveNewProjectPath`, `InstancesService.findProjectInstances`, `PathsService.requireModulePath`, `PathsService.resolveProjectParentPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:365` |
366
- | `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:447` |
368
+ | `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:449` |
367
369
  | `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:335` |
368
370
  | `ScopeService.resolveScopedProjectNames` | 4 | `ScopeService.filter(…)`, `ScopeService.toSorted(…)`, `ScopeService.map(…)`, `ScopeService.filter(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:135` |
369
371
  | `PathsService.resolveNewProjectPath` | 4 | `staticDirectoryPrefix`, `missingDirectoryError`, `PathsService.resolveTypeDirectoryPath`, `PathsService.assertDirectoryAllowed` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:241` |
@@ -404,9 +406,10 @@ What this project is judged against, as declared in its own `callidescope.config
404
406
  | `AdapterService.listDirectory` | 1 | `AdapterService.listDirectory` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:114` |
405
407
  | `AdapterService.readFile` | 1 | `AdapterService.readFile` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:124` |
406
408
  | `AdapterService.writeFile` | 1 | `AdapterService.resolveTreePath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:131` |
407
- | `InstancesService.flatMap(…)` | 1 | `ScopeService.resolveGroup` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:79` |
408
- | `InstancesService.flatMap(…)` | 1 | `ConfigurationService.findInstances` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:84` |
409
- | `InstancesService.filter(…)` | 1 | `InstancesService.isInsideProject` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:97` |
409
+ | `InstancesService.discoverGroup` | 1 | `ConfigurationService.findInstances` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:46` |
410
+ | `InstancesService.flatMap(…)` | 1 | `ScopeService.resolveGroup` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:120` |
411
+ | `InstancesService.flatMap(…)` | 1 | `InstancesService.discoverGroup` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:125` |
412
+ | `InstancesService.filter(…)` | 1 | `InstancesService.isInsideProject` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:132` |
410
413
  | `matchesDirectoryPattern` | 1 | `matchesSegments` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:11` |
411
414
  | `staticDirectoryPrefix` | 1 | `findIndex(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:22` |
412
415
  | `some(…)` | 1 | `matchesSegments` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:42` |
@@ -559,6 +562,7 @@ graph LR
559
562
  file_callidescope_config_ts["callidescope.config.ts"]
560
563
  file_codependix_config_ts["codependix.config.ts"]
561
564
  file_codometer_config_ts["codometer.config.ts"]
565
+ file_coinagerie_config_ts["coinagerie.config.ts"]
562
566
  file_eslint_config_ts["eslint.config.ts"]
563
567
  file_src_conformetry_nx_main_ts["src/conformetry-nx.main.ts"]
564
568
  file_src_conformetry_nx_main_unit_test_ts["src/conformetry-nx.main.unit.test.ts"]
@@ -751,23 +755,23 @@ graph LR
751
755
 
752
756
  ### Project
753
757
 
754
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6979-22c55e?style=flat-square)
755
- ![Repository Size](https://img.shields.io/badge/Repository_Size-256.90_kB-6b7280?style=flat-square)
758
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-7120-22c55e?style=flat-square)
759
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-261.87_kB-6b7280?style=flat-square)
756
760
  ![Folders](https://img.shields.io/badge/Folders-15-4a4a4a?style=flat-square)
757
- ![Source Files](https://img.shields.io/badge/Source_Files-69-3178c6?style=flat-square)
761
+ ![Source Files](https://img.shields.io/badge/Source_Files-70-3178c6?style=flat-square)
758
762
 
759
763
  ### Measured Targets
760
764
 
761
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-11.76_kB_gzip-6b7280?style=flat-square)
765
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-11.85_kB_gzip-6b7280?style=flat-square)
762
766
 
763
767
  ### TypeScript
764
768
 
765
- ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-68-3178c6?style=flat-square)
769
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-69-3178c6?style=flat-square)
766
770
  ![Interfaces](https://img.shields.io/badge/Interfaces-21-0ea5e9?style=flat-square)
767
771
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
768
772
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
769
773
  ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
770
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-156-6366f1?style=flat-square)
774
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-158-6366f1?style=flat-square)
771
775
  ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
772
776
 
773
777
  ### JavaScript
@@ -776,15 +780,15 @@ graph LR
776
780
  ![Test Files](https://img.shields.io/badge/Test_Files-17-10b981?style=flat-square)
777
781
  ![External Packages](https://img.shields.io/badge/External_Packages-19-8b5cf6?style=flat-square)
778
782
  ![Classes](https://img.shields.io/badge/Classes-17-7c3aed?style=flat-square)
779
- ![Functions](https://img.shields.io/badge/Functions-325-16a34a?style=flat-square)
780
- ![Methods](https://img.shields.io/badge/Methods-95-15803d?style=flat-square)
781
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-261-4ade80?style=flat-square)
782
- ![Async Functions](https://img.shields.io/badge/Async_Functions-159-059669?style=flat-square)
783
- ![Constants](https://img.shields.io/badge/Constants-310-dc2626?style=flat-square)
784
- ![Imports](https://img.shields.io/badge/Imports-285-0284c7?style=flat-square)
783
+ ![Functions](https://img.shields.io/badge/Functions-329-16a34a?style=flat-square)
784
+ ![Methods](https://img.shields.io/badge/Methods-96-15803d?style=flat-square)
785
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-263-4ade80?style=flat-square)
786
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-162-059669?style=flat-square)
787
+ ![Constants](https://img.shields.io/badge/Constants-325-dc2626?style=flat-square)
788
+ ![Imports](https://img.shields.io/badge/Imports-288-0284c7?style=flat-square)
785
789
  ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-83-ea580c?style=flat-square)
786
- ![Comments](https://img.shields.io/badge/Comments-344-64748b?style=flat-square)
787
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-758-475569?style=flat-square)
790
+ ![Comments](https://img.shields.io/badge/Comments-346-64748b?style=flat-square)
791
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-770-475569?style=flat-square)
788
792
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
789
793
 
790
794
  ### Python
@@ -805,16 +809,16 @@ graph LR
805
809
  ### JSON
806
810
 
807
811
  ![JSON Files](https://img.shields.io/badge/JSON_Files-8-a16207?style=flat-square)
808
- ![JSON Lines](https://img.shields.io/badge/JSON_Lines-256-ca8a04?style=flat-square)
812
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-257-ca8a04?style=flat-square)
809
813
  ![JSON Objects](https://img.shields.io/badge/JSON_Objects-58-7c3aed?style=flat-square)
810
814
  ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-14-8b5cf6?style=flat-square)
811
815
  ![JSON Properties](https://img.shields.io/badge/JSON_Properties-167-0284c7?style=flat-square)
812
- ![JSON Strings](https://img.shields.io/badge/JSON_Strings-141-16a34a?style=flat-square)
816
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-142-16a34a?style=flat-square)
813
817
  ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-3-059669?style=flat-square)
814
818
  ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-6-0ea5e9?style=flat-square)
815
819
  ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
816
- ![JSON Items](https://img.shields.io/badge/JSON_Items-47-475569?style=flat-square)
817
- ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-222-dc2626?style=flat-square)
820
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-48-475569?style=flat-square)
821
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-223-dc2626?style=flat-square)
818
822
  ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
819
823
 
820
824
  ### YAML
@@ -940,23 +944,63 @@ graph LR
940
944
  ### Markdown
941
945
 
942
946
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
943
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-828-1f6feb?style=flat-square)
947
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-850-1f6feb?style=flat-square)
944
948
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
945
- ![H2](https://img.shields.io/badge/H2-68-8b5cf6?style=flat-square)
946
- ![H3](https://img.shields.io/badge/H3-87-a78bfa?style=flat-square)
949
+ ![H2](https://img.shields.io/badge/H2-70-8b5cf6?style=flat-square)
950
+ ![H3](https://img.shields.io/badge/H3-90-a78bfa?style=flat-square)
947
951
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
948
952
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
949
953
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
950
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-300-64748b?style=flat-square)
951
- ![Lists](https://img.shields.io/badge/Lists-82-16a34a?style=flat-square)
952
- ![List Items](https://img.shields.io/badge/List_Items-280-22c55e?style=flat-square)
954
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-309-64748b?style=flat-square)
955
+ ![Lists](https://img.shields.io/badge/Lists-85-16a34a?style=flat-square)
956
+ ![List Items](https://img.shields.io/badge/List_Items-289-22c55e?style=flat-square)
953
957
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
954
958
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
955
959
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
956
- ![Links](https://img.shields.io/badge/Links-34-059669?style=flat-square)
960
+ ![Links](https://img.shields.io/badge/Links-35-059669?style=flat-square)
957
961
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
958
962
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
959
963
  ![Inline Code](https://img.shields.io/badge/Inline_Code-76-ef4444?style=flat-square)
960
964
  ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
961
965
  ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
962
966
  <!-- codometer:end -->
967
+
968
+ <!-- coinagerie:start -->
969
+
970
+ ## 🪙 Coinagerie
971
+
972
+ The words this project uses that the root glossary does not define, regenerated with `nx run conformetry-nx:coinagerie-check:write`.
973
+
974
+ - **abort**:
975
+ - **adapter**:
976
+ - **bare**:
977
+ - **breadth**:
978
+ - **discovery**:
979
+ - **disk**:
980
+ - **execution**:
981
+ - **explicit**:
982
+ - **filesystem**:
983
+ - **formatter**:
984
+ - **gadget**:
985
+ - **generation**:
986
+ - **hint**:
987
+ - **lstat**:
988
+ - **mix**:
989
+ - **notice**:
990
+ - **posix**:
991
+ - **readlink**:
992
+ - **realpath**:
993
+ - **runtime**:
994
+ - **scoped**:
995
+ - **statistic**:
996
+ - **stem**:
997
+ - **stray**:
998
+ - **subpath**:
999
+ - **symbolic**:
1000
+ - **symlink**:
1001
+ - **threshold**:
1002
+ - **untagged**:
1003
+ - **widget**:
1004
+ - **wildcard**:
1005
+
1006
+ <!-- coinagerie:end -->
@@ -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-BgCNBly_.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-DXqnEBw0.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
  // src/modules/generator/bootstrap.utilities.ts
@@ -441,6 +441,18 @@ var B = class InstancesService {
441
441
  constructor(e, t) {
442
442
  this.configurationService = e, this.scopeService = t;
443
443
  }
444
+ discoverGroup(e) {
445
+ let { group: t } = e, n = {
446
+ ...t.exclude === void 0 ? {} : { exclude: t.exclude },
447
+ patterns: t.patterns ?? [],
448
+ ...t.substitutions === void 0 ? {} : { substitutions: t.substitutions },
449
+ ...t.threshold === void 0 ? {} : { threshold: t.threshold },
450
+ workingDirectory: e.workspaceRoot
451
+ }, r = JSON.stringify(n), i = e.cache?.get(r);
452
+ if (i !== void 0) return i;
453
+ let a = this.configurationService.findInstances(n);
454
+ return e.cache?.set(r, a), a;
455
+ }
444
456
  isInsideProject(e) {
445
457
  let t = a.relative(e.projectRootPath, a.join(e.instance.path, e.instance.nameStem));
446
458
  return t !== ".." && !t.startsWith(`..${a.sep}`) && !a.isAbsolute(t);
@@ -449,12 +461,10 @@ var B = class InstancesService {
449
461
  let t = await this.configurationService.loadConformetryConfiguration(e.configurationPath), n = a.resolve(e.workspaceRoot, e.project.root), r = t.flatMap((e) => e.instances).flatMap((t) => this.scopeService.resolveGroup({
450
462
  group: t,
451
463
  project: e.project
452
- })).flatMap((t) => this.configurationService.findInstances({
453
- ...t.exclude === void 0 ? {} : { exclude: t.exclude },
454
- patterns: t.patterns ?? [],
455
- ...t.substitutions === void 0 ? {} : { substitutions: t.substitutions },
456
- ...t.threshold === void 0 ? {} : { threshold: t.threshold },
457
- workingDirectory: e.workspaceRoot
464
+ })).flatMap((t) => this.discoverGroup({
465
+ cache: e.discoveryCache,
466
+ group: t,
467
+ workspaceRoot: e.workspaceRoot
458
468
  })).filter((e) => this.isInsideProject({
459
469
  instance: e,
460
470
  projectRootPath: n
@@ -877,14 +887,15 @@ var X, Z = X = class PluginService {
877
887
  let t = this.resolveOptions({
878
888
  options: e.options,
879
889
  workspaceRoot: e.workspaceRoot
880
- }), n = await this.resolveTemplateInputs({ configurationPath: t.configurationPath }), r = /* @__PURE__ */ new Map();
881
- for (let i of e.projectConfigurationFiles.filter((e) => a.basename(e) === ge)) {
890
+ }), n = await this.resolveTemplateInputs({ configurationPath: t.configurationPath }), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
891
+ for (let o of e.projectConfigurationFiles.filter((e) => a.basename(e) === ge)) {
882
892
  let a = this.projectsService.readProjectScope({
883
- projectConfigurationFile: i,
893
+ projectConfigurationFile: o,
884
894
  workspaceRoot: e.workspaceRoot
885
895
  });
886
896
  a.root !== "." && (await this.instancesService.findProjectInstances({
887
897
  configurationPath: t.configurationPath,
898
+ discoveryCache: i,
888
899
  project: a,
889
900
  workspaceRoot: e.workspaceRoot
890
901
  })).length !== 0 && r.set(a.root, { [t.validateTargetName]: {
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { n as e } from "../bootstrap.utilities-BLYNYMP2.js";
2
+ import { n as e } from "../bootstrap.utilities-D3SsCcMO.js";
3
3
  // src/conformetry-nx.main.ts
4
4
  e(process.cwd());
@@ -1,4 +1,4 @@
1
- import { r as e } from "../../../plugin-context.utilities-BgCNBly_.js";
1
+ import { r as e } from "../../../plugin-context.utilities-DXqnEBw0.js";
2
2
  // 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-BgCNBly_.js";
1
+ import { _ as e, b as t, i as n, n as r, t as i, x as a } from "../../../plugin-context.utilities-DXqnEBw0.js";
2
2
  // 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({
@@ -162,6 +162,12 @@ declare interface EmittedFile {
162
162
  /** Arguments for collecting the instances that belong to one project. */
163
163
  declare interface FindProjectInstancesArguments {
164
164
  readonly configurationPath: string;
165
+ /**
166
+ * Shared across the projects of one pass, so a workspace-wide glob that is
167
+ * the same for every project is expanded once. Omit it and every call globs
168
+ * for itself.
169
+ */
170
+ readonly discoveryCache?: Map<string, Instance[]>;
165
171
  readonly project: ProjectScope;
166
172
  readonly workspaceRoot: string;
167
173
  }
@@ -279,6 +285,16 @@ export declare class InstancesService {
279
285
  private readonly configurationService;
280
286
  private readonly scopeService;
281
287
  constructor(configurationService: ConfigurationService, scopeService: ScopeService);
288
+ /**
289
+ * Expands one group's globs, reusing an earlier expansion of the same ones.
290
+ *
291
+ * An untagged group is the same glob for every project, and a glob walks the
292
+ * whole workspace, so expanding it per project is what made inferring the
293
+ * targets of ~70 projects take half a minute. The key is the whole request,
294
+ * so a tagged group, whose globs differ by project root, never shares an
295
+ * entry with another project's.
296
+ */
297
+ private discoverGroup;
282
298
  /**
283
299
  * Returns whether an instance belongs to a project.
284
300
  *
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-BgCNBly_.js";
2
- import { n as p, t as m } from "../bootstrap.utilities-BLYNYMP2.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-DXqnEBw0.js";
2
+ import { n as p, t as m } from "../bootstrap.utilities-D3SsCcMO.js";
3
3
  import h from "node:path";
4
4
  // src/index.ts
5
5
  var g = {
package/package.json CHANGED
@@ -7,10 +7,10 @@
7
7
  "url": "https://github.com/organizzolini/codebase/issues"
8
8
  },
9
9
  "dependencies": {
10
- "@conformetry/configuration": "0.0.64",
11
- "@conformetry/generation": "0.0.64",
12
- "@conformetry/output": "0.0.63",
13
- "@conformetry/validation": "0.0.63",
10
+ "@conformetry/configuration": "0.0.66",
11
+ "@conformetry/generation": "0.0.66",
12
+ "@conformetry/output": "0.0.65",
13
+ "@conformetry/validation": "0.0.65",
14
14
  "@nestjs/common": "^11.1.21 || ^12.0.1",
15
15
  "@nestjs/core": "^11.1.21 || ^12.0.1",
16
16
  "@nx/devkit": "^24.0.0",
@@ -84,5 +84,5 @@
84
84
  "strict": true
85
85
  },
86
86
  "types": "./dist/src/index.d.ts",
87
- "version": "0.0.65"
87
+ "version": "0.0.67"
88
88
  }