@conformetry/configuration 0.0.38 → 0.0.39

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,13 @@
1
+ ## 0.0.39 (2026-10-18)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **conformetry:** ✨ run configured generator hooks from the command line ([#1693](https://github.com/organizzolini/codebase/pull/1693), [#1675](https://github.com/organizzolini/codebase/issues/1675))
6
+
7
+ ### 🧱 Updated Dependencies
8
+
9
+ - Updated conformetry-core to 0.0.38
10
+
1
11
  ## 0.0.38 (2026-10-18)
2
12
 
3
13
  ### 🧱 Updated Dependencies
package/README.md CHANGED
@@ -292,10 +292,10 @@ Call stacks traced through `projects/ic-suite/conformetry/conformetry-configurat
292
292
 
293
293
  | Measure | Value |
294
294
  | --- | --- |
295
- | Callables | 183 |
295
+ | Callables | 186 |
296
296
  | Files | 38 |
297
- | Calls traced | 167 |
298
- | Call stacks | 5 |
297
+ | Calls traced | 169 |
298
+ | Call stacks | 6 |
299
299
  | Deepest stack | 10 |
300
300
  | Stacks through recursion | 0 |
301
301
  | Unfollowable calls | 7 |
@@ -369,7 +369,7 @@ What this project is judged against, as declared in its own `callidescope.config
369
369
  ```
370
370
 
371
371
  <details>
372
- <summary>2 more call stacks</summary>
372
+ <summary>3 more call stacks</summary>
373
373
 
374
374
  **4. `assertNoCollisions`** — depth ≥ 3 · orphan-root
375
375
 
@@ -392,6 +392,14 @@ What this project is judged against, as declared in its own `callidescope.config
392
392
  ↳ Derives the case variants every template can reference from one name.
393
393
  ```
394
394
 
395
+ **6. `generatorHookSchema`** — depth 2 · orphan-root
396
+
397
+ ```text
398
+ 🚀 generatorHookSchema(hookName: string): z.ZodType<GeneratorHook> [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:71]
399
+ ↳ A hook as a config file declares it: a function, and nothing narrower.
400
+ └─> custom(…)(value: unknown): value is Function [projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:72]
401
+ ```
402
+
395
403
  </details>
396
404
 
397
405
  ### Breadth
@@ -403,7 +411,7 @@ What this project is judged against, as declared in its own `callidescope.config
403
411
  | `InputPromptingService.promptForInput` | 4 | `InputPromptingService.assertCanPrompt`, `InputSchemaService.readEnumValues`, `InputPromptingService.map(…)`, `InputSchemaService.readPromptMessage` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:90` |
404
412
 
405
413
  <details>
406
- <summary>102 more callables</summary>
414
+ <summary>104 more callables</summary>
407
415
 
408
416
  | Callable | Breadth | Calls directly | Location |
409
417
  | --- | --- | --- | --- |
@@ -412,7 +420,7 @@ What this project is judged against, as declared in its own `callidescope.config
412
420
  | `InstanceDiscoveryService.resolveInventoriedInstances` | 4 | `InstanceDiscoveryService.takeInventory`, `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryService.filter(…)`, `InstanceDiscoveryService.map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:219` |
413
421
  | `InstanceDiscoveryService.resolveInventoriedTemplates` | 4 | `InstanceDiscoveryService.takeInventory`, `InstanceDiscoveryService.filter(…)`, `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryService.filter(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:244` |
414
422
  | `InstanceDiscoveryService.takeInventory` | 4 | `TemplateDiscoveryService.collectTemplates`, `InstanceDiscoveryService.findInstances`, `InstanceDiscoveryService.readInventoryGlobs`, `InstanceDiscoveryService.map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:283` |
