@conformetry/nx 0.0.36 → 0.0.38

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.38 (2026-10-18)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated conformetry-configuration to 0.0.37
6
+ - Updated conformetry-generation to 0.0.37
7
+ - Updated conformetry-validation to 0.0.36
8
+ - Updated conformetry-output to 0.0.36
9
+
10
+ ## 0.0.37 (2026-10-18)
11
+
12
+ ### 🚀 Features
13
+
14
+ - **conformetry,configuration,caelundas,lexico,meanderaw,callidescope:** ✨ place generators by instances ([#1670](https://github.com/organizzolini/codebase/pull/1670))
15
+
16
+ ### 🧱 Updated Dependencies
17
+
18
+ - Updated conformetry-configuration to 0.0.36
19
+ - Updated conformetry-generation to 0.0.36
20
+ - Updated conformetry-validation to 0.0.35
21
+ - Updated conformetry-output to 0.0.35
22
+
1
23
  ## 0.0.36 (2026-10-16)
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 | 112 |
163
- | Files | 48 |
164
- | Calls traced | 141 |
162
+ | Callables | 129 |
163
+ | Files | 49 |
164
+ | Calls traced | 165 |
165
165
  | Call stacks | 8 |
166
166
  | Deepest stack | 15 |
167
167
  | Stacks through recursion | 0 |
@@ -355,22 +355,24 @@ What this project is judged against, as declared in its own `callidescope.config
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
 
357
357
  <details>
358
- <summary>55 more callables</summary>
358
+ <summary>66 more callables</summary>
359
359
 
360
360
  | Callable | Breadth | Calls directly | Location |
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
+ | `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
+ | `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` |
364
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:409` |
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
367
  | `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
368
  | `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
+ | `PathsService.resolveNewProjectPath` | 4 | `staticDirectoryPrefix`, `missingDirectoryError`, `PathsService.resolveTypeDirectoryPath`, `PathsService.assertDirectoryAllowed` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:241` |
368
370
  | `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
371
  | `PluginService.resolveTemplateInputs` | 4 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)`, `PluginService.map(…)`, `buildTemplateHashCommand` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:234` |
370
372
  | `anonymous` | 4 | `resolvePluginService`, `PluginService.inferTargets`, `filter(…)`, `map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/index.ts:49` |
371
373
  | `ScopeService.resolveGroup` | 3 | `ScopeService.matchesProject`, `ScopeService.isProjectGroup`, `ScopeService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:75` |
372
374
  | `AdapterService.listDirectory` | 3 | `AdapterService.resolveTreePath`, `AdapterService.map(…)`, `AdapterService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:42` |
373
- | `PathsService.resolveScopedDirectory` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PathsService.find(…)`, `ScopeService.resolveScopedDirectory` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:167` |
375
+ | `PathsService.resolveScopedDirectory` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PathsService.find(…)`, `ScopeService.resolveScopedDirectory` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:311` |
374
376
  | `PluginService.resolveOptions` | 3 | `OptionsService.readRegisteredConfigurationPath`, `PluginService.readNxConfiguration`, `OptionsService.resolvePluginOptions` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:193` |
375
377
  | `ScopeService.matchesProject` | 2 | `ScopeService.isProjectGroup`, `ScopeService.every(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:53` |
376
378
  | `ScopeService.resolveScopedDirectory` | 2 | `ScopeService.find(…)`, `ScopeService.findIndex(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:109` |
@@ -379,7 +381,9 @@ What this project is judged against, as declared in its own `callidescope.config
379
381
  | `OptionsService.readRegisteredConfigurationPath` | 2 | `OptionsService.isUnknownArray`, `OptionsService.readString` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:51` |
380
382
  | `OptionsService.resolveConfigurationPath` | 2 | `ConfigurationService.requireConfigurationPath`, `OptionsService.readRegisteredConfigurationPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:98` |
381
383
  | `OptionsService.resolvePluginOptions` | 2 | `ConfigurationService.requireConfigurationPath`, `OptionsService.readString` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:145` |
382
- | `PathsService.resolveNewProjectPath` | 2 | `missingDirectoryError`, `PathsService.resolveTypeDirectoryPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:140` |
384
+ | `matchesSegments` | 2 | `some(…)`, `toSegmentExpression` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:30` |
385
+ | `PathsService.assertDirectoryAllowed` | 2 | `PathsService.some(…)`, `InputError.constructor` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:59` |
386
+ | `PathsService.resolveProjectParentPath` | 2 | `PathsService.resolveScopedDirectory`, `PathsService.resolveModuleParentPath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:281` |
383
387
  | `ProjectsService.readIgnoredPaths` | 2 | `ProjectsService.filter(…)`, `ProjectsService.map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:97` |
384
388
  | `ProjectsService.readProjectScope` | 2 | `ProjectsService.isUnknownArray`, `ProjectsService.filter(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:134` |
385
389
  | `PluginService.assertEmittedPluginCurrent` | 2 | `GeneratorService.emitPlugin`, `ProjectsService.listWorkspaceProjects` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:87` |
@@ -402,9 +406,16 @@ What this project is judged against, as declared in its own `callidescope.config
402
406
  | `InstancesService.flatMap(…)` | 1 | `ScopeService.resolveGroup` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:79` |
403
407
  | `InstancesService.flatMap(…)` | 1 | `ConfigurationService.findInstances` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:84` |
404
408
  | `InstancesService.filter(…)` | 1 | `InstancesService.isInsideProject` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:97` |
405
- | `PathsService.requireModulePath` | 1 | `PathsService.resolveModulePath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:57` |
406
- | `PathsService.resolveModuleParentPath` | 1 | `PathsService.toSorted(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:86` |
407
- | `PathsService.resolveModulePath` | 1 | `PathsService.find(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:118` |
409
+ | `matchesDirectoryPattern` | 1 | `matchesSegments` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:11` |
410
+ | `staticDirectoryPrefix` | 1 | `findIndex(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:22` |
411
+ | `some(…)` | 1 | `matchesSegments` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:42` |
412
+ | `toSegmentExpression` | 1 | `map(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts:65` |
413
+ | `PathsService.some(…)` | 1 | `matchesDirectoryPattern` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:75` |
414
+ | `PathsService.requireModulePath` | 1 | `PathsService.resolveModulePath` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:97` |
415
+ | `PathsService.filter(…)` | 1 | `ConfigurationService.isProjectScoped` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:143` |
416
+ | `PathsService.resolveExplicitDirectory` | 1 | `PathsService.assertDirectoryAllowed` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:159` |
417
+ | `PathsService.resolveModuleParentPath` | 1 | `PathsService.toSorted(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:187` |
418
+ | `PathsService.resolveModulePath` | 1 | `PathsService.find(…)` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:219` |
408
419
  | `ProjectsService.map(…)` | 1 | `ProjectsService.readProjectScope` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:124` |
409
420
  | `PluginService.assertTemplatesExist` | 1 | `ConfigurationService.loadConformetryConfiguration` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:137` |
410
421
  | `PluginService.map(…)` | 1 | `ConfigurationService.collectTemplate` | `projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:263` |
@@ -586,6 +597,8 @@ graph LR
586
597
  file_src_modules_paths_paths_service_ts["src/modules/paths/paths.service.ts"]
587
598
  file_src_modules_paths_paths_service_unit_test_ts["src/modules/paths/paths.service.unit.test.ts"]
588
599
  file_src_modules_paths_paths_types_ts["src/modules/paths/paths.types.ts"]
600
+ file_src_modules_paths_paths_utilities_ts["src/modules/paths/paths.utilities.ts"]
601
+ file_src_modules_paths_paths_utilities_unit_test_ts["src/modules/paths/paths.utilities.unit.test.ts"]
589
602
  file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
590
603
  file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
591
604
  file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
@@ -669,11 +682,13 @@ graph LR
669
682
  file_src_modules_paths_paths_service_ts --> file_src_modules_instances_instances_service_ts
670
683
  file_src_modules_paths_paths_service_ts --> file_src_modules_paths_paths_constants_ts
671
684
  file_src_modules_paths_paths_service_ts --> file_src_modules_paths_paths_types_ts
685
+ file_src_modules_paths_paths_service_ts --> file_src_modules_paths_paths_utilities_ts
672
686
  file_src_modules_paths_paths_service_ts --> file_src_modules_scope_scope_service_ts
673
687
  file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_instances_instances_service_ts
674
688
  file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_paths_paths_module_ts
675
689
  file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_paths_paths_service_ts
676
690
  file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_scope_scope_service_ts
691
+ file_src_modules_paths_paths_utilities_unit_test_ts --> file_src_modules_paths_paths_utilities_ts
677
692
  file_src_modules_plugin_plugin_context_utilities_ts --> file_src_conformetry_nx_module_ts
678
693
  file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_generator_generator_service_ts
679
694
  file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_options_options_service_ts
@@ -735,40 +750,40 @@ graph LR
735
750
 
736
751
  ### Project
737
752
 
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-229.28_kB-6b7280?style=flat-square)
753
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6786-22c55e?style=flat-square)
754
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-243.10_kB-6b7280?style=flat-square)
740
755
  ![Folders](https://img.shields.io/badge/Folders-15-4a4a4a?style=flat-square)
741
- ![Source Files](https://img.shields.io/badge/Source_Files-67-3178c6?style=flat-square)
756
+ ![Source Files](https://img.shields.io/badge/Source_Files-69-3178c6?style=flat-square)
742
757
 
743
758
  ### Measured Targets
744
759
 
745
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-11.24_kB_gzip-6b7280?style=flat-square)
760
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-11.86_kB_gzip-6b7280?style=flat-square)
746
761
 
747
762
  ### TypeScript
748
763
 
749
- ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-66-3178c6?style=flat-square)
750
- ![Interfaces](https://img.shields.io/badge/Interfaces-20-0ea5e9?style=flat-square)
764
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-68-3178c6?style=flat-square)
765
+ ![Interfaces](https://img.shields.io/badge/Interfaces-21-0ea5e9?style=flat-square)
751
766
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
752
767
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
753
768
  ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
754
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-148-6366f1?style=flat-square)
769
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-155-6366f1?style=flat-square)
755
770
  ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
756
771
 
757
772
  ### JavaScript
758
773
 
759
774
  ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-1-f7df1e?style=flat-square)
760
- ![Test Files](https://img.shields.io/badge/Test_Files-16-10b981?style=flat-square)
775
+ ![Test Files](https://img.shields.io/badge/Test_Files-17-10b981?style=flat-square)
761
776
  ![External Packages](https://img.shields.io/badge/External_Packages-19-8b5cf6?style=flat-square)
762
777
  ![Classes](https://img.shields.io/badge/Classes-17-7c3aed?style=flat-square)
763
- ![Functions](https://img.shields.io/badge/Functions-295-16a34a?style=flat-square)
764
- ![Methods](https://img.shields.io/badge/Methods-84-15803d?style=flat-square)
765
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-235-4ade80?style=flat-square)
766
- ![Async Functions](https://img.shields.io/badge/Async_Functions-144-059669?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)
778
+ ![Functions](https://img.shields.io/badge/Functions-319-16a34a?style=flat-square)
779
+ ![Methods](https://img.shields.io/badge/Methods-94-15803d?style=flat-square)
780
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-260-4ade80?style=flat-square)
781
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-153-059669?style=flat-square)
782
+ ![Constants](https://img.shields.io/badge/Constants-301-dc2626?style=flat-square)
783
+ ![Imports](https://img.shields.io/badge/Imports-282-0284c7?style=flat-square)
784
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-83-ea580c?style=flat-square)
785
+ ![Comments](https://img.shields.io/badge/Comments-343-64748b?style=flat-square)
786
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-752-475569?style=flat-square)
772
787
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
773
788
 
774
789
  ### Python
@@ -884,9 +899,9 @@ graph LR
884
899
  ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
885
900
  ![Constants Files](https://img.shields.io/badge/Constants_Files-8-ea580c?style=flat-square)
886
901
  ![Types Files](https://img.shields.io/badge/Types_Files-10-db2777?style=flat-square)
887
- ![Utilities Files](https://img.shields.io/badge/Utilities_Files-3-0ea5e9?style=flat-square)
902
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-4-0ea5e9?style=flat-square)
888
903
  ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
889
- ![Unit Tests](https://img.shields.io/badge/Unit_Tests-16-ca8a04?style=flat-square)
904
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-17-ca8a04?style=flat-square)
890
905
  ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
891
906
  ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
892
907
  ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
@@ -924,20 +939,20 @@ graph LR
924
939
  ### Markdown
925
940
 
926
941
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
927
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-536-1f6feb?style=flat-square)
942
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-558-1f6feb?style=flat-square)
928
943
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
929
- ![H2](https://img.shields.io/badge/H2-39-8b5cf6?style=flat-square)
930
- ![H3](https://img.shields.io/badge/H3-52-a78bfa?style=flat-square)
944
+ ![H2](https://img.shields.io/badge/H2-41-8b5cf6?style=flat-square)
945
+ ![H3](https://img.shields.io/badge/H3-55-a78bfa?style=flat-square)
931
946
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
932
947
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
933
948
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
934
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-176-64748b?style=flat-square)
935
- ![Lists](https://img.shields.io/badge/Lists-46-16a34a?style=flat-square)
936
- ![List Items](https://img.shields.io/badge/List_Items-156-22c55e?style=flat-square)
949
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-185-64748b?style=flat-square)
950
+ ![Lists](https://img.shields.io/badge/Lists-49-16a34a?style=flat-square)
951
+ ![List Items](https://img.shields.io/badge/List_Items-165-22c55e?style=flat-square)
937
952
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
938
953
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
939
954
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
940
- ![Links](https://img.shields.io/badge/Links-22-059669?style=flat-square)
955
+ ![Links](https://img.shields.io/badge/Links-23-059669?style=flat-square)
941
956
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
942
957
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
943
958
  ![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-fOm9HZq-.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-tWMUbdpG.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
@@ -4,16 +4,16 @@ import "reflect-metadata";
4
4
  import { NestFactory as o } from "@nestjs/core";
5
5
  import { ConsoleLogger as s, Global as c, Injectable as l, Module as u, Scope as ee } from "@nestjs/common";
6
6
  import d from "pino";
7
- import { ConfigurationModule as f, ConfigurationService as p, missingDirectoryError as te } from "@conformetry/configuration";
8
- import { GenerationModule as m, GenerationService as h } from "@conformetry/generation";
9
- import { ReportingModule as g, ReportingService as _ } from "@conformetry/output";
10
- import { ValidationModule as v, ValidationService as y } from "@conformetry/validation";
11
- import { formatFiles as ne, getProjects as b, readProjectConfiguration as x } from "@nx/devkit";
7
+ import { ConfigurationModule as f, ConfigurationService as p, InputError as te, missingDirectoryError as m } from "@conformetry/configuration";
8
+ import { GenerationModule as h, GenerationService as g } from "@conformetry/generation";
9
+ import { ReportingModule as _, ReportingService as v } from "@conformetry/output";
10
+ import { ValidationModule as y, ValidationService as b } from "@conformetry/validation";
11
+ import { formatFiles as x, getProjects as ne, readProjectConfiguration as re } from "@nx/devkit";
12
12
  //#region \0rolldown/runtime.js
13
- var S = Object.defineProperty, __name = (e, t) => S(e, "name", {
13
+ var ie = Object.defineProperty, __name = (e, t) => ie(e, "name", {
14
14
  value: t,
15
15
  configurable: !0
16
- }), re = "@conformetry/nx", C = "the \"configurationPath\" option of the @conformetry/nx plugin in nx.json", w = `the "configuration" option, or ${C},`, T = "nx.json", ie = ["configurationPath", "validateTargetName"], ae = /^(\p{Extended_Pictographic}️?(?:‍\p{Extended_Pictographic}️?)*)\s+/u, oe = /^([A-Za-z]+)/, se = /* @__PURE__ */ new Set([
16
+ }), ae = "@conformetry/nx", S = "the \"configurationPath\" option of the @conformetry/nx plugin in nx.json", C = `the "configuration" option, or ${S},`, w = "nx.json", oe = ["configurationPath", "validateTargetName"], se = /^(\p{Extended_Pictographic}️?(?:‍\p{Extended_Pictographic}️?)*)\s+/u, T = /^([A-Za-z]+)/, E = /* @__PURE__ */ new Set([
17
17
  "built",
18
18
  "cut",
19
19
  "found",
@@ -31,7 +31,7 @@ var S = Object.defineProperty, __name = (e, t) => S(e, "name", {
31
31
  "split",
32
32
  "took",
33
33
  "wrote"
34
- ]), E = /* @__PURE__ */ new Set([
34
+ ]), ce = /* @__PURE__ */ new Set([
35
35
  "CommandFactory",
36
36
  "ExceptionHandler",
37
37
  "GraphQLModule",
@@ -105,15 +105,15 @@ var D, O = class LoggerService extends s {
105
105
  getConventionalMessageViolation(e) {
106
106
  let t = e.emoji, n = e.text;
107
107
  if (t === void 0) return `Log message must start with an emoji naming its subject, then a verb: "${n}"`;
108
- let r = oe.exec(n)?.[1];
108
+ let r = T.exec(n)?.[1];
109
109
  if (r === void 0 || !this.isConventionalVerb(r)) return `Log message must begin with a verb in present progressive or past tense, got "${r ?? ""}": "${t} ${n}"`;
110
110
  }
111
111
  isConventionalVerb(e) {
112
112
  let t = e.toLowerCase();
113
- return t.endsWith("ing") || t.endsWith("ed") || se.has(t);
113
+ return t.endsWith("ing") || t.endsWith("ed") || E.has(t);
114
114
  }
115
115
  parseMessage(e) {
116
- let t = String(e), n = ae.exec(t), r = n?.[1];
116
+ let t = String(e), n = se.exec(t), r = n?.[1];
117
117
  return r === void 0 ? {
118
118
  emoji: void 0,
119
119
  text: t
@@ -123,7 +123,7 @@ var D, O = class LoggerService extends s {
123
123
  };
124
124
  }
125
125
  shouldSkipConventionalMessageValidation(e) {
126
- return e !== void 0 && E.has(e);
126
+ return e !== void 0 && ce.has(e);
127
127
  }
128
128
  static get root() {
129
129
  return D.rootLogger ??= D.createRootLogger(), D.rootLogger;
@@ -245,7 +245,7 @@ j = __decorate([u({
245
245
  })], j);
246
246
  //#endregion
247
247
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.constants.ts
248
- var M = "project", ce = "module", le = "type", ue = "directory", N = ".conformetry/nx-generators", de = "// Generated from the conformetry configuration. Do not edit.", P = "The conformetry generator plugin is out of sync with the conformetry configuration.", F = "conformetry", fe = "node_modules/@nx/devkit/src/generators/generators-schema.json", I = class GeneratorService {
248
+ var M = "project", le = "module", ue = "type", de = "directory", N = ".conformetry/nx-generators", fe = "// Generated from the conformetry configuration. Do not edit.", pe = "The conformetry generator plugin is out of sync with the conformetry configuration.", P = "conformetry", me = "node_modules/@nx/devkit/src/generators/generators-schema.json", F = class GeneratorService {
249
249
  configurationService;
250
250
  scopeService;
251
251
  constructor(e, t) {
@@ -253,7 +253,7 @@ var M = "project", ce = "module", le = "type", ue = "directory", N = ".conformet
253
253
  }
254
254
  buildGeneratorModule(e) {
255
255
  return [
256
- de,
256
+ fe,
257
257
  "",
258
258
  "import { runConformetryGenerator } from \"@conformetry/nx\";",
259
259
  "",
@@ -283,7 +283,7 @@ var M = "project", ce = "module", le = "type", ue = "directory", N = ".conformet
283
283
  schema: `./src/schemas/${n.name}.json`
284
284
  };
285
285
  return this.stringify({
286
- $schema: a.relative(e.outputPath, fe).split(a.sep).join("/"),
286
+ $schema: a.relative(e.outputPath, me).split(a.sep).join("/"),
287
287
  generators: t
288
288
  });
289
289
  }
@@ -365,23 +365,23 @@ var M = "project", ce = "module", le = "type", ue = "directory", N = ".conformet
365
365
  ];
366
366
  }
367
367
  };
368
- I = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p, A === void 0 ? Object : A])], I);
368
+ F = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p, A === void 0 ? Object : A])], F);
369
369
  //#endregion
370
370
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.module.ts
371
- var L = class GeneratorModule {};
372
- L = __decorate([u({
371
+ var I = class GeneratorModule {};
372
+ I = __decorate([u({
373
373
  controllers: [],
374
374
  exports: [
375
375
  f,
376
- I,
376
+ F,
377
377
  j
378
378
  ],
379
379
  imports: [f, j],
380
- providers: [I]
381
- })], L);
380
+ providers: [F]
381
+ })], I);
382
382
  //#endregion
383
383
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.constants.ts
384
- var R = "utf8", z = class AdapterService {
384
+ var L = "utf8", R = class AdapterService {
385
385
  constructor() {}
386
386
  async listDirectory(t) {
387
387
  let n = this.resolveTreePath(t);
@@ -397,7 +397,7 @@ var R = "utf8", z = class AdapterService {
397
397
  let n = this.resolveTreePath({
398
398
  directoryPath: t.filePath,
399
399
  workspaceRoot: t.workspaceRoot
400
- }), r = n === void 0 ? null : t.tree.read(n, R);
400
+ }), r = n === void 0 ? null : t.tree.read(n, L);
401
401
  return await Promise.resolve(r ?? e.readFileSync(t.filePath, "utf8"));
402
402
  }
403
403
  resolveTreePath(e) {
@@ -429,24 +429,24 @@ var R = "utf8", z = class AdapterService {
429
429
  }
430
430
  },
431
431
  formatter: { formatFiles: async () => {
432
- await ne(e.tree);
432
+ await x(e.tree);
433
433
  } }
434
434
  };
435
435
  }
436
436
  };
437
- z = __decorate([l(), __decorateMetadata("design:paramtypes", [])], z);
437
+ R = __decorate([l(), __decorateMetadata("design:paramtypes", [])], R);
438
438
  //#endregion
439
439
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.module.ts
440
- var B = class AdapterModule {};
441
- B = __decorate([u({
440
+ var z = class AdapterModule {};
441
+ z = __decorate([u({
442
442
  controllers: [],
443
- exports: [z],
443
+ exports: [R],
444
444
  imports: [],
445
- providers: [z]
446
- })], B);
445
+ providers: [R]
446
+ })], z);
447
447
  //#endregion
448
448
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts
449
- var V = class InstancesService {
449
+ var B = class InstancesService {
450
450
  configurationService;
451
451
  scopeService;
452
452
  constructor(e, t) {
@@ -480,19 +480,19 @@ var V = class InstancesService {
480
480
  });
481
481
  }
482
482
  };
483
- V = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p, A === void 0 ? Object : A])], V);
483
+ B = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p, A === void 0 ? Object : A])], B);
484
484
  //#endregion
485
485
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.module.ts
486
- var H = class InstancesModule {};
487
- H = __decorate([u({
486
+ var V = class InstancesModule {};
487
+ V = __decorate([u({
488
488
  controllers: [],
489
- exports: [V, j],
489
+ exports: [B, j],
490
490
  imports: [f, j],
491
- providers: [V]
492
- })], H);
491
+ providers: [B]
492
+ })], V);
493
493
  //#endregion
494
494
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts
495
- var U = class OptionsService {
495
+ var H = class OptionsService {
496
496
  configurationService;
497
497
  constructor(e) {
498
498
  this.configurationService = e;
@@ -522,10 +522,10 @@ var U = class OptionsService {
522
522
  resolveGeneratorInputs(e) {
523
523
  if (typeof e != "object" || !e) return {};
524
524
  let t = {};
525
- for (let [n, r] of Object.entries({ ...e })) ie.includes(n) || typeof r != "string" || (t[n] = r);
525
+ for (let [n, r] of Object.entries({ ...e })) oe.includes(n) || typeof r != "string" || (t[n] = r);
526
526
  return t;
527
527
  }
528
- resolvePluginOptions(e, t = C) {
528
+ resolvePluginOptions(e, t = S) {
529
529
  let n = typeof e == "object" && e ? { ...e } : {};
530
530
  return {
531
531
  configurationPath: this.configurationService.requireConfigurationPath(this.readString({
@@ -539,25 +539,65 @@ var U = class OptionsService {
539
539
  };
540
540
  }
541
541
  };
542
- U = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p])], U);
542
+ H = __decorate([l(), __decorateMetadata("design:paramtypes", [p === void 0 ? Object : p])], H);
543
543
  //#endregion
544
544
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/options/options.module.ts
545
- var W = class OptionsModule {};
546
- W = __decorate([u({
545
+ var U = class OptionsModule {};
546
+ U = __decorate([u({
547
547
  controllers: [],
548
- exports: [U],
548
+ exports: [H],
549
549
  imports: [f],
550
- providers: [U]
551
- })], W);
550
+ providers: [H]
551
+ })], U);
552
+ //#endregion
553
+ //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.utilities.ts
554
+ function matchesDirectoryPattern(e) {
555
+ return matchesSegments({
556
+ directorySegments: a.posix.normalize(e.directory).split("/"),
557
+ patternSegments: e.pattern.split("/")
558
+ });
559
+ }
560
+ function staticDirectoryPrefix(e) {
561
+ let t = e.split("/"), n = t.findIndex((e) => e.includes("*"));
562
+ return (n === -1 ? t : t.slice(0, n)).join("/");
563
+ }
564
+ function matchesSegments(e) {
565
+ let [t, ...n] = e.patternSegments;
566
+ if (t === void 0) return e.directorySegments.length === 0;
567
+ if (t === "**") return e.directorySegments.some((t, r) => matchesSegments({
568
+ directorySegments: e.directorySegments.slice(r),
569
+ patternSegments: n
570
+ })) || matchesSegments({
571
+ directorySegments: [],
572
+ patternSegments: n
573
+ });
574
+ let [r, ...i] = e.directorySegments;
575
+ return r !== void 0 && toSegmentExpression(t).test(r) && matchesSegments({
576
+ directorySegments: i,
577
+ patternSegments: n
578
+ });
579
+ }
580
+ function toSegmentExpression(e) {
581
+ let t = e.split("*").map((e) => e.replaceAll(/[$()+.?[\\\]^{|}]/g, String.raw`\$&`)).join("[^/]*");
582
+ return RegExp(`^${t}$`);
583
+ }
552
584
  //#endregion
553
585
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts
554
- var G = class PathsService {
586
+ var W = class PathsService {
555
587
  instancesService;
556
588
  configurationService;
557
589
  scopeService;
558
590
  constructor(e, t, n) {
559
591
  this.instancesService = e, this.configurationService = t, this.scopeService = n;
560
592
  }
593
+ assertDirectoryAllowed(e) {
594
+ if (e.allowedDirectories?.enforced !== !0) return;
595
+ let t = a.relative(e.workspaceRoot, e.directory).split(a.sep).join("/");
596
+ if (!e.allowedDirectories.patterns.some((e) => matchesDirectoryPattern({
597
+ directory: t,
598
+ pattern: e
599
+ }))) throw new te(`Generator ${e.generatorName} cannot generate into ${t === "" ? "the workspace root" : t}. Allowed directories: ${e.allowedDirectories.patterns.join(", ")}.`);
600
+ }
561
601
  requireModulePath(e) {
562
602
  let t = this.resolveModulePath({
563
603
  instances: e.instances,
@@ -566,6 +606,23 @@ var G = class PathsService {
566
606
  if (t === void 0) throw Error(`Project ${e.projectName} has no module named ${e.moduleName}. Generate the module first, or name one of its existing modules.`);
567
607
  return t;
568
608
  }
609
+ async resolveAllowedDirectories(e) {
610
+ if (e.generatorName === void 0) return;
611
+ let t = ((await this.configurationService.loadConformetryConfiguration(e.configurationPath)).find((t) => t.name === e.generatorName)?.instances ?? []).filter((e) => !this.configurationService.isProjectScoped(e)).flatMap((e) => e.patterns ?? []);
612
+ return t.length === 0 ? void 0 : {
613
+ enforced: t.some((e) => e.includes("*")),
614
+ patterns: [...new Set(t.map((e) => a.posix.dirname(e)))]
615
+ };
616
+ }
617
+ resolveExplicitDirectory(e) {
618
+ let t = a.resolve(e.workspaceRoot, e.explicitDirectory);
619
+ return this.assertDirectoryAllowed({
620
+ allowedDirectories: e.allowedDirectories,
621
+ directory: t,
622
+ generatorName: e.generatorName,
623
+ workspaceRoot: e.workspaceRoot
624
+ }), t;
625
+ }
569
626
  resolveModuleParentPath(e) {
570
627
  let t = /* @__PURE__ */ new Map();
571
628
  for (let n of e.instances) {
@@ -579,14 +636,32 @@ var G = class PathsService {
579
636
  return t === void 0 ? void 0 : a.join(t.path, t.nameStem);
580
637
  }
581
638
  resolveNewProjectPath(e) {
582
- if (e.type === void 0) throw te({
639
+ let [t] = e.allowedDirectories?.patterns ?? [];
640
+ if (e.type === void 0 && t !== void 0) return a.resolve(e.workspaceRoot, staticDirectoryPrefix(t));
641
+ if (e.type === void 0) throw m({
583
642
  generatorName: e.generatorName,
584
643
  hint: "Or declare a type input on the generator, so the project is placed beside the others of its type."
585
644
  });
586
- return a.resolve(e.workspaceRoot, this.resolveTypeDirectoryPath({
645
+ let n = a.resolve(e.workspaceRoot, this.resolveTypeDirectoryPath({
587
646
  tree: e.tree,
588
647
  type: e.type
589
648
  }) ?? e.type);
649
+ return this.assertDirectoryAllowed({
650
+ allowedDirectories: e.allowedDirectories,
651
+ directory: n,
652
+ generatorName: e.generatorName,
653
+ workspaceRoot: e.workspaceRoot
654
+ }), n;
655
+ }
656
+ async resolveProjectParentPath(e) {
657
+ let t = await this.resolveScopedDirectory({
658
+ configurationPath: e.configurationPath,
659
+ generatorName: e.generatorName
660
+ });
661
+ return t === void 0 ? this.resolveModuleParentPath({
662
+ instances: e.instances,
663
+ projectRootPath: e.projectRootPath
664
+ }) ?? e.projectRootPath : a.join(e.projectRootPath, t);
590
665
  }
591
666
  async resolveScopedDirectory(e) {
592
667
  if (e.generatorName === void 0) return;
@@ -594,69 +669,75 @@ var G = class PathsService {
594
669
  return t === void 0 ? void 0 : this.scopeService.resolveScopedDirectory(t.instances);
595
670
  }
596
671
  resolveTypeDirectoryPath(e) {
597
- for (let [, t] of b(e.tree)) {
672
+ for (let [, t] of ne(e.tree)) {
598
673
  let [n] = t.root.split("/");
599
674
  if (n === e.type) return n;
600
675
  }
601
676
  }
602
677
  async resolveGenerationPath(e) {
603
- let t = e.inputs[ue];
604
- if (t !== void 0) return a.resolve(e.workspaceRoot, t);
605
- let n = e.inputs[M];
606
- if (n === void 0) return this.resolveNewProjectPath({
678
+ let t = await this.resolveAllowedDirectories({
679
+ configurationPath: e.configurationPath,
680
+ generatorName: e.generatorName
681
+ }), n = e.inputs[de];
682
+ if (n !== void 0) return this.resolveExplicitDirectory({
683
+ allowedDirectories: t,
684
+ explicitDirectory: n,
685
+ generatorName: e.generatorName,
686
+ workspaceRoot: e.workspaceRoot
687
+ });
688
+ let r = e.inputs[M];
689
+ if (r === void 0) return this.resolveNewProjectPath({
690
+ allowedDirectories: t,
607
691
  generatorName: e.generatorName,
608
692
  tree: e.tree,
609
- type: e.inputs[le],
693
+ type: e.inputs[ue],
610
694
  workspaceRoot: e.workspaceRoot
611
695
  });
612
- let r = x(e.tree, n), i = a.resolve(e.workspaceRoot, r.root), o = await this.instancesService.findProjectInstances({
696
+ let i = re(e.tree, r), o = a.resolve(e.workspaceRoot, i.root), s = await this.instancesService.findProjectInstances({
613
697
  configurationPath: e.configurationPath,
614
698
  project: {
615
- name: n,
616
- root: r.root,
617
- tags: r.tags ?? []
699
+ name: r,
700
+ root: i.root,
701
+ tags: i.tags ?? []
618
702
  },
619
703
  workspaceRoot: e.workspaceRoot
620
- }), s = e.inputs[ce];
621
- if (s !== void 0) return this.requireModulePath({
622
- instances: o,
623
- moduleName: s,
624
- projectName: e.inputs.project ?? ""
625
- });
626
- let c = await this.resolveScopedDirectory({
704
+ }), c = e.inputs[le];
705
+ return c === void 0 ? await this.resolveProjectParentPath({
627
706
  configurationPath: e.configurationPath,
628
- generatorName: e.generatorName
707
+ generatorName: e.generatorName,
708
+ instances: s,
709
+ projectRootPath: o
710
+ }) : this.requireModulePath({
711
+ instances: s,
712
+ moduleName: c,
713
+ projectName: r
629
714
  });
630
- return c === void 0 ? this.resolveModuleParentPath({
631
- instances: o,
632
- projectRootPath: i
633
- }) ?? i : a.join(i, c);
634
715
  }
635
716
  };
636
- G = __decorate([l(), __decorateMetadata("design:paramtypes", [
637
- V === void 0 ? Object : V,
717
+ W = __decorate([l(), __decorateMetadata("design:paramtypes", [
718
+ B === void 0 ? Object : B,
638
719
  p === void 0 ? Object : p,
639
720
  A === void 0 ? Object : A
640
- ])], G);
721
+ ])], W);
641
722
  //#endregion
642
723
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.module.ts
643
- var K = class PathsModule {};
644
- K = __decorate([u({
724
+ var G = class PathsModule {};
725
+ G = __decorate([u({
645
726
  controllers: [],
646
727
  exports: [
647
- H,
728
+ V,
648
729
  f,
649
- G,
730
+ W,
650
731
  j
651
732
  ],
652
733
  imports: [
653
- H,
734
+ V,
654
735
  f,
655
736
  j
656
737
  ],
657
- providers: [G]
658
- })], K);
659
- var pe = ".nxignore", q = class ProjectsService {
738
+ providers: [W]
739
+ })], G);
740
+ var he = ".nxignore", K = class ProjectsService {
660
741
  constructor() {}
661
742
  isUnknownArray(e) {
662
743
  return Array.isArray(e);
@@ -674,7 +755,7 @@ var pe = ".nxignore", q = class ProjectsService {
674
755
  return t;
675
756
  }
676
757
  readIgnoredPaths(e) {
677
- let n = a.resolve(e, pe);
758
+ let n = a.resolve(e, he);
678
759
  return t(n) ? r(n, "utf8").split("\n").map((e) => e.trim()).filter((e) => e !== "" && !e.startsWith("#")) : [];
679
760
  }
680
761
  listWorkspaceProjects(e) {
@@ -696,19 +777,19 @@ var pe = ".nxignore", q = class ProjectsService {
696
777
  };
697
778
  }
698
779
  };
699
- q = __decorate([l(), __decorateMetadata("design:paramtypes", [])], q);
780
+ K = __decorate([l(), __decorateMetadata("design:paramtypes", [])], K);
700
781
  //#endregion
701
782
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.module.ts
702
- var J = class ProjectsModule {};
703
- J = __decorate([u({
783
+ var q = class ProjectsModule {};
784
+ q = __decorate([u({
704
785
  controllers: [],
705
- exports: [q],
786
+ exports: [K],
706
787
  imports: [],
707
- providers: [q]
708
- })], J);
788
+ providers: [K]
789
+ })], q);
709
790
  //#endregion
710
791
  //#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", ge = String.raw`
792
+ var J = "**/{project.json,conformetry.config.*}", ge = "project.json", Y = "__conformetryPluginContext", _e = String.raw`
712
793
  const crypto = require("crypto");
713
794
  const fs = require("fs");
714
795
  const path = require("path");
@@ -734,7 +815,7 @@ process.stdout.write(hash.digest("base64"));
734
815
  //#endregion
735
816
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.utilities.ts
736
817
  function buildTemplateHashCommand(e) {
737
- return `node -e '${ge.replace("DIRECTORIES", JSON.stringify(e)).replaceAll(/\s*\n\s*/g, " ").trim().replaceAll("'", String.raw`'\''`)}'`;
818
+ return `node -e '${_e.replace("DIRECTORIES", JSON.stringify(e)).replaceAll(/\s*\n\s*/g, " ").trim().replaceAll("'", String.raw`'\''`)}'`;
738
819
  }
739
820
  //#endregion
740
821
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts
@@ -757,7 +838,7 @@ var X, Z = X = class PluginService {
757
838
  let n = await this.generatorService.emitPlugin({
758
839
  configurationPath: e.configurationPath,
759
840
  outputPath: N,
760
- packageName: F,
841
+ packageName: P,
761
842
  projects: this.projectsService.listWorkspaceProjects(e.workspaceRoot)
762
843
  });
763
844
  for (let i of n) {
@@ -779,7 +860,7 @@ var X, Z = X = class PluginService {
779
860
  }
780
861
  }
781
862
  readNxConfiguration(e) {
782
- let n = a.resolve(e, T);
863
+ let n = a.resolve(e, w);
783
864
  if (t(n)) return JSON.parse(r(n, "utf8"));
784
865
  }
785
866
  resolveOptions(e) {
@@ -806,7 +887,7 @@ var X, Z = X = class PluginService {
806
887
  options: e.options,
807
888
  workspaceRoot: e.workspaceRoot
808
889
  }), n = await this.resolveTemplateInputs({ configurationPath: t.configurationPath }), r = /* @__PURE__ */ new Map();
809
- for (let i of e.projectConfigurationFiles.filter((e) => a.basename(e) === he)) {
890
+ for (let i of e.projectConfigurationFiles.filter((e) => a.basename(e) === ge)) {
810
891
  let a = this.projectsService.readProjectScope({
811
892
  projectConfigurationFile: i,
812
893
  workspaceRoot: e.workspaceRoot
@@ -817,7 +898,7 @@ var X, Z = X = class PluginService {
817
898
  workspaceRoot: e.workspaceRoot
818
899
  })).length !== 0 && r.set(a.root, { [t.validateTargetName]: {
819
900
  cache: !0,
820
- executor: `${re}:validate`,
901
+ executor: `${ae}:validate`,
821
902
  inputs: [
822
903
  "default",
823
904
  `{workspaceRoot}/${t.configurationPath}`,
@@ -868,7 +949,7 @@ var X, Z = X = class PluginService {
868
949
  let t = this.resolveOptions({
869
950
  ...e.configuration === void 0 ? {} : { configuration: e.configuration },
870
951
  options: e.options,
871
- surface: w,
952
+ surface: C,
872
953
  workspaceRoot: e.workspaceRoot
873
954
  });
874
955
  await this.assertPluginInSync({
@@ -899,16 +980,16 @@ var X, Z = X = class PluginService {
899
980
  }
900
981
  };
901
982
  Z = X = __decorate([l(), __decorateMetadata("design:paramtypes", [
902
- z === void 0 ? Object : z,
903
- V === void 0 ? Object : V,
983
+ R === void 0 ? Object : R,
984
+ B === void 0 ? Object : B,
904
985
  p === void 0 ? Object : p,
905
- I === void 0 ? Object : I,
906
- h === void 0 ? Object : h,
907
- U === void 0 ? Object : U,
908
- G === void 0 ? Object : G,
909
- q === void 0 ? Object : q,
910
- _ === void 0 ? Object : _,
911
- y === void 0 ? Object : y,
986
+ F === void 0 ? Object : F,
987
+ g === void 0 ? Object : g,
988
+ H === void 0 ? Object : H,
989
+ W === void 0 ? Object : W,
990
+ K === void 0 ? Object : K,
991
+ v === void 0 ? Object : v,
992
+ b === void 0 ? Object : b,
912
993
  O === void 0 ? Object : O
913
994
  ])], Z);
914
995
  //#endregion
@@ -917,33 +998,33 @@ var Q = class PluginModule {};
917
998
  Q = __decorate([u({
918
999
  controllers: [],
919
1000
  exports: [
920
- B,
921
- H,
1001
+ z,
1002
+ V,
922
1003
  f,
923
- L,
924
- m,
1004
+ I,
1005
+ h,
925
1006
  k,
926
- W,
927
- K,
1007
+ U,
1008
+ G,
928
1009
  Z,
929
- J,
930
- g,
1010
+ q,
1011
+ _,
931
1012
  j,
932
- v
1013
+ y
933
1014
  ],
934
1015
  imports: [
935
- B,
936
- H,
1016
+ z,
1017
+ V,
937
1018
  f,
938
- L,
939
- m,
1019
+ I,
1020
+ h,
940
1021
  k,
941
- W,
942
- K,
943
- J,
944
- g,
1022
+ U,
1023
+ G,
1024
+ q,
1025
+ _,
945
1026
  j,
946
- v
1027
+ y
947
1028
  ],
948
1029
  providers: [Z]
949
1030
  })], Q);
@@ -952,9 +1033,9 @@ Q = __decorate([u({
952
1033
  var $ = class MainModule {};
953
1034
  $ = __decorate([u({
954
1035
  controllers: [],
955
- exports: [L, Q],
1036
+ exports: [I, Q],
956
1037
  imports: [
957
- L,
1038
+ I,
958
1039
  k,
959
1040
  Q
960
1041
  ],
@@ -963,16 +1044,16 @@ $ = __decorate([u({
963
1044
  //#endregion
964
1045
  //#region projects/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts
965
1046
  async function resolveGeneratorService() {
966
- return (await resolvePluginContext()).get(I);
1047
+ return (await resolvePluginContext()).get(F);
967
1048
  }
968
1049
  async function resolveOptionsService() {
969
- return (await resolvePluginContext()).get(U);
1050
+ return (await resolvePluginContext()).get(H);
970
1051
  }
971
1052
  async function resolvePluginService() {
972
1053
  return (await resolvePluginContext()).get(Z);
973
1054
  }
974
1055
  async function resolveProjectsService() {
975
- return (await resolvePluginContext()).get(q);
1056
+ return (await resolvePluginContext()).get(K);
976
1057
  }
977
1058
  async function resolvePluginContext() {
978
1059
  let e = globalThis;
@@ -982,4 +1063,4 @@ async function resolvePluginContext() {
982
1063
  }), await e[Y];
983
1064
  }
984
1065
  //#endregion
985
- export { __name as S, P as _, $ as a, w as b, me as c, H as d, V as f, F as g, N as h, resolveProjectsService as i, W as l, z as m, resolveOptionsService as n, Q as o, B as p, resolvePluginService as r, Z as s, resolveGeneratorService as t, U as u, j as v, T as x, A as y };
1066
+ export { __name as S, pe as _, $ as a, C as b, J as c, V as d, B as f, P as g, N as h, resolveProjectsService as i, U as l, R as m, resolveOptionsService as n, Q as o, z as p, resolvePluginService as r, Z as s, resolveGeneratorService as t, H as u, j as v, w as x, A as y };
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as e } from "../bootstrap.utilities-BmaK-AfQ.js";
2
+ import { n as e } from "../bootstrap.utilities-DjU-tum6.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-fOm9HZq-.js";
1
+ import { r as e } from "../../../plugin-context.utilities-tWMUbdpG.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-fOm9HZq-.js";
1
+ import { _ as e, b as t, i as n, n as r, t as i, x as a } from "../../../plugin-context.utilities-tWMUbdpG.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({
@@ -732,6 +732,8 @@ declare class PathsService {
732
732
  private readonly configurationService;
733
733
  private readonly scopeService;
734
734
  constructor(instancesService: InstancesService, configurationService: ConfigurationService, scopeService: ScopeService);
735
+ /** Refuses a destination the generator's instances are not found in. */
736
+ private assertDirectoryAllowed;
735
737
  /**
736
738
  * Locates a named module, refusing one the project does not have.
737
739
  *
@@ -740,6 +742,19 @@ declare class PathsService {
740
742
  * and reported success, which reads as the generator having worked.
741
743
  */
742
744
  private requireModulePath;
745
+ /**
746
+ * The directories a generator's instances sit in, read from its `instances`.
747
+ *
748
+ * An instance's path is the directory its template is laid over, so the
749
+ * parent of each workspace pattern is where a new one may go — which is what
750
+ * keeps generation and validation pointed at the same places. Only groups
751
+ * without tags count, because a tagged group is read inside projects that
752
+ * already exist. `undefined` when there are none, which places no
753
+ * restriction.
754
+ */
755
+ private resolveAllowedDirectories;
756
+ /** Resolves a caller-named destination, refusing one not allowed. */
757
+ private resolveExplicitDirectory;
743
758
  /**
744
759
  * Infers where a project keeps its modules, from where its modules already
745
760
  * are.
@@ -769,6 +784,8 @@ declare class PathsService {
769
784
  * generator having worked.
770
785
  */
771
786
  private resolveNewProjectPath;
787
+ /** Places an instance inside an existing project: scope first, then layout. */
788
+ private resolveProjectParentPath;
772
789
  /**
773
790
  * The folder a generator's scope places new instances in, if it names one.
774
791
  *
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-fOm9HZq-.js";
2
- import { n as p, t as m } from "../bootstrap.utilities-BmaK-AfQ.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-tWMUbdpG.js";
2
+ import { n as p, t as m } from "../bootstrap.utilities-DjU-tum6.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
@@ -7,10 +7,10 @@
7
7
  "url": "https://github.com/organizzolini/codebase/issues"
8
8
  },
9
9
  "dependencies": {
10
- "@conformetry/configuration": "0.0.35",
11
- "@conformetry/generation": "0.0.35",
12
- "@conformetry/output": "0.0.34",
13
- "@conformetry/validation": "0.0.34",
10
+ "@conformetry/configuration": "0.0.37",
11
+ "@conformetry/generation": "0.0.37",
12
+ "@conformetry/output": "0.0.36",
13
+ "@conformetry/validation": "0.0.36",
14
14
  "@nestjs/common": "^11.1.21 || ^12.0.1",
15
15
  "@nestjs/core": "^11.1.21 || ^12.0.1",
16
16
  "@nx/devkit": "^23.0.0",
@@ -84,5 +84,5 @@
84
84
  "strict": true
85
85
  },
86
86
  "types": "./dist/src/index.d.ts",
87
- "version": "0.0.36"
87
+ "version": "0.0.38"
88
88
  }