415
- | `ConfigurationService.loadConformetryConfiguration` | 4 | `ConfigurationService.resolveConfigurationPath`, `UnknownConfigurationFileTypeError.constructor`, `ConfigurationService.loadConfigurationModule`, `ConfigurationService.map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:244` |
423
+ | `ConfigurationService.loadConformetryConfiguration` | 4 | `ConfigurationService.resolveConfigurationPath`, `UnknownConfigurationFileTypeError.constructor`, `ConfigurationService.loadConfigurationModule`, `ConfigurationService.map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:265` |
416
424
  | `assertNoCollisions` | 3 | `findDuplicates`, `findUnusableNames`, `findReservedNames` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:28` |
417
425
  | `findReservedNames` | 3 | `map(…)`, `filter(…)`, `map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:97` |
418
426
  | `findUnusableNames` | 3 | `map(…)`, `filter(…)`, `map(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:112` |
@@ -435,6 +443,7 @@ What this project is judged against, as declared in its own `callidescope.config
435
443
  | `InstanceDiscoveryMatchingService.map(…)` | 2 | `InstanceDiscoveryMatchingService.fillPlaceholders`, `TemplateDiscoveryService.countMatchingFiles` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:186` |
436
444
  | `missingInputError` | 1 | `InputError.constructor` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.constants.ts:55` |
437
445
  | `missingDirectoryError` | 1 | `InputError.constructor` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.constants.ts:70` |
446
+ | `generatorHookSchema` | 1 | `custom(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.constants.ts:71` |
438
447
  | `InputOptionsService.resolvePropertyName` | 1 | `InputOptionsService.find(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-options.service.ts:100` |
439
448
  | `InputOptionsService.collectGeneratorInputs` | 1 | `InputOptionsService.collectOneInput` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-options.service.ts:120` |
440
449
  | `InputSchemaService.readSchemaProperty` | 1 | `InputSchemaService.find(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:26` |
@@ -485,30 +494,31 @@ What this project is judged against, as declared in its own `callidescope.config
485
494
  | `InstanceDiscoveryService.map(…)` | 1 | `InstanceDiscoveryService.flatMap(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:256` |
486
495
  | `InstanceDiscoveryService.flatMap(…)` | 1 | `InstanceDiscoveryService.find(…)` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:257` |
487
496
  | `InstanceDiscoveryService.map(…)` | 1 | `InstanceDiscoveryService.weighInstance` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:295` |
488
- | `ConfigurationService.loadConfigurationModule` | 1 | `ConfigurationService.loadJsonConfiguration` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:136` |
489
- | `ConfigurationService.resolveConfigurationPath` | 1 | `ConfigurationService.findWorkspaceRoot` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:175` |
490
- | `ConfigurationService.buildNameSubstitutions` | 1 | `RenderingService.buildNameSubstitutions` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:203` |
491
- | `ConfigurationService.collectTemplate` | 1 | `TemplateDiscoveryService.collectTemplate` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:208` |
492
- | `ConfigurationService.collectTemplates` | 1 | `TemplateDiscoveryService.collectTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:215` |
493
- | `ConfigurationService.findInstances` | 1 | `InstanceDiscoveryService.findInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:223` |
494
- | `ConfigurationService.isAtTerminal` | 1 | `InputPromptingService.isAtTerminal` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:228` |
495
- | `ConfigurationService.isProjectScoped` | 1 | `InstanceGroupService.isProjectScoped` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:233` |
496
- | `ConfigurationService.map(…)` | 1 | `ConfigurationService.applyGeneratorDefaults` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:260` |
497
- | `ConfigurationService.matchInstances` | 1 | `InstanceDiscoveryService.matchInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:264` |
498
- | `ConfigurationService.parseCommaDelimitedOption` | 1 | `InputService.parseCommaDelimitedOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:272` |
499
- | `ConfigurationService.parseOptionalOption` | 1 | `InputService.parseOptionalOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:279` |
500
- | `ConfigurationService.parseThresholdOption` | 1 | `InputService.parseThresholdOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:284` |
501
- | `ConfigurationService.prepareDocuments` | 1 | `InstanceDiscoveryService.prepareDocuments` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:292` |
502
- | `ConfigurationService.promptForTemplate` | 1 | `InputPromptingService.promptForTemplate` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:299` |
503
- | `ConfigurationService.promptForTemplates` | 1 | `InputPromptingService.promptForTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:306` |
504
- | `ConfigurationService.readWorkspaceGroups` | 1 | `InstanceDiscoveryService.readWorkspaceGroups` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:313` |
505
- | `ConfigurationService.renderContent` | 1 | `RenderingService.renderContent` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:320` |
506
- | `ConfigurationService.renderPath` | 1 | `RenderingService.renderPath` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:327` |
507
- | `ConfigurationService.requireConfigurationPath` | 1 | `ConfigurationPathRequiredError.constructor` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:342` |
508
- | `ConfigurationService.resolveGeneratorInputs` | 1 | `InputService.resolveGeneratorInputs` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:356` |
509
- | `ConfigurationService.resolveInstanceFiles` | 1 | `InstanceDiscoveryService.resolveInstanceFiles` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:363` |
510
- | `ConfigurationService.resolveInventoriedInstances` | 1 | `InstanceDiscoveryService.resolveInventoriedInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:368` |
511
- | `ConfigurationService.resolveInventoriedTemplates` | 1 | `InstanceDiscoveryService.resolveInventoriedTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:375` |
497
+ | `ConfigurationService.applyGeneratorDefaults` | 1 | `ConfigurationService.applyHookDefaults` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:89` |
498
+ | `ConfigurationService.loadConfigurationModule` | 1 | `ConfigurationService.loadJsonConfiguration` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:157` |
499
+ | `ConfigurationService.resolveConfigurationPath` | 1 | `ConfigurationService.findWorkspaceRoot` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:196` |
500
+ | `ConfigurationService.buildNameSubstitutions` | 1 | `RenderingService.buildNameSubstitutions` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:224` |
501
+ | `ConfigurationService.collectTemplate` | 1 | `TemplateDiscoveryService.collectTemplate` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:229` |
502
+ | `ConfigurationService.collectTemplates` | 1 | `TemplateDiscoveryService.collectTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:236` |
503
+ | `ConfigurationService.findInstances` | 1 | `InstanceDiscoveryService.findInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:244` |
504
+ | `ConfigurationService.isAtTerminal` | 1 | `InputPromptingService.isAtTerminal` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:249` |
505
+ | `ConfigurationService.isProjectScoped` | 1 | `InstanceGroupService.isProjectScoped` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:254` |
506
+ | `ConfigurationService.map(…)` | 1 | `ConfigurationService.applyGeneratorDefaults` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:281` |
507
+ | `ConfigurationService.matchInstances` | 1 | `InstanceDiscoveryService.matchInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:285` |
508
+ | `ConfigurationService.parseCommaDelimitedOption` | 1 | `InputService.parseCommaDelimitedOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:293` |
509
+ | `ConfigurationService.parseOptionalOption` | 1 | `InputService.parseOptionalOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:300` |
510
+ | `ConfigurationService.parseThresholdOption` | 1 | `InputService.parseThresholdOption` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:305` |
511
+ | `ConfigurationService.prepareDocuments` | 1 | `InstanceDiscoveryService.prepareDocuments` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:313` |
512
+ | `ConfigurationService.promptForTemplate` | 1 | `InputPromptingService.promptForTemplate` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:320` |
513
+ | `ConfigurationService.promptForTemplates` | 1 | `InputPromptingService.promptForTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:327` |
514
+ | `ConfigurationService.readWorkspaceGroups` | 1 | `InstanceDiscoveryService.readWorkspaceGroups` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:334` |
515
+ | `ConfigurationService.renderContent` | 1 | `RenderingService.renderContent` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:341` |
516
+ | `ConfigurationService.renderPath` | 1 | `RenderingService.renderPath` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:348` |
517
+ | `ConfigurationService.requireConfigurationPath` | 1 | `ConfigurationPathRequiredError.constructor` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:363` |
518
+ | `ConfigurationService.resolveGeneratorInputs` | 1 | `InputService.resolveGeneratorInputs` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:377` |
519
+ | `ConfigurationService.resolveInstanceFiles` | 1 | `InstanceDiscoveryService.resolveInstanceFiles` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:384` |
520
+ | `ConfigurationService.resolveInventoriedInstances` | 1 | `InstanceDiscoveryService.resolveInventoriedInstances` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:389` |
521
+ | `ConfigurationService.resolveInventoriedTemplates` | 1 | `InstanceDiscoveryService.resolveInventoriedTemplates` | `projects/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:396` |
512
522
 
513
523
  </details>
514
524
  <!-- callidescope:end -->
@@ -749,14 +759,14 @@ graph LR
749
759
 
750
760
  ### Project
751
761
 
752
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6721-22c55e?style=flat-square)
753
- ![Repository Size](https://img.shields.io/badge/Repository_Size-233.04_kB-6b7280?style=flat-square)
762
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6837-22c55e?style=flat-square)
763
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-237.51_kB-6b7280?style=flat-square)
754
764
  ![Folders](https://img.shields.io/badge/Folders-9-4a4a4a?style=flat-square)
755
765
  ![Source Files](https://img.shields.io/badge/Source_Files-55-3178c6?style=flat-square)
756
766
 
757
767
  ### Measured Targets
758
768
 
759
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-8.22_kB_gzip-6b7280?style=flat-square)
769
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-8.35_kB_gzip-6b7280?style=flat-square)
760
770
 
761
771
  ### TypeScript
762
772
 
@@ -765,7 +775,7 @@ graph LR
765
775
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-2-0369a1?style=flat-square)
766
776
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
767
777
  ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
768
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-187-6366f1?style=flat-square)
778
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-189-6366f1?style=flat-square)
769
779
  ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
770
780
 
771
781
  ### JavaScript
@@ -774,15 +784,15 @@ graph LR
774
784
  ![Test Files](https://img.shields.io/badge/Test_Files-15-10b981?style=flat-square)
775
785
  ![External Packages](https://img.shields.io/badge/External_Packages-17-8b5cf6?style=flat-square)
776
786
  ![Classes](https://img.shields.io/badge/Classes-21-7c3aed?style=flat-square)
777
- ![Functions](https://img.shields.io/badge/Functions-355-16a34a?style=flat-square)
778
- ![Methods](https://img.shields.io/badge/Methods-147-15803d?style=flat-square)
779
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-404-4ade80?style=flat-square)
780
- ![Async Functions](https://img.shields.io/badge/Async_Functions-98-059669?style=flat-square)
781
- ![Constants](https://img.shields.io/badge/Constants-328-dc2626?style=flat-square)
782
- ![Imports](https://img.shields.io/badge/Imports-216-0284c7?style=flat-square)
787
+ ![Functions](https://img.shields.io/badge/Functions-364-16a34a?style=flat-square)
788
+ ![Methods](https://img.shields.io/badge/Methods-148-15803d?style=flat-square)
789
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-408-4ade80?style=flat-square)
790
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-104-059669?style=flat-square)
791
+ ![Constants](https://img.shields.io/badge/Constants-334-dc2626?style=flat-square)
792
+ ![Imports](https://img.shields.io/badge/Imports-219-0284c7?style=flat-square)
783
793
  ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-66-ea580c?style=flat-square)
784
- ![Comments](https://img.shields.io/badge/Comments-339-64748b?style=flat-square)
785
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-936-475569?style=flat-square)
794
+ ![Comments](https://img.shields.io/badge/Comments-336-64748b?style=flat-square)
795
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-939-475569?style=flat-square)
786
796
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
787
797
 
788
798
  ### Python
@@ -938,20 +948,20 @@ graph LR
938
948
  ### Markdown
939
949
 
940
950
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
941
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-449-1f6feb?style=flat-square)
951
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-459-1f6feb?style=flat-square)
942
952
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
943
- ![H2](https://img.shields.io/badge/H2-41-8b5cf6?style=flat-square)
944
- ![H3](https://img.shields.io/badge/H3-52-a78bfa?style=flat-square)
953
+ ![H2](https://img.shields.io/badge/H2-42-8b5cf6?style=flat-square)
954
+ ![H3](https://img.shields.io/badge/H3-54-a78bfa?style=flat-square)
945
955
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
946
956
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
947
957
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
948
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-85-64748b?style=flat-square)
949
- ![Lists](https://img.shields.io/badge/Lists-46-16a34a?style=flat-square)
950
- ![List Items](https://img.shields.io/badge/List_Items-65-22c55e?style=flat-square)
958
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-87-64748b?style=flat-square)
959
+ ![Lists](https://img.shields.io/badge/Lists-48-16a34a?style=flat-square)
960
+ ![List Items](https://img.shields.io/badge/List_Items-67-22c55e?style=flat-square)
951
961
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
952
962
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
953
963
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
954
- ![Links](https://img.shields.io/badge/Links-15-059669?style=flat-square)
964
+ ![Links](https://img.shields.io/badge/Links-17-059669?style=flat-square)
955
965
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
956
966
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
957
967
  ![Inline Code](https://img.shields.io/badge/Inline_Code-72-ef4444?style=flat-square)
@@ -1,3 +1,6 @@
1
+ import { GeneratorHook } from '@conformetry/core';
2
+ import { GeneratorHookContext } from '@conformetry/core';
3
+ import { GeneratorHooks } from '@conformetry/core';
1
4
  import { InventoriedInstance } from '@conformetry/core';
2
5
  import { InventoriedPairing } from '@conformetry/core';
3
6
  import { InventoriedTemplate } from '@conformetry/core';
@@ -88,6 +91,11 @@ export declare class ConfigurationService {
88
91
  * template nobody validates — so both default to empty rather than failing.
89
92
  */
90
93
  private applyGeneratorDefaults;
94
+ /**
95
+ * Drops the hooks a generator left unset, rather than carrying them as
96
+ * explicit `undefined`, so what a host forwards is exactly what was declared.
97
+ */
98
+ private applyHookDefaults;
91
99
  /**
92
100
  * Walks upward from the process cwd looking for the workspace manifest.
93
101
  *
@@ -183,6 +191,13 @@ export declare type ConformetryConfiguration = ConformetryGeneratorDefinition[];
183
191
  /** One generator, with the template it renders and the instances it governs. */
184
192
  export declare interface ConformetryGeneratorDefinition {
185
193
  description?: string;
194
+ /**
195
+ * Functions run around generation: `preGenerate` before anything is written,
196
+ * `postGenerate` after the template is rendered. Optional, and left off the
197
+ * loaded definition when a generator declares none, so a host forwards
198
+ * exactly what the configuration said.
199
+ */
200
+ hooks?: GeneratorHooks;
186
201
  /**
187
202
  * The values this generator substitutes, as JSON Schema fragments. Named for
188
203
  * what the implementation calls them everywhere else — a generator takes
@@ -290,6 +305,12 @@ export declare interface FindInstancesArguments {
290
305
  readonly workingDirectory: string;
291
306
  }
292
307
 
308
+ export { GeneratorHook }
309
+
310
+ export { GeneratorHookContext }
311
+
312
+ export { GeneratorHooks }
313
+
293
314
  /**
294
315
  * Thrown when a command line cannot be turned into a run.
295
316
  *
package/dist/src/index.js CHANGED
@@ -103,8 +103,12 @@ var ConfigurationPathRequiredError = class extends Error {
103
103
  e.null(),
104
104
  e.array(y),
105
105
  e.record(e.string(), y)
106
- ])), b = e.array(e.strictObject({
106
+ ])), generatorHookSchema = (t) => e.custom((e) => typeof e == "function", { message: `The ${t} hook must be a function` }), b = e.array(e.strictObject({
107
107
  description: e.string().optional(),
108
+ hooks: e.strictObject({
109
+ postGenerate: generatorHookSchema("postGenerate").optional(),
110
+ preGenerate: generatorHookSchema("preGenerate").optional()
111
+ }).optional(),
108
112
  inputs: e.record(e.string(), e.record(e.string(), y)).optional(),
109
113
  instances: e.array(e.object({
110
114
  exclude: e.array(e.string()).optional(),
@@ -901,6 +905,7 @@ var V = class ConfigurationService {
901
905
  applyGeneratorDefaults(e) {
902
906
  return {
903
907
  ...e.description === void 0 ? {} : { description: e.description },
908
+ ...e.hooks === void 0 ? {} : { hooks: this.applyHookDefaults(e.hooks) },
904
909
  inputs: e.inputs ?? {},
905
910
  instances: e.instances ?? [],
906
911
  name: e.name,
@@ -908,6 +913,12 @@ var V = class ConfigurationService {
908
913
  ...e.threshold === void 0 ? {} : { threshold: e.threshold }
909
914
  };
910
915
  }
916
+ applyHookDefaults(e) {
917
+ return {
918
+ ...e.postGenerate === void 0 ? {} : { postGenerate: e.postGenerate },
919
+ ...e.preGenerate === void 0 ? {} : { preGenerate: e.preGenerate }
920
+ };
921
+ }
911
922
  async findWorkspaceRoot() {
912
923
  let e = t.resolve(process.cwd());
913
924
  for (;;) try {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "url": "https://github.com/organizzolini/codebase/issues"
5
5
  },
6
6
  "dependencies": {
7
- "@conformetry/core": "0.0.37",
7
+ "@conformetry/core": "0.0.38",
8
8
  "@nestjs/common": "^11.1.21 || ^12.0.1",
9
9
  "jiti": "^2.7.0",
10
10
  "jsonc-parser": "^3.3.1",
@@ -67,5 +67,5 @@
67
67
  "strict": true
68
68
  },
69
69
  "types": "./dist/src/index.d.ts",
70
- "version": "0.0.38"
70
+ "version": "0.0.39"
71
71
  }