Repository: graphql-markdown/graphql-markdown
Pull request #1007 (2023-09-24 11:00:08)

✨ option onlyDocDirective
# Description

Implements #994 by adding a new option `onlyDocDirective` as counter part of `skipDocDirective`.

It only applies to types with a location compatible with the directive, ie if the `onlyDocDirective` cannot be apply to a type (eg. ENUM) then the type will be displayed.

Todo:
- [x] E2E tests do not render all required types.

# Checklist

- [x] My changes follow the [contributing guidelines](https://github.com/graphql-markdown/graphql-markdown/blob/main/CONTRIBUTING.md) of this project.
- [x] I have performed a self-review of my code.
- [x] I have made corresponding changes to the documentation.
- [x] I have added tests that prove my fix is effective or that my changes work.
- [x] New and existing unit tests pass locally with my changes.


codesee-maps[bot]: <details open>
<summary><b>👇 <a href="https://app.codesee.io/r/reviews?pr=1007&src=https%3A%2F%2Fgithub.com%2Fgraphql-markdown%2Fgraphql-markdown">Click on the image</a> for a new way to code review</b>
</summary>

####

[![Review these changes using an interactive CodeSee Map](https://s3.us-east-2.amazonaws.com/maps.codesee.io/images/github/graphql-markdown/graphql-markdown/1007/374521c4/ebb3713fb5c4bbc5779b7ac70f79427198197cda.svg)](https://app.codesee.io/r/reviews?pr=1007&src=https%3A%2F%2Fgithub.com%2Fgraphql-markdown%2Fgraphql-markdown)

#### Legend
<img src="https://app.codesee.io/Legend_v3.png" alt="CodeSee Map legend" width="220" height="156">
</details>
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [2 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.9%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.9%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.9% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


coveralls: 
[![Coverage Status](https://coveralls.io/builds/62857520/badge)](https://coveralls.io/builds/62857520)

coverage: 92.089% (-2.4%) from 94.484% when pulling **ebb3713fb5c4bbc5779b7ac70f79427198197cda on feat/994-onlydocdirective** into **30ba7bc54d91059cfe745f857de36b82bae08405 on main**.

sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.9%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.9%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.9% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [1 Code Smell](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.8%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.8%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.8% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.8%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.8%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.8% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.8%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.8%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.8% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [1 Code Smell](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


github-actions[bot]: 
<!--
  0 failure: 
  1 warning:  This PR modified ...
  
  
  DangerID: danger-id-Danger;
-->


<table>
  <thead>
    <tr>
      <th width="50"></th>
      <th width="100%" data-danger-table="true">Warnings</th>
    </tr>
  </thead>
  <tbody><tr>
      <td>:warning:</td>
      <td>

  This PR modified some Jest snapshot file/s:
 - packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
  </td>
    </tr>
  </tbody>
</table>



<p align="right">
  Generated by :no_entry_sign: <a href="https://danger.systems/js">dangerJS</a> against 0689086ab9279be34f9745de55e56189643f4a54
</p>

sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql-markdown&pullRequest=1007)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql-markdown&pullRequest=1007&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007) No Coverage information  
[![1.7%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '1.7%')](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list) [1.7% Duplication](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql-markdown&pullRequest=1007&metric=new_duplicated_lines_density&view=list)



Patch:
diff --git a/docs/settings.md b/docs/settings.md
index 6027c941..a98b6eba 100644
--- a/docs/settings.md
+++ b/docs/settings.md
@@ -29,9 +29,9 @@ The method to be used for identifying changes in the schema for triggering the d
 The possible values are:
 
 - `FORCE`: skip diff, always generate documentation, same as CLI flag `-f` or `--force`.
-- `NONE`: skip diff (same as `FORCE`)
-- `SCHEMA-DIFF`: use [GraphQL Inspector](https://graphql-inspector.com) for identifying changes in the schema (including description)
-- `SCHEMA-HASH`: use the schema SHA-256 hash for identifying changes in the schema (this method is sensitive to white spaces and invisible characters)
+- `NONE`: skip diff (same as `FORCE`).
+- `SCHEMA-DIFF`: use [GraphQL Inspector](https://graphql-inspector.com) for identifying changes in the schema (including description).
+- `SCHEMA-HASH`: use the schema SHA-256 hash for identifying changes in the schema (this method is sensitive to white spaces and invisible characters).
 
 | Setting      | CLI flag                  | Default |
 | ------------ | ------------------------- | ------- |
@@ -53,9 +53,9 @@ npm install @graphql-markdown/diff
 
 Use these options to tweak some of the Docusaurus documentation features:
 
-- `pagination`: page buttons `Previous` and `Next`
-- `toc`: page table of content
-- `index`: index page for categories/groups, see [Docusaurus documentation](https://docusaurus.io/docs/sidebar/items#generated-index-page)
+- `pagination`: page buttons `Previous` and `Next`.
+- `toc`: page table of content.
+- `index`: index page for categories/groups, see [Docusaurus documentation](https://docusaurus.io/docs/sidebar/items#generated-index-page).
 
 | Setting                 | CLI flag         | Default |
 | ----------------------- | ---------------- | ------- |
@@ -129,18 +129,36 @@ GraphQL schema loaders to use (see [schema loading](/docs/advanced/schema-loadin
 | --------- | --------------- | ------- |
 | `loaders` | _not supported_ | `{ }`   |
 
+## `onlyDocDirective`
+
+The schema directive/s used for selecting types to be rendered in the documentation.
+
+The CLI flag supports multiple values separated by a space character, eg `--only @stable @beta`.
+
+| Setting            | CLI flag                 | Default |
+| ------------------ | ------------------------ | ------- |
+| `onlyDocDirective` | `--only <@directive...>` | `[]`    |
+
+See also [`skipDocDirective`](#skipdocdirective).
+
+<br/>
+
+:::info
+It only applies to types with a location compatible with the directive, i.e. if the `onlyDocDirective` cannot be applied to a type (e.g. `ENUM`) then the type will be displayed.
+:::
+
 ## `printTypeOptions`
 
 Use these options to toggle type information rendered on pages:
 
-- `codeSection`: display type code section
-- `parentTypePrefix`: prefix field names with parent type name
-- `relatedTypeSection`: display related type sections
-- `typeBadges`: add field type attributes badges
-- `deprecated`: option for displaying deprecated entities (fields, values, operations)
-  - `default`: deprecated entities are displayed with other entities
-  - `group`: deprecated entities are grouped together
-  - `skip`: deprecated entities are not displayed (same as [`skipDocDirective`](#skipdocdirective))
+- `codeSection`: display type code section.
+- `parentTypePrefix`: prefix field names with parent type name.
+- `relatedTypeSection`: display related type sections.
+- `typeBadges`: add field type attributes badges.
+- `deprecated`: option for displaying deprecated entities (fields, values, operations).
+  - `default`: deprecated entities are displayed with other entities.
+  - `group`: deprecated entities are grouped together.
+  - `skip`: deprecated entities are not displayed (same as [`skipDocDirective`](#skipdocdirective)).
 
 | Setting                               | CLI flag                | Default   |
 | ------------------------------------- | ----------------------- | --------- |
@@ -234,8 +252,14 @@ The CLI flag supports multiple values separated by a space character, eg `--skip
 | ------------------ | ------------------------ | ------- |
 | `skipDocDirective` | `--skip <@directive...>` | `[]`    |
 
+See also [`onlyDocDirective`](#onlydocdirective).
+
 <br/>
 
+:::warn
+Declaring the same type in both `onlyDocDirective` and `skipDocDirective` will generate an error.
+:::
+
 :::info
 Types with `@deprecated` directive can also be skipped using the setting **[`printTypeOptions.deprecated: "skip"`](#printtypeoptions)** or the flag `--deprecated skip`.
 :::
diff --git a/package-lock.json b/package-lock.json
index 043c9d0c..8ced3d62 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1128,9 +1128,8 @@
     },
     "node_modules/@docusaurus/types/node_modules/commander": {
       "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
-      "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 6"
       }
@@ -6532,9 +6531,9 @@
       "dev": true
     },
     "node_modules/eslint/node_modules/globals": {
-      "version": "13.22.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
-      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+      "version": "13.21.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
+      "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts
index 3094aeed..2d2facb4 100644
--- a/packages/core/src/config.ts
+++ b/packages/core/src/config.ts
@@ -72,11 +72,10 @@ export const DEFAULT_OPTIONS: Required<
   schema: "./schema.graphql",
   tmpDir: join(tmpdir(), PACKAGE_NAME),
   skipDocDirective: [],
+  onlyDocDirective: [],
 } as const;
 
-export const getSkipDocDirective = (
-  name: Maybe<DirectiveName>,
-): DirectiveName => {
+export const getDocDirective = (name: Maybe<DirectiveName>): DirectiveName => {
   const OPTION_REGEX = /^@(?<directive>\w+)$/;
 
   if (typeof name !== "string" || !OPTION_REGEX.test(name)) {
@@ -92,6 +91,22 @@ export const getSkipDocDirective = (
   return directive;
 };
 
+export const getOnlyDocDirectives = (
+  cliOpts: Maybe<CliOptions>,
+  configFileOpts: Maybe<Pick<ConfigOptions, "onlyDocDirective">>,
+): DirectiveName[] => {
+  const directiveList: DirectiveName[] = [].concat(
+    (cliOpts?.only ?? []) as never[],
+    (configFileOpts?.onlyDocDirective ?? []) as never[],
+  );
+
+  const onlyDirectives = directiveList.map((directiveName) => {
+    return getDocDirective(directiveName);
+  });
+
+  return onlyDirectives;
+};
+
 export const getSkipDocDirectives = (
   cliOpts: Maybe<CliOptions>,
   configFileOpts: Maybe<
@@ -103,8 +118,8 @@ export const getSkipDocDirectives = (
     (configFileOpts?.skipDocDirective ?? []) as never[],
   );
 
-  const skipDirectives = directiveList.map((option) => {
-    return getSkipDocDirective(option);
+  const skipDirectives = directiveList.map((directiveName) => {
+    return getDocDirective(directiveName);
   });
 
   if (
@@ -119,6 +134,31 @@ export const getSkipDocDirectives = (
   return skipDirectives;
 };
 
+export const getVisibilityDirectives = (
+  cliOpts: Maybe<CliOptions>,
+  configFileOpts: Maybe<
+    Pick<
+      ConfigOptions,
+      "onlyDocDirective" | "printTypeOptions" | "skipDocDirective"
+    >
+  >,
+): { onlyDocDirective: DirectiveName[]; skipDocDirective: DirectiveName[] } => {
+  const skipDocDirective = getSkipDocDirectives(cliOpts, configFileOpts);
+  const onlyDocDirective = getOnlyDocDirectives(cliOpts, configFileOpts);
+
+  if (
+    onlyDocDirective.some((directiveName) => {
+      return skipDocDirective.includes(directiveName);
+    })
+  ) {
+    throw new Error(
+      "The same directive cannot be declared in 'onlyDocDirective' and 'skipDocDirective'.",
+    );
+  }
+
+  return { onlyDocDirective, skipDocDirective };
+};
+
 export const getCustomDirectives = (
   customDirectiveOptions: Maybe<CustomDirective>,
   skipDocDirective?: Maybe<DirectiveName[]>,
@@ -250,7 +290,10 @@ export const buildConfig = async (
   } as const;
 
   const baseURL: string = cliOpts.base ?? config.baseURL;
-  const skipDocDirective = getSkipDocDirectives(cliOpts, config);
+  const { onlyDocDirective, skipDocDirective } = getVisibilityDirectives(
+    cliOpts,
+    config,
+  );
 
   return {
     baseURL,
@@ -267,6 +310,7 @@ export const buildConfig = async (
     id: id ?? DEFAULT_OPTIONS.id,
     linkRoot: cliOpts.link ?? config.linkRoot ?? DEFAULT_OPTIONS.linkRoot,
     loaders: config.loaders,
+    onlyDocDirective,
     outputDir: join(cliOpts.root ?? config.rootPath, baseURL),
     prettify: cliOpts.pretty ?? config.pretty ?? DEFAULT_OPTIONS.pretty,
     printer: (config.printer ?? DEFAULT_OPTIONS.printer)!,
diff --git a/packages/core/src/generator.ts b/packages/core/src/generator.ts
index b36a9a55..a75904ac 100644
--- a/packages/core/src/generator.ts
+++ b/packages/core/src/generator.ts
@@ -1,6 +1,9 @@
 import type {
   DiffMethodName,
+  DirectiveName,
   GeneratorOptions,
+  GraphQLDirective,
+  Maybe,
   SchemaEntity,
 } from "@graphql-markdown/types";
 
@@ -32,6 +35,7 @@ export const generateDocFromSchema = async ({
   linkRoot,
   loaders: loadersList,
   loggerModule,
+  onlyDocDirective,
   outputDir,
   prettify,
   printer: printerModule,
@@ -67,6 +71,19 @@ export const generateDocFromSchema = async ({
     }
   }
 
+  const [onlyDocDirectives, skipDocDirectives] = [
+    onlyDocDirective,
+    skipDocDirective,
+  ].map((directiveList: DirectiveName[]) => {
+    return directiveList
+      .map((name: string) => {
+        return schema.getDirective(name);
+      })
+      .filter((directive: Maybe<GraphQLDirective>) => {
+        return typeof directive !== "undefined";
+      }) as GraphQLDirective[];
+  });
+
   const rootTypes = getSchemaMap(schema);
   const customDirectives = getCustomDirectives(rootTypes, customDirective);
   const groups = getGroups(rootTypes, groupByDirective);
@@ -85,8 +102,9 @@ export const generateDocFromSchema = async ({
     {
       customDirectives,
       groups,
+      onlyDocDirectives,
       printTypeOptions,
-      skipDocDirective,
+      skipDocDirectives,
     },
   );
   const renderer = new Renderer(printer, outputDir, baseURL, groups, prettify, {
diff --git a/packages/docusaurus/src/index.ts b/packages/docusaurus/src/index.ts
index 8a333648..c0228541 100644
--- a/packages/docusaurus/src/index.ts
+++ b/packages/docusaurus/src/index.ts
@@ -67,7 +67,11 @@ export default function pluginGraphQLDocGenerator(
           "-gbd, --groupByDirective <@directive(field|=fallback)>",
           "Group documentation by directive",
         )
-        .option("--skip <@directive...>", "Skip type with matching directive")
+        .option(
+          "--only <@directive...>",
+          "Only print types with matching directive",
+        )
+        .option("--skip <@directive...>", "Skip types with matching directive")
         .option(
           "--deprecated <option>",
           "Option for printing deprecated entities: `default`, `group` or `skip`",
diff --git a/packages/graphql/docs/directive.md b/packages/graphql/docs/directive.md
index b47d18f2..51d7cc46 100644
--- a/packages/graphql/docs/directive.md
+++ b/packages/graphql/docs/directive.md
@@ -8,17 +8,17 @@ Library supporting `customDirective` for directive based customization.
 
 ## Variables
 
-### WILDCARD_DIRECTIVE
+### WILDCARD\_DIRECTIVE
 
 ```ts
-const WILDCARD_DIRECTIVE: "";
+const WILDCARD_DIRECTIVE: ""
 ```
 
 Wildcard `*` character for matching any directive name.
 
 See [getCustomDirectiveOptions](directive.md#getcustomdirectiveoptions), [isCustomDirective](directive.md#iscustomdirective)
 
-#### Defined In
+#### Source
 
 [packages/graphql/src/directive.ts:28](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L28)
 
@@ -34,9 +34,9 @@ Returns a map of custom directives for a schema entity.
 
 #### Parameters
 
-| Parameter            | Type                              | Description                                                                           |
-| :------------------- | :-------------------------------- | :------------------------------------------------------------------------------------ |
-| `entity`             | `unknown`                         | a GraphQL schema entity.                                                              |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `entity` | `unknown` | a GraphQL schema entity. |
 | `customDirectiveMap` | `Maybe`\< `CustomDirectiveMap` \> | a custom directive map (see [getCustomDirectives](directive.md#getcustomdirectives)). |
 
 #### Returns
@@ -45,6 +45,10 @@ Returns a map of custom directives for a schema entity.
 
 a map of GraphQL directives matching the custom directives defined, else `undefined`.
 
+#### Source
+
+[packages/graphql/src/directive.ts:247](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L247)
+
 #### Example
 
 ```js
@@ -94,11 +98,7 @@ const map = getConstDirectiveMap(schema.getType("Test"), customDirectives);
 
 ```
 
-#### Defined In
-
-[packages/graphql/src/directive.ts:247](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L247)
-
----
+***
 
 ### getCustomDirectiveOptions
 
@@ -110,9 +110,9 @@ Returns a record set of custom handlers from a directive by name.
 
 #### Parameters
 
-| Parameter                | Type              | Description                   |
-| :----------------------- | :---------------- | :---------------------------- |
-| `schemaDirectiveName`    | `DirectiveName`   | the GraphQL directive name.   |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schemaDirectiveName` | `DirectiveName` | the GraphQL directive name. |
 | `customDirectiveOptions` | `CustomDirective` | the `customDirective` option. |
 
 #### Returns
@@ -121,6 +121,10 @@ Returns a record set of custom handlers from a directive by name.
 
 a record set of custom handlers for the matching directive (or if `*` is declared), or undefined if no match.
 
+#### Source
+
+[packages/graphql/src/directive.ts:76](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L76)
+
 #### Example
 
 ```js
@@ -140,11 +144,7 @@ const customDirectives = getCustomDirectiveOptions("testB", customDirectiveOptio
 // }
 ```
 
-#### Defined In
-
-[packages/graphql/src/directive.ts:157](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L157)
-
----
+***
 
 ### getCustomDirectives
 
@@ -156,10 +156,10 @@ Returns a custom directives map with custom handlers from `customDirective`.
 
 #### Parameters
 
-| Parameter                 | Type                                    | Description                                                                      |
-| :------------------------ | :-------------------------------------- | :------------------------------------------------------------------------------- |
-| `schemaMap`               | `Pick`\< `SchemaMap`, `"directives"` \> | the GraphQL schema map returned by [getSchemaMap](introspection.md#getschemamap) |
-| `customDirectiveOptions`? | `CustomDirective`                       | the `customDirective` option.                                                    |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schemaMap` | `Pick`\< `SchemaMap`, `"directives"` \> | the GraphQL schema map returned by [introspection!getSchemaMap](introspection.md#getschemamap) |
+| `customDirectiveOptions`? | `CustomDirective` | the `customDirective` option. |
 
 #### Returns
 
@@ -167,6 +167,10 @@ Returns a custom directives map with custom handlers from `customDirective`.
 
 a custom directive map, or undefined if no match.
 
+#### Source
+
+[packages/graphql/src/directive.ts:150](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L150)
+
 #### Example
 
 ```js
@@ -218,11 +222,7 @@ const customDirectives = getCustomDirectives(schemaMap, customDirectiveOptions);
 // }
 ```
 
-#### Defined In
-
-[packages/graphql/src/directive.ts:89](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L89)
-
----
+***
 
 ### isCustomDirective
 
@@ -234,9 +234,9 @@ Checks if a directive name is referenced in `customDirective` option.
 
 #### Parameters
 
-| Parameter                | Type              | Description                   |
-| :----------------------- | :---------------- | :---------------------------- |
-| `schemaDirectiveName`    | `DirectiveName`   | the GraphQL directive name.   |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schemaDirectiveName` | `DirectiveName` | the GraphQL directive name. |
 | `customDirectiveOptions` | `CustomDirective` | the `customDirective` option. |
 
 #### Returns
@@ -245,6 +245,6 @@ Checks if a directive name is referenced in `customDirective` option.
 
 `true` if the directive is declared or `*` is declared in `customDirective` option, else `false`.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/directive.ts:181](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L181)
+[packages/graphql/src/directive.ts:39](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/directive.ts#L39)
diff --git a/packages/graphql/docs/formatter.md b/packages/graphql/docs/formatter.md
index c5a7f27d..3ca192ee 100644
--- a/packages/graphql/docs/formatter.md
+++ b/packages/graphql/docs/formatter.md
@@ -7,7 +7,7 @@ Internal library of helpers for formatting GraphQL values.
 ### getFormattedDefaultValue
 
 ```ts
-getFormattedDefaultValue<T>(entity): Maybe< T | string >
+getFormattedDefaultValue<T>(entity): Maybe< string | T >
 ```
 
 Returns a printable formatted value for a GraphQL type.
@@ -16,23 +16,23 @@ This is the generic function.
 #### Type parameters
 
 | Parameter |
-| :-------- |
-| `T`       |
+| :------ |
+| `T` |
 
 #### Parameters
 
-| Parameter             | Type                       | Description                                      |
-| :-------------------- | :------------------------- | :----------------------------------------------- |
-| `entity`              | `object`                   | the GraphQL schema entity processed.             |
-| `entity.defaultValue` | `T`                        | the GraphQL schema type's value to be formatted. |
-| `entity.type`         | `Maybe`\< `GraphQLType` \> | the GraphQL schema type.                         |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `entity` | `object` | the GraphQL schema entity processed. |
+| `entity.defaultValue` | `T` | the GraphQL schema type's value to be formatted. |
+| `entity.type` | `Maybe`\< `GraphQLType` \> | the GraphQL schema type. |
 
 #### Returns
 
-`Maybe`\< `T` \| `string` \>
+`Maybe`\< `string` \| `T` \>
 
 a printable formatted value.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/formatter.ts:32](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/formatter.ts#L32)
+[packages/graphql/src/formatter.ts:95](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/formatter.ts#L95)
diff --git a/packages/graphql/docs/group.md b/packages/graphql/docs/group.md
index 91e8a613..fb7d20df 100644
--- a/packages/graphql/docs/group.md
+++ b/packages/graphql/docs/group.md
@@ -11,16 +11,22 @@ Library supporting `groupByDirective` for grouping GraphQL schema entities.
 ### getGroupName
 
 ```ts
-getGroupName(type, groupByDirective): Maybe< string >
+getGroupName<T>(type, groupByDirective): Maybe< string >
 ```
 
 Gets the group name for a schema type based on the directive information.
 
+#### Type parameters
+
+| Parameter |
+| :------ |
+| `T` |
+
 #### Parameters
 
-| Parameter          | Type                                   | Description                    |
-| :----------------- | :------------------------------------- | :----------------------------- |
-| `type`             | `unknown`                              | a GraphQL schema named type    |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `T` | a GraphQL schema named type |
 | `groupByDirective` | `Maybe`\< `GroupByDirectiveOptions` \> | the `groupByDirective` option. |
 
 #### Returns
@@ -29,6 +35,10 @@ Gets the group name for a schema type based on the directive information.
 
 the group name matching the type, or `groupByDirective.fallback` if no match found.
 
+#### Source
+
+[packages/graphql/src/group.ts:72](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/group.ts#L72)
+
 #### Example
 
 ```js
@@ -60,40 +70,41 @@ const groupOptions = {
   fallback: "common",
   directive: "doc",
   field: "category",
-};
+}
 
 getGroupName(schema.getType("Bird"), groupOptions); // Expected result: "animal"
 
 getGroupName(schema.getType("Unicorn"), groupOptions); // Expected result: "common"
-```
-
-#### Defined In
 
-[packages/graphql/src/group.ts:158](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/group.ts#L158)
+```
 
----
+***
 
 ### getGroups
 
 ```ts
-getGroups(schemaMap, groupByDirective): Maybe< SchemaEntitiesGroupMap >
+getGroups(schemaMap, groupByDirective): Maybe< Partial< Record< SchemaEntity, Record< string, Maybe< string > > > > >
 ```
 
 Parses a GraphQL schema to build a map of entities with matching `groupByDirective` option.
 
 #### Parameters
 
-| Parameter          | Type                                   | Description                                                                      |
-| :----------------- | :------------------------------------- | :------------------------------------------------------------------------------- |
-| `schemaMap`        | `SchemaMap`                            | the GraphQL schema map returned by [getSchemaMap](introspection.md#getschemamap) |
-| `groupByDirective` | `Maybe`\< `GroupByDirectiveOptions` \> | the `groupByDirective` option.                                                   |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schemaMap` | `SchemaMap` | the GraphQL schema map returned by [introspection!getSchemaMap](introspection.md#getschemamap) |
+| `groupByDirective` | `Maybe`\< `GroupByDirectiveOptions` \> | the `groupByDirective` option. |
 
 #### Returns
 
-`Maybe`\< `SchemaEntitiesGroupMap` \>
+`Maybe`\< `Partial`\< `Record`\< `SchemaEntity`, `Record`\< `string`, `Maybe`\< `string` \> \> \> \> \>
 
 a map of entities with matching group name.
 
+#### Source
+
+[packages/graphql/src/group.ts:173](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/group.ts#L173)
+
 #### Example
 
 ```js
@@ -130,7 +141,7 @@ const groupOptions = {
   fallback: "common",
   directive: "doc",
   field: "category",
-};
+}
 
 const groupsMap = getGroups(schemaMap, groupOptions);
 
@@ -149,7 +160,3 @@ const groupsMap = getGroups(schemaMap, groupOptions);
 //   },
 // }
 ```
-
-#### Defined In
-
-[packages/graphql/src/group.ts:84](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/group.ts#L84)
diff --git a/packages/graphql/docs/guard.md b/packages/graphql/docs/guard.md
index 9d7aacff..cc33c355 100644
--- a/packages/graphql/docs/guard.md
+++ b/packages/graphql/docs/guard.md
@@ -14,26 +14,26 @@ Checks if a GraphQL named type is of generic type `T`.
 
 #### Type parameters
 
-| Parameter | Description                                              |
-| :-------- | :------------------------------------------------------- |
-| `T`       | a GraphQL type to check against, eg `GraphQLObjectType`. |
+| Parameter | Description |
+| :------ | :------ |
+| `T` | a GraphQL type to check against, eg `GraphQLObjectType`. |
 
 #### Parameters
 
-| Parameter | Type      | Description                                   |
-| :-------- | :-------- | :-------------------------------------------- |
-| `obj`     | `unknown` | a GraphQL named type from the GraphQL schema. |
-| `type`    | () => `T` | the GraphQL type `T`.                         |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `unknown` | a GraphQL named type from the GraphQL schema. |
+| `type` | () => `T` | the GraphQL type `T`. |
 
 #### Returns
 
 `obj is T`
 
-#### Defined In
+#### Source
 
 [packages/graphql/src/guard.ts:52](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/guard.ts#L52)
 
----
+***
 
 ### isDeprecated
 
@@ -45,25 +45,25 @@ Checks if a GraphQL named type is deprecated.
 
 #### Type parameters
 
-| Parameter | Description                                              |
-| :-------- | :------------------------------------------------------- |
-| `T`       | a GraphQL type to check against, eg `GraphQLObjectType`. |
+| Parameter | Description |
+| :------ | :------ |
+| `T` | a GraphQL type to check against, eg `GraphQLObjectType`. |
 
 #### Parameters
 
-| Parameter | Type | Description         |
-| :-------- | :--- | :------------------ |
-| `obj`     | `T`  | an instance of `T`. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `T` | an instance of `T`. |
 
 #### Returns
 
 `obj is DeprecatedType<T>`
 
-#### Defined In
+#### Source
 
 [packages/graphql/src/guard.ts:70](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/guard.ts#L70)
 
----
+***
 
 ### isGraphQLFieldType
 
@@ -75,19 +75,19 @@ Checks if a GraphQL named type is of type `GraphQLField`.
 
 #### Parameters
 
-| Parameter | Type      | Description     |
-| :-------- | :-------- | :-------------- |
-| `type`    | `unknown` | a GraphQL type. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | a GraphQL type. |
 
 #### Returns
 
 `type is GraphQLField<unknown, unknown, unknown>`
 
-#### Defined In
+#### Source
 
 [packages/graphql/src/guard.ts:33](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/guard.ts#L33)
 
----
+***
 
 ### isOperation
 
@@ -99,14 +99,14 @@ Checks if a GraphQL type a GraphQL operation (query, mutation, subscription).
 
 #### Parameters
 
-| Parameter | Type      | Description     |
-| :-------- | :-------- | :-------------- |
-| `type`    | `unknown` | a GraphQL type. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | a GraphQL type. |
 
 #### Returns
 
 `type is GraphQLOperationType`
 
-#### Defined In
+#### Source
 
 [packages/graphql/src/guard.ts:85](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/guard.ts#L85)
diff --git a/packages/graphql/docs/introspection.md b/packages/graphql/docs/introspection.md
index c54e533d..11011cf0 100644
--- a/packages/graphql/docs/introspection.md
+++ b/packages/graphql/docs/introspection.md
@@ -5,10 +5,10 @@ The entry point method is [getSchemaMap](introspection.md#getschemamap).
 
 ## Functions
 
-### \_\_getFields
+### \_getFields
 
 ```ts
-__getFields<T, V>(
+_getFields<T, V>(
   type,
   processor?,
   fallback?): GraphQLFieldMap< unknown, unknown > | GraphQLInputFieldMap | V
@@ -21,17 +21,17 @@ see [getOperation](introspection.md#getoperation), [getFields](introspection.md#
 #### Type parameters
 
 | Parameter |
-| :-------- |
-| `T`       |
-| `V`       |
+| :------ |
+| `T` |
+| `V` |
 
 #### Parameters
 
-| Parameter    | Type                | Description                                         |
-| :----------- | :------------------ | :-------------------------------------------------- |
-| `type`       | `T`                 | the GraphQL schema type to parse.                   |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `T` | the GraphQL schema type to parse. |
 | `processor`? | (`fieldMap`) => `V` | optional callback function to parse the fields map. |
-| `fallback`?  | `V`                 | optional fallback value, `undefined` if not set.    |
+| `fallback`? | `V` | optional fallback value, `undefined` if not set. |
 
 #### Returns
 
@@ -39,11 +39,11 @@ see [getOperation](introspection.md#getoperation), [getFields](introspection.md#
 
 a map of fields as k/v records, or `fallback` value if no fields available.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:241](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L241)
+[packages/graphql/src/introspection.ts:313](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L313)
 
----
+***
 
 ### getDirective
 
@@ -55,10 +55,10 @@ Returns a schema entity's list of directives matching a defined set.
 
 #### Parameters
 
-| Parameter    | Type                                | Description                                    |
-| :----------- | :---------------------------------- | :--------------------------------------------- |
-| `entity`     | `unknown`                           | a GraphQL schema entity.                       |
-| `directives` | `Maybe`\< `string` \| `string`[] \> | a directive name or a list of directive names. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `entity` | `unknown` | a GraphQL schema entity. |
+| `directives` | `Maybe`\< `GraphQLDirective`[] \> | a directive name or a list of directive names. |
 
 #### Returns
 
@@ -66,11 +66,33 @@ Returns a schema entity's list of directives matching a defined set.
 
 a list of GraphQL directives matching the set, else `false`.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:143](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L143)
+[packages/graphql/src/introspection.ts:222](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L222)
 
----
+***
+
+### getDirectiveLocationForASTPath
+
+```ts
+getDirectiveLocationForASTPath(appliedTo): DirectiveLocation
+```
+
+#### Parameters
+
+| Parameter | Type |
+| :------ | :------ |
+| `appliedTo` | `Maybe`\< `ASTNode` \> |
+
+#### Returns
+
+`DirectiveLocation`
+
+#### Source
+
+[packages/graphql/src/introspection.ts:111](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L111)
+
+***
 
 ### getFields
 
@@ -84,9 +106,9 @@ see [getSchemaMap](introspection.md#getschemamap)
 
 #### Parameters
 
-| Parameter | Type      | Description                       |
-| :-------- | :-------- | :-------------------------------- |
-| `type`    | `unknown` | the GraphQL schema type to parse. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type to parse. |
 
 #### Returns
 
@@ -94,11 +116,11 @@ see [getSchemaMap](introspection.md#getschemamap)
 
 a list of fields of type object.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:306](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L306)
+[packages/graphql/src/introspection.ts:378](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L378)
 
----
+***
 
 ### getOperation
 
@@ -112,8 +134,8 @@ see [getSchemaMap](introspection.md#getschemamap)
 
 #### Parameters
 
-| Parameter        | Type      | Description                  |
-| :--------------- | :-------- | :--------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `operationType`? | `unknown` | the operation type to parse. |
 
 #### Returns
@@ -122,11 +144,11 @@ see [getSchemaMap](introspection.md#getschemamap)
 
 a map of fields as k/v records.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:282](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L282)
+[packages/graphql/src/introspection.ts:354](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L354)
 
----
+***
 
 ### getSchemaMap
 
@@ -139,9 +161,9 @@ This is the entry point for GraphQL-Markdown schema parsing features.
 
 #### Parameters
 
-| Parameter | Type                         | Description       |
-| :-------- | :--------------------------- | :---------------- |
-| `schema`  | `Maybe`\< `GraphQLSchema` \> | a GraphQL schema. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schema` | `Maybe`\< `GraphQLSchema` \> | a GraphQL schema. |
 
 #### Returns
 
@@ -149,6 +171,10 @@ This is the entry point for GraphQL-Markdown schema parsing features.
 
 a schema map by GraphQL entities (see SchemaEntity).
 
+#### Source
+
+[packages/graphql/src/introspection.ts:488](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L488)
+
 #### Example
 
 ```js
@@ -209,11 +235,7 @@ const schemaTypeMap = getSchemaMap(schema);
 // }
 ```
 
-#### Defined In
-
-[packages/graphql/src/introspection.ts:411](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L411)
-
----
+***
 
 ### getTypeDirectiveArgValue
 
@@ -229,11 +251,11 @@ It calls [getTypeDirectiveValues](introspection.md#gettypedirectivevalues) and r
 
 #### Parameters
 
-| Parameter   | Type               | Description                                                         |
-| :---------- | :----------------- | :------------------------------------------------------------------ |
-| `directive` | `GraphQLDirective` | a GraphQL directive defined in the schema.                          |
-| `node`      | `unknown`          | -                                                                   |
-| `argName`   | `string`           | the name of the GraphQL directive argument to fetch the value from. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `directive` | `GraphQLDirective` | a GraphQL directive defined in the schema. |
+| `node` | `unknown` | - |
+| `argName` | `string` | the name of the GraphQL directive argument to fetch the value from. |
 
 #### Returns
 
@@ -241,11 +263,11 @@ It calls [getTypeDirectiveValues](introspection.md#gettypedirectivevalues) and r
 
 a record k/v with `argName` as key and the argument's value.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:184](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L184)
+[packages/graphql/src/introspection.ts:285](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L285)
 
----
+***
 
 ### getTypeDirectiveValues
 
@@ -257,10 +279,10 @@ Returns all directive's arguments' values linked to a GraphQL schema type.
 
 #### Parameters
 
-| Parameter   | Type               | Description                                |
-| :---------- | :----------------- | :----------------------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `directive` | `GraphQLDirective` | a GraphQL directive defined in the schema. |
-| `type`      | `unknown`          | the GraphQL schema type to parse.          |
+| `type` | `unknown` | the GraphQL schema type to parse. |
 
 #### Returns
 
@@ -268,11 +290,11 @@ Returns all directive's arguments' values linked to a GraphQL schema type.
 
 a record k/v with arguments' name as keys and arguments' value.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:207](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L207)
+[packages/graphql/src/introspection.ts:254](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L254)
 
----
+***
 
 ### getTypeFromSchema
 
@@ -286,15 +308,15 @@ When parsing the entities, internal GraphQL entities (starting with `__`) are ex
 #### Type parameters
 
 | Parameter |
-| :-------- |
-| `T`       |
+| :------ |
+| `T` |
 
 #### Parameters
 
-| Parameter | Type                         | Description                             |
-| :-------- | :--------------------------- | :-------------------------------------- |
-| `schema`  | `Maybe`\< `GraphQLSchema` \> | a GraphQL schema.                       |
-| `type`    | `unknown`                    | a GraphQL type, eg `GraphQLObjectType`. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schema` | `Maybe`\< `GraphQLSchema` \> | a GraphQL schema. |
+| `type` | `unknown` | a GraphQL type, eg `GraphQLObjectType`. |
 
 #### Returns
 
@@ -302,15 +324,15 @@ When parsing the entities, internal GraphQL entities (starting with `__`) are ex
 
 a map of GraphQL named types for the matching GraphQL type, or undefined if no match.
 
-#### See
+#### Source
 
-[getSchemaMap](introspection.md#getschemamap)
+[packages/graphql/src/introspection.ts:59](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L59)
 
-#### Defined In
+#### See
 
-[packages/graphql/src/introspection.ts:58](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L58)
+[getSchemaMap](introspection.md#getschemamap)
 
----
+***
 
 ### getTypeName
 
@@ -322,10 +344,10 @@ Resolves the name of a GraphQL schema type.
 
 #### Parameters
 
-| Parameter     | Type      | Default value | Description                                           |
-| :------------ | :-------- | :------------ | :---------------------------------------------------- |
-| `type`        | `unknown` | `undefined`   | -                                                     |
-| `defaultName` | `string`  | `""`          | optional fallback value if the name resolution fails. |
+| Parameter | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `unknown` | `undefined` | - |
+| `defaultName` | `string` | `""` | optional fallback value if the name resolution fails. |
 
 #### Returns
 
@@ -333,11 +355,11 @@ Resolves the name of a GraphQL schema type.
 
 the type's name, or `defaultName`.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:327](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L327)
+[packages/graphql/src/introspection.ts:401](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L401)
 
----
+***
 
 ### hasAstNode
 
@@ -350,14 +372,14 @@ Type guard for type with an AST node property.
 #### Type parameters
 
 | Parameter |
-| :-------- |
-| `T`       |
+| :------ |
+| `T` |
 
 #### Parameters
 
-| Parameter | Type | Description                  |
-| :-------- | :--- | :--------------------------- |
-| `node`    | `T`  | a GraphQL schema named type. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `node` | `T` | a GraphQL schema named type. |
 
 #### Returns
 
@@ -365,26 +387,30 @@ Type guard for type with an AST node property.
 
 `true` if the entity has an AST node property, else `false`.
 
-#### Defined In
+#### Source
 
-[packages/graphql/src/introspection.ts:100](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L100)
+[packages/graphql/src/introspection.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L107)
 
----
+***
 
 ### hasDirective
 
 ```ts
-hasDirective(entity, directives): boolean
+hasDirective(
+  entity,
+  directives,
+  fallback = false): boolean
 ```
 
 Checks if a schema entity as a directive belonging to a defined set.
 
 #### Parameters
 
-| Parameter    | Type                                | Description                                    |
-| :----------- | :---------------------------------- | :--------------------------------------------- |
-| `entity`     | `unknown`                           | a GraphQL schema entity.                       |
-| `directives` | `Maybe`\< `string` \| `string`[] \> | a directive name or a list of directive names. |
+| Parameter | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `entity` | `unknown` | `undefined` | a GraphQL schema entity. |
+| `directives` | `Maybe`\< `GraphQLDirective`[] \> | `undefined` | a directive name or a list of directive names. |
+| `fallback` | `boolean` | `false` | default value if the entity type is not a valid location for directives. |
 
 #### Returns
 
@@ -392,6 +418,33 @@ Checks if a schema entity as a directive belonging to a defined set.
 
 `true` if the entity has at least one directive matching, else `false`.
 
-#### Defined In
+#### Source
+
+[packages/graphql/src/introspection.ts:184](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L184)
+
+***
+
+### isValidDirectiveLocation
+
+```ts
+isValidDirectiveLocation(entity, directive): boolean
+```
+
+Check if a directive can be applied to specific schema entity location.
+
+#### Parameters
+
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `entity` | `unknown` | a GraphQL schema entity. |
+| `directive` | `GraphQLDirective` | a directive name. |
+
+#### Returns
+
+`boolean`
+
+`true` if the entity is a valid directive location, else `false`.
+
+#### Source
 
-[packages/graphql/src/introspection.ts:113](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L113)
+[packages/graphql/src/introspection.ts:163](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/introspection.ts#L163)
diff --git a/packages/graphql/docs/loader.md b/packages/graphql/docs/loader.md
index e461416f..286756ae 100644
--- a/packages/graphql/docs/loader.md
+++ b/packages/graphql/docs/loader.md
@@ -15,8 +15,8 @@ Import each loader package, and instantiate a loader object.
 
 #### Parameters
 
-| Parameter     | Type                        | Description                                       |
-| :------------ | :-------------------------- | :------------------------------------------------ |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `loadersList` | `Maybe`\< `LoaderOption` \> | the list of loaders defined in the plugin config. |
 
 #### Returns
@@ -25,6 +25,10 @@ Import each loader package, and instantiate a loader object.
 
 a list of loader objects.
 
+#### Source
+
+[packages/graphql/src/loader.ts:106](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/loader.ts#L106)
+
 #### Throws
 
 an `Error` if no loader has been loaded, or if an error occurred while importing loaders.
@@ -32,10 +36,7 @@ an `Error` if no loader has been loaded, or if an error occurred while importing
 #### Example
 
 ```js
-import {
-  getDocumentLoaders,
-  loadSchema,
-} from "@graphql-markdown/utils/graphql";
+import { getDocumentLoaders, loadSchema } from "@graphql-markdown/utils/graphql"
 
 const loaderList = {
   GraphQLFileLoader: "@graphql-tools/graphql-file-loader",
@@ -49,11 +50,7 @@ const schema = await loadSchema("schema.graphql", {
 });
 ```
 
-#### Defined In
-
-[packages/graphql/src/loader.ts:106](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/loader.ts#L106)
-
----
+***
 
 ### loadSchema
 
@@ -67,10 +64,10 @@ If `rootTypes` is set in the options, then the schema root types will be overrid
 
 #### Parameters
 
-| Parameter        | Type                                                                                                                                                                                                         | Description                                              |
-| :--------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------- |
-| `schemaLocation` | `string`                                                                                                                                                                                                     | the schema location pointer matching the loader.         |
-| `options`        | `BuildSchemaOptions` & `GraphQLParseOptions` & \{} & \{} & \{} & `Partial`\< `IExecutableSchemaDefinition`\< `any` \> \> & \{} & \{`rootTypes`: `Partial`\< `Record`\< `OperationTypeNode`, `string` \> \>;} | the schema `loaders`, and optional `rootTypes` override. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `schemaLocation` | `string` | the schema location pointer matching the loader. |
+| `options` | `BuildSchemaOptions` & `GraphQLParseOptions` & \{} & \{} & \{} & `Partial`\< `IExecutableSchemaDefinition`\< `any` \> \> & \{} & \{<br />  `rootTypes`: `Partial`\< `Record`\< `OperationTypeNode`, `string` \> \>;<br /> } | the schema `loaders`, and optional `rootTypes` override. |
 
 #### Returns
 
@@ -78,17 +75,17 @@ If `rootTypes` is set in the options, then the schema root types will be overrid
 
 a GraphQL schema.
 
+#### Source
+
+[packages/graphql/src/loader.ts:41](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/loader.ts#L41)
+
 #### Example
 
 ```js
-import { loadSchema } from "@graphql-markdown/utils/graphql";
+import { loadSchema } from "@graphql-markdown/utils/graphql"
 
 const schema = await loadSchema("schema.graphql", {
   loaders: [new GraphQLFileLoader()],
   rootTypes: { query: "Root", subscription: "" },
 });
 ```
-
-#### Defined In
-
-[packages/graphql/src/loader.ts:41](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/graphql/src/loader.ts#L41)
diff --git a/packages/graphql/docs/relation.md b/packages/graphql/docs/relation.md
index c84cabc2..c7e6bd00 100644
--- a/packages/graphql/docs/relation.md
+++ b/packages/graphql/docs/relation.md
@@ -18,10 +18,10 @@ Returns a map of fields and arguments where the GraphQL schema type matches the
 
 #### Parameters
 
-| Parameter   | Type                     | Description                                                               |
-| :---------- | :----------------------- | :------------------------------------------------------------------------ |
-| `type`      | `unknown`                | the GraphQL schema type being processed.                                  |
-| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [getSchemaMap](introspection.md#getschemamap)). |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type being processed. |
+| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [introspection!getSchemaMap](introspection.md#getschemamap)). |
 
 #### Returns
 
@@ -29,15 +29,15 @@ Returns a map of fields and arguments where the GraphQL schema type matches the
 
 a record map of fields and arguments relations.
 
-#### See
+#### Source
 
-mapRelationOf
+[packages/types/src/graphql.d.ts:78](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/graphql.d.ts#L78)
 
-#### Defined In
+#### See
 
-[packages/types/src/utils.d.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/utils.d.ts#L107)
+mapRelationOf
 
----
+***
 
 ### getRelationOfImplementation
 
@@ -49,10 +49,10 @@ Returns a map of types (unions or interfaces) where the GraphQL schema type is i
 
 #### Parameters
 
-| Parameter   | Type                     | Description                                                               |
-| :---------- | :----------------------- | :------------------------------------------------------------------------ |
-| `type`      | `unknown`                | the GraphQL schema type being processed.                                  |
-| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [getSchemaMap](introspection.md#getschemamap)). |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type being processed. |
+| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [introspection!getSchemaMap](introspection.md#getschemamap)). |
 
 #### Returns
 
@@ -60,15 +60,15 @@ Returns a map of types (unions or interfaces) where the GraphQL schema type is i
 
 a record map of unions or interfaces relations.
 
-#### See
+#### Source
 
-mapRelationOf
+[packages/types/src/graphql.d.ts:78](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/graphql.d.ts#L78)
 
-#### Defined In
+#### See
 
-[packages/types/src/utils.d.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/utils.d.ts#L107)
+mapRelationOf
 
----
+***
 
 ### getRelationOfInterface
 
@@ -80,10 +80,10 @@ Returns a map of interfaces where the GraphQL schema type is extended.
 
 #### Parameters
 
-| Parameter   | Type                     | Description                                                               |
-| :---------- | :----------------------- | :------------------------------------------------------------------------ |
-| `type`      | `unknown`                | the GraphQL schema type being processed.                                  |
-| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [getSchemaMap](introspection.md#getschemamap)). |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type being processed. |
+| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [introspection!getSchemaMap](introspection.md#getschemamap)). |
 
 #### Returns
 
@@ -91,15 +91,15 @@ Returns a map of interfaces where the GraphQL schema type is extended.
 
 a record map of interfaces relations.
 
-#### See
+#### Source
 
-mapRelationOf
+[packages/types/src/graphql.d.ts:78](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/graphql.d.ts#L78)
 
-#### Defined In
+#### See
 
-[packages/types/src/utils.d.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/utils.d.ts#L107)
+mapRelationOf
 
----
+***
 
 ### getRelationOfReturn
 
@@ -111,10 +111,10 @@ Returns a map of operations (queries, mutations, subscriptions) where the GraphQ
 
 #### Parameters
 
-| Parameter   | Type                     | Description                                                               |
-| :---------- | :----------------------- | :------------------------------------------------------------------------ |
-| `type`      | `unknown`                | the GraphQL schema type being processed.                                  |
-| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [getSchemaMap](introspection.md#getschemamap)). |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type being processed. |
+| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [introspection!getSchemaMap](introspection.md#getschemamap)). |
 
 #### Returns
 
@@ -122,15 +122,15 @@ Returns a map of operations (queries, mutations, subscriptions) where the GraphQ
 
 a record map of operations relations.
 
-#### See
+#### Source
 
-mapRelationOf
+[packages/types/src/graphql.d.ts:78](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/graphql.d.ts#L78)
 
-#### Defined In
+#### See
 
-[packages/types/src/utils.d.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/utils.d.ts#L107)
+mapRelationOf
 
----
+***
 
 ### getRelationOfUnion
 
@@ -142,10 +142,10 @@ Returns a map of unions where the GraphQL schema type is part of it.
 
 #### Parameters
 
-| Parameter   | Type                     | Description                                                               |
-| :---------- | :----------------------- | :------------------------------------------------------------------------ |
-| `type`      | `unknown`                | the GraphQL schema type being processed.                                  |
-| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [getSchemaMap](introspection.md#getschemamap)). |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `unknown` | the GraphQL schema type being processed. |
+| `schemaMap` | `Maybe`\< `SchemaMap` \> | a GraphQL schema map (see [introspection!getSchemaMap](introspection.md#getschemamap)). |
 
 #### Returns
 
@@ -153,10 +153,10 @@ Returns a map of unions where the GraphQL schema type is part of it.
 
 a record map of unions relations.
 
-#### See
+#### Source
 
-mapRelationOf
+[packages/types/src/graphql.d.ts:78](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/graphql.d.ts#L78)
 
-#### Defined In
+#### See
 
-[packages/types/src/utils.d.ts:107](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/types/src/utils.d.ts#L107)
+mapRelationOf
diff --git a/packages/graphql/src/directive.ts b/packages/graphql/src/directive.ts
index 809f03c7..dfde532d 100644
--- a/packages/graphql/src/directive.ts
+++ b/packages/graphql/src/directive.ts
@@ -252,7 +252,13 @@ export const getConstDirectiveMap = (
     return undefined;
   }
 
-  const constDirectives = getDirective(entity, Object.keys(customDirectiveMap));
+  const directiveList = Object.values(customDirectiveMap).map(
+    (directiveMapItem) => {
+      return directiveMapItem.type;
+    },
+  );
+
+  const constDirectives = getDirective(entity, directiveList);
   if (constDirectives.length === 0) {
     return undefined;
   }
diff --git a/packages/graphql/src/introspection.ts b/packages/graphql/src/introspection.ts
index a18dbd61..f401d78a 100644
--- a/packages/graphql/src/introspection.ts
+++ b/packages/graphql/src/introspection.ts
@@ -9,10 +9,11 @@ import type {
   GraphQLSchema,
   GraphQLInputFieldMap,
   GraphQLFieldMap,
+  GraphQLDirective,
 } from "graphql";
 import {
+  DirectiveLocation,
   getDirectiveValues,
-  GraphQLDirective,
   GraphQLEnumType,
   GraphQLInputObjectType,
   GraphQLInterfaceType,
@@ -20,13 +21,13 @@ import {
   GraphQLScalarType,
   GraphQLUnionType,
   isNamedType,
+  Kind,
   OperationTypeNode,
 } from "graphql";
 
 import type {
   ASTNode,
   AstNodeType,
-  DirectiveDefinitionNode,
   DirectiveNode,
   GraphQLNamedType,
   GraphQLOperationType,
@@ -107,32 +108,104 @@ export const hasAstNode = <T>(node: T): node is AstNodeType<T> => {
   return typeof (node as Record<string, unknown>)["astNode"] === "object";
 };
 
+export const getDirectiveLocationForASTPath = (
+  appliedTo: Maybe<ASTNode>,
+): DirectiveLocation => {
+  if (!appliedTo || !("kind" in appliedTo)) {
+    throw new Error("Unexpected kind: " + String(appliedTo));
+  }
+
+  switch (appliedTo.kind) {
+    case Kind.FIELD:
+      return DirectiveLocation.FIELD;
+    case Kind.SCHEMA_DEFINITION:
+    case Kind.SCHEMA_EXTENSION:
+      return DirectiveLocation.SCHEMA;
+    case Kind.SCALAR_TYPE_DEFINITION:
+    case Kind.SCALAR_TYPE_EXTENSION:
+      return DirectiveLocation.SCALAR;
+    case Kind.OBJECT_TYPE_DEFINITION:
+    case Kind.OBJECT_TYPE_EXTENSION:
+      return DirectiveLocation.OBJECT;
+    case Kind.FIELD_DEFINITION:
+      return DirectiveLocation.FIELD_DEFINITION;
+    case Kind.INTERFACE_TYPE_DEFINITION:
+    case Kind.INTERFACE_TYPE_EXTENSION:
+      return DirectiveLocation.INTERFACE;
+    case Kind.UNION_TYPE_DEFINITION:
+    case Kind.UNION_TYPE_EXTENSION:
+      return DirectiveLocation.UNION;
+    case Kind.ENUM_TYPE_DEFINITION:
+    case Kind.ENUM_TYPE_EXTENSION:
+      return DirectiveLocation.ENUM;
+    case Kind.ENUM_VALUE_DEFINITION:
+      return DirectiveLocation.ENUM_VALUE;
+    case Kind.INPUT_OBJECT_TYPE_DEFINITION:
+    case Kind.INPUT_OBJECT_TYPE_EXTENSION:
+      return DirectiveLocation.INPUT_OBJECT;
+    case Kind.INPUT_VALUE_DEFINITION:
+    case Kind.ARGUMENT:
+      return DirectiveLocation.ARGUMENT_DEFINITION;
+    // Not reachable, all possible types have been considered.
+    default:
+      throw new Error("Unexpected kind: " + String(appliedTo.kind));
+  }
+};
+
+/** Check if a directive can be applied to specific schema entity location.
+ *
+ * @param entity - a GraphQL schema entity.
+ * @param directive - a directive name.
+ *
+ * @returns `true` if the entity is a valid directive location, else `false`.
+ *
+ */
+export const isValidDirectiveLocation = (
+  entity: unknown,
+  directive: GraphQLDirective,
+): boolean => {
+  if (!hasAstNode(entity)) {
+    return false;
+  }
+  const location = getDirectiveLocationForASTPath(entity.astNode);
+  return directive.locations.includes(location);
+};
+
 /**
  * Checks if a schema entity as a directive belonging to a defined set.
  *
  * @param entity - a GraphQL schema entity.
  * @param directives - a directive name or a list of directive names.
+ * @param fallback - default value if the entity type is not a valid location for directives.
  *
  * @returns `true` if the entity has at least one directive matching, else `false`.
  *
  */
 export const hasDirective = (
   entity: unknown,
-  directives: Maybe<string[] | string>,
+  directives: Maybe<GraphQLDirective[]>,
+  fallback: boolean = false,
 ): boolean => {
   if (
     !hasAstNode(entity) ||
     !directives ||
-    !Array.isArray(entity.astNode.directives)
+    !Array.isArray(entity.astNode.directives) ||
+    directives.length < 1
   ) {
-    return false;
+    return fallback;
   }
-
-  const directiveList = Array.isArray(directives) ? directives : [directives]; // backward_compatibility
-
   return (
-    entity.astNode.directives.findIndex((directiveNode: DirectiveNode) => {
-      return directiveList.includes(directiveNode.name.value);
+    directives.findIndex((directive) => {
+      // if the directive location is not applicable to entity then skip it
+      if (!isValidDirectiveLocation(entity, directive)) {
+        return fallback;
+      }
+      return (
+        entity.astNode.directives &&
+        entity.astNode.directives.findIndex((directiveNode: DirectiveNode) => {
+          return directive.name === directiveNode.name.value;
+        }) > -1
+      );
     }) > -1
   );
 };
@@ -148,7 +221,7 @@ export const hasDirective = (
  */
 export const getDirective = (
   entity: unknown,
-  directives: Maybe<string[] | string>,
+  directives: Maybe<GraphQLDirective[]>,
 ): GraphQLDirective[] => {
   if (
     !hasAstNode(entity) ||
@@ -158,21 +231,15 @@ export const getDirective = (
     return [];
   }
 
-  const directiveList = Array.isArray(directives) ? directives : [directives]; // backward_compatibility
-
-  return entity.astNode.directives
-    .filter((directiveNode: DirectiveDefinitionNode): boolean => {
-      return directiveList.includes(directiveNode.name.value);
-    })
-    .map((directiveNode: DirectiveDefinitionNode): GraphQLDirective => {
-      return new GraphQLDirective({
-        name: directiveNode.name.value,
-        description: directiveNode.description?.value,
-        locations: [],
-        extensions: undefined,
-        astNode: directiveNode,
-      });
-    }) as GraphQLDirective[];
+  return directives.filter((directive): boolean => {
+    return (
+      (entity.astNode.directives &&
+        entity.astNode.directives.findIndex((directiveNode) => {
+          return directiveNode.name.value === directive.name;
+        }) > -1) ??
+      false
+    );
+  });
 };
 
 /**
diff --git a/packages/helpers/docs/directives_descriptor.md b/packages/helpers/docs/directives_descriptor.md
index e8a7973d..e4a8e295 100644
--- a/packages/helpers/docs/directives_descriptor.md
+++ b/packages/helpers/docs/directives_descriptor.md
@@ -22,11 +22,11 @@ This is an example on how to build a custom `descriptor` callback.
 
 #### Parameters
 
-| Parameter              | Type               | Description                                                                                                                                                                            |
-| :--------------------- | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `directive`            | `GraphQLDirective` | the schema directive to parse.                                                                                                                                                         |
-| `type`?                | `unknown`          | the schema type to be processed for generating a custom description.                                                                                                                   |
-| `descriptionTemplate`? | `string`           | optional template literal-like string for rendering the description (see [interpolate](utils_interpolate.md#interpolate)), if not present then the directive description will be used. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `directive` | `GraphQLDirective` | the schema directive to parse. |
+| `type`? | `unknown` | the schema type to be processed for generating a custom description. |
+| `descriptionTemplate`? | `string` | optional template literal-like string for rendering the description (see [interpolate](utils_interpolate.md#interpolate)), if not present then the directive description will be used. |
 
 #### Returns
 
@@ -34,6 +34,10 @@ This is an example on how to build a custom `descriptor` callback.
 
 a custom description based on directive value.
 
+#### Source
+
+[directives/descriptor.ts:83](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/directives/descriptor.ts#L83)
+
 #### Example
 
 ```js
@@ -51,58 +55,43 @@ const directive = new GraphQLDirective({
   },
 });
 
-const type =
-  new GraphQLScalarType() <
-  string >
-  {
-    name: "FooBar",
-    astNode: {
-      kind: Kind.SCALAR_TYPE_DEFINITION,
-      name: { kind: Kind.NAME, value: "FooBar" },
-      directives: [
-        {
-          kind: Kind.DIRECTIVE,
-          name: { kind: Kind.NAME, value: "version" },
-          arguments: [
-            {
-              kind: Kind.ARGUMENT,
-              name: { kind: Kind.NAME, value: "major" },
-              value: { kind: Kind.INT, value: "2" },
-            },
-            {
-              kind: Kind.ARGUMENT,
-              name: { kind: Kind.NAME, value: "minor" },
-              value: { kind: Kind.INT, value: "1" },
-            },
-            {
-              kind: Kind.ARGUMENT,
-              name: { kind: Kind.NAME, value: "patch" },
-              value: { kind: Kind.INT, value: "3" },
-            },
-          ],
-        },
-      ],
-    },
-  };
+const type = new GraphQLScalarType<string>({
+  name: "FooBar",
+  astNode: {
+    kind: Kind.SCALAR_TYPE_DEFINITION,
+    name: { kind: Kind.NAME, value: "FooBar" },
+    directives: [
+      {
+        kind: Kind.DIRECTIVE,
+        name: { kind: Kind.NAME, value: "version" },
+        arguments: [
+          {
+            kind: Kind.ARGUMENT,
+            name: { kind: Kind.NAME, value: "major" },
+            value: { kind: Kind.INT, value: "2" },
+          },
+          {
+            kind: Kind.ARGUMENT,
+            name: { kind: Kind.NAME, value: "minor" },
+            value: { kind: Kind.INT, value: "1" },
+          },
+          {
+            kind: Kind.ARGUMENT,
+            name: { kind: Kind.NAME, value: "patch" },
+            value: { kind: Kind.INT, value: "3" },
+          },
+        ],
+      },
+    ],
+  },
+});
 
-directiveDescriptor(
-  directive,
-  type,
-  "${description} is ${major}.${minor}.${patch}",
-);
+directiveDescriptor(directive, type, "${description} is ${major}.${minor}.${patch}");
 // Expected result: "Min version is 2.1.3"
 
 directiveDescriptor(directive, type);
 // Expected result: "Min version"
 
-directiveDescriptor(
-  directive,
-  type,
-  "Version should be at least ^${major}.${minor}.${patch}",
-);
+directiveDescriptor(directive, type, "Version should be at least ^${major}.${minor}.${patch}");
 // Expected result: "Version should be at least ^2.1.3"
 ```
-
-#### Defined In
-
-[directives/descriptor.ts:83](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/directives/descriptor.ts#L83)
diff --git a/packages/helpers/docs/directives_tag.md b/packages/helpers/docs/directives_tag.md
index 8fdcc5a0..a3c896d9 100644
--- a/packages/helpers/docs/directives_tag.md
+++ b/packages/helpers/docs/directives_tag.md
@@ -22,11 +22,11 @@ This is an example on how to build a custom `tag` callback.
 
 #### Parameters
 
-| Parameter    | Type               | Default value        | Description                                              |
-| :----------- | :----------------- | :------------------- | :------------------------------------------------------- |
-| `directive`  | `GraphQLDirective` | `undefined`          | the schema directive to parse.                           |
-| `type`?      | `unknown`          | `undefined`          | the type being processed.                                |
-| `classname`? | `string`           | `"badge--secondary"` | optional CSS classname, `"badge--secondary"` by default. |
+| Parameter | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `directive` | `GraphQLDirective` | `undefined` | the schema directive to parse. |
+| `type`? | `unknown` | `undefined` | the type being processed. |
+| `classname`? | `string` | `"badge--secondary"` | optional CSS classname, `"badge--secondary"` by default. |
 
 #### Returns
 
@@ -34,6 +34,10 @@ This is an example on how to build a custom `tag` callback.
 
 a custom description based on directive value.
 
+#### Source
+
+[directives/tag.ts:51](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/directives/tag.ts#L51)
+
 #### Example
 
 ```js
@@ -46,27 +50,20 @@ const directive = new GraphQLDirective({
   locations: [],
 });
 
-const type =
-  new GraphQLScalarType() <
-  string >
-  {
-    name: "FooBar",
-    astNode: {
-      kind: Kind.SCALAR_TYPE_DEFINITION,
-      name: { kind: Kind.NAME, value: "FooBar" },
-      directives: [
-        {
-          kind: Kind.DIRECTIVE,
-          name: { kind: Kind.NAME, value: "auth" },
-        },
-      ],
-    },
-  };
+const type = new GraphQLScalarType<string>({
+  name: "FooBar",
+  astNode: {
+    kind: Kind.SCALAR_TYPE_DEFINITION,
+    name: { kind: Kind.NAME, value: "FooBar" },
+    directives: [
+      {
+        kind: Kind.DIRECTIVE,
+        name: { kind: Kind.NAME, value: "auth" },
+      },
+    ],
+  },
+});
 
 directiveTag(directive, type);
 // Expected result: { text: "@auth", classname: "badge--secondary" }
 ```
-
-#### Defined In
-
-[directives/tag.ts:51](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/directives/tag.ts#L51)
diff --git a/packages/helpers/docs/utils_interpolate.md b/packages/helpers/docs/utils_interpolate.md
index 596a5a29..3da2afc5 100644
--- a/packages/helpers/docs/utils_interpolate.md
+++ b/packages/helpers/docs/utils_interpolate.md
@@ -17,11 +17,11 @@ Returns the value of the specified property or nested property of an object usin
 
 #### Parameters
 
-| Parameter  | Type                  | Default value | Description                                                            |
-| :--------- | :-------------------- | :------------ | :--------------------------------------------------------------------- |
-| `path`     | `Maybe`\< `string` \> | `undefined`   | property path as string.                                               |
-| `obj`      | `unknown`             | `undefined`   | the key/value record object.                                           |
-| `fallback` | `unknown`             | `""`          | optional fallback value to be returned if the path cannot be resolved. |
+| Parameter | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `path` | `Maybe`\< `string` \> | `undefined` | property path as string. |
+| `obj` | `unknown` | `undefined` | the key/value record object. |
+| `fallback` | `unknown` | `""` | optional fallback value to be returned if the path cannot be resolved. |
 
 #### Returns
 
@@ -29,21 +29,21 @@ Returns the value of the specified property or nested property of an object usin
 
 the property value if the path is resolved, else returns the `fallback` value.
 
+#### Source
+
+[utils/interpolate.ts:31](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/utils/interpolate.ts#L31)
+
 #### Example
 
 ```js
-import { getObjPath } from "@graphql-markdown/utils/object";
+import { getObjPath } from '@graphql-markdown/utils/object';
 
 getObjPath("foo.bar", { foo: { bar: 42 } }); // Returns 42
 
 getObjPath("foo.bak", { foo: { bar: 42 } }, "fallback"); // Returns "fallback"
 ```
 
-#### Defined In
-
-[utils/interpolate.ts:31](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/utils/interpolate.ts#L31)
-
----
+***
 
 ### interpolate
 
@@ -58,11 +58,11 @@ Interpolate a template literal-like string.
 
 #### Parameters
 
-| Parameter   | Type                                                                         | Description                                                                                      |
-| :---------- | :--------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
-| `template`  | `string`                                                                     | a string template literal-like.                                                                  |
-| `variables` | `Maybe`\< `Record`\< `string`, `unknown` \> & \{`description`: `string`;} \> | a record map of values with variable's name as key and `description` as directive's description. |
-| `fallback`? | `string`                                                                     | optional fallback value if a variable cannot be substituted.                                     |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `template` | `string` | a string template literal-like. |
+| `variables` | `Maybe`\< `Record`\< `string`, `unknown` \> & \{<br />  `description`: `string`;<br /> } \> | a record map of values with variable's name as key and `description` as directive's description. |
+| `fallback`? | `string` | optional fallback value if a variable cannot be substituted. |
 
 #### Returns
 
@@ -70,6 +70,10 @@ Interpolate a template literal-like string.
 
 an interpolated new string from the template.
 
+#### Source
+
+[utils/interpolate.ts:64](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/utils/interpolate.ts#L64)
+
 #### Example
 
 ```js
@@ -78,7 +82,3 @@ const template = "${foo} is not ${bar.notfound}";
 
 interpolate(template, values, "fallback"); // Expected result: "42 is not fallback",
 ```
-
-#### Defined In
-
-[utils/interpolate.ts:64](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/helpers/src/utils/interpolate.ts#L64)
diff --git a/packages/logger/docs/logger.md b/packages/logger/docs/logger.md
index 5503bfc8..1dc19c5f 100644
--- a/packages/logger/docs/logger.md
+++ b/packages/logger/docs/logger.md
@@ -16,67 +16,57 @@ Log levels.
 debug: "debug"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:20](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L20)
 
-***
-
 ##### error
 
 ```ts
 error: "error"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:21](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L21)
 
-***
-
 ##### info
 
 ```ts
 info: "info"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:22](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L22)
 
-***
-
 ##### log
 
 ```ts
 log: "log"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:23](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L23)
 
-***
-
 ##### success
 
 ```ts
 success: "success"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:24](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L24)
 
-***
-
 ##### warn
 
 ```ts
 warn: "warn"
 ```
 
-###### Defined In
+###### Source
 
 [index.ts:25](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L25)
 
@@ -101,6 +91,10 @@ By default, the logger module uses `global.console`
 
 `void`
 
+#### Source
+
+[index.ts:45](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L45)
+
 #### Example
 
 ```js
@@ -112,10 +106,6 @@ Logger("@docusaurus/logger");
 log("Info message", "info"); // Expected Docusaurus log output "Info message"
 ```
 
-#### Defined In
-
-[index.ts:73](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L73)
-
 ***
 
 ### log
@@ -137,6 +127,10 @@ Logs a message by calling the active logger instance.
 
 `void`
 
+#### Source
+
+[index.ts:85](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L85)
+
 #### Remarks
 
 If a log level is not supported by the logger instance, then it defaults to `"info"`.
@@ -148,7 +142,3 @@ import { log } from "@graphql-markdown/utils/logger";
 
 log("Info message"); // Expected console output "Info message"
 ```
-
-#### Defined In
-
-[index.ts:45](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/logger/src/index.ts#L45)
diff --git a/packages/printer-legacy/src/code.ts b/packages/printer-legacy/src/code.ts
index 099b5fdd..b95e6579 100644
--- a/packages/printer-legacy/src/code.ts
+++ b/packages/printer-legacy/src/code.ts
@@ -4,7 +4,6 @@ import {
   getFormattedDefaultValue,
   getTypeName,
   isDeprecated,
-  hasDirective,
 } from "@graphql-markdown/graphql";
 
 import {
@@ -12,6 +11,7 @@ import {
   DEPRECATED,
   MARKDOWN_CODE_INDENTATION,
 } from "./const/strings";
+import { hasPrintableDirective } from "./common";
 
 export const printCodeArguments = (
   type: unknown,
@@ -56,19 +56,7 @@ export const printCodeField = (
     return "";
   }
 
-  const skipDirective =
-    (options &&
-      "skipDocDirective" in options &&
-      hasDirective(type, options.skipDocDirective)) ??
-    false;
-  const skipDeprecated =
-    (options &&
-      "deprecated" in options &&
-      options.deprecated === "skip" &&
-      isDeprecated(type)) ??
-    false;
-
-  if (skipDirective || skipDeprecated) {
+  if (!hasPrintableDirective(type, options)) {
     return "";
   }
 
diff --git a/packages/printer-legacy/src/common.ts b/packages/printer-legacy/src/common.ts
index 2d6c9524..a47e8ecc 100644
--- a/packages/printer-legacy/src/common.ts
+++ b/packages/printer-legacy/src/common.ts
@@ -6,7 +6,11 @@ import type {
 
 import { isEmpty, escapeMDX } from "@graphql-markdown/utils";
 
-import { isDeprecated, getConstDirectiveMap } from "@graphql-markdown/graphql";
+import {
+  isDeprecated,
+  getConstDirectiveMap,
+  hasDirective,
+} from "@graphql-markdown/graphql";
 
 import { getCustomDirectiveResolver } from "./directive";
 
@@ -85,3 +89,36 @@ export const printDescription = (
   const deprecation = printDeprecation(type);
   return `${deprecation}${description}${customDirectives}`;
 };
+
+export const hasPrintableDirective = (
+  type: unknown,
+  options?: Pick<
+    PrintTypeOptions,
+    "deprecated" | "onlyDocDirectives" | "skipDocDirectives"
+  >,
+): boolean => {
+  if (!type) {
+    return false;
+  }
+
+  if (!options) {
+    return true;
+  }
+
+  const skipDirective =
+    "skipDocDirectives" in options && options.skipDocDirectives
+      ? hasDirective(type, options.skipDocDirectives)
+      : false;
+
+  const skipDeprecated =
+    "deprecated" in options &&
+    options.deprecated === "skip" &&
+    isDeprecated(type);
+
+  const onlyDirective =
+    "onlyDocDirectives" in options && options.onlyDocDirectives
+      ? hasDirective(type, options.onlyDocDirectives, true)
+      : true;
+
+  return !(skipDirective || skipDeprecated) && onlyDirective;
+};
diff --git a/packages/printer-legacy/src/const/options.ts b/packages/printer-legacy/src/const/options.ts
index e202c5d7..7f5c7d99 100644
--- a/packages/printer-legacy/src/const/options.ts
+++ b/packages/printer-legacy/src/const/options.ts
@@ -1,6 +1,6 @@
 import type {
   CollapsibleOption,
-  DirectiveName,
+  GraphQLDirective,
   GraphQLSchema,
   Maybe,
   PrintTypeHeaderOptions,
@@ -32,17 +32,19 @@ export const DEFAULT_OPTIONS: Required<
     | "collapsible"
     | "groups"
     | "level"
+    | "onlyDocDirectives"
     | "parentType"
     | "schema"
-    | "skipDocDirective"
+    | "skipDocDirectives"
   >
 > & {
-  schema: Maybe<GraphQLSchema>;
-  skipDocDirective: Maybe<DirectiveName[]>;
   collapsible: Maybe<CollapsibleOption>;
-  parentType: Maybe<string>;
   groups: Maybe<SchemaEntitiesGroupMap>;
   level: Maybe<SectionLevelValue>;
+  onlyDocDirectives: GraphQLDirective[];
+  parentType: Maybe<string>;
+  schema: Maybe<GraphQLSchema>;
+  skipDocDirectives: GraphQLDirective[];
 } = {
   ...PRINT_TYPE_DEFAULT_OPTIONS,
   basePath: "/",
@@ -51,8 +53,9 @@ export const DEFAULT_OPTIONS: Required<
   groups: undefined,
   header: { toc: true, pagination: true } as Required<PrintTypeHeaderOptions>,
   level: undefined,
+  onlyDocDirectives: [],
   parentType: undefined,
   schema: undefined,
-  skipDocDirective: undefined,
+  skipDocDirectives: [],
   withAttributes: false,
 };
diff --git a/packages/printer-legacy/src/directive.ts b/packages/printer-legacy/src/directive.ts
index 77a415d7..606e8ee3 100644
--- a/packages/printer-legacy/src/directive.ts
+++ b/packages/printer-legacy/src/directive.ts
@@ -28,7 +28,10 @@ export const getCustomDirectiveResolver = (
     return fallback;
   }
 
-  return constDirectiveOption[resolver]!(constDirectiveOption.type, type);
+  return constDirectiveOption[resolver]!(
+    constDirectiveOption.type,
+    type,
+  ) as Maybe<string>;
 };
 
 export const printCustomDirective = (
diff --git a/packages/printer-legacy/src/graphql/enum.ts b/packages/printer-legacy/src/graphql/enum.ts
index dbd71e4b..bef7d0fc 100644
--- a/packages/printer-legacy/src/graphql/enum.ts
+++ b/packages/printer-legacy/src/graphql/enum.ts
@@ -8,11 +8,11 @@ import {
   isEnumType,
   getTypeName,
   isDeprecated,
-  hasDirective,
 } from "@graphql-markdown/graphql";
 
 import { MARKDOWN_EOL, DEPRECATED } from "../const/strings";
 import { printMetadataSection } from "../section";
+import { hasPrintableDirective } from "../common";
 
 export const printEnumMetadata = (
   type: unknown,
@@ -27,7 +27,7 @@ export const printEnumMetadata = (
 
 export const printCodeEnum = (
   type: unknown,
-  options: PrintTypeOptions,
+  options?: PrintTypeOptions,
 ): string => {
   if (!isEnumType(type)) {
     return "";
@@ -36,22 +36,17 @@ export const printCodeEnum = (
   let code = `enum ${getTypeName(type)} {${MARKDOWN_EOL}`;
   code += (type as GraphQLEnumType)
     .getValues()
-    .map((value) => {
-      const skipDirective =
-        "skipDocDirective" in options &&
-        hasDirective(value, options.skipDocDirective);
-      const skipDeprecated =
-        "deprecated" in options &&
-        options.deprecated === "skip" &&
-        isDeprecated(value);
-      if (skipDirective || skipDeprecated) {
+    .map((value): string => {
+      if (!hasPrintableDirective(value, options)) {
         return "";
       }
       const v = getTypeName(value);
       const d = isDeprecated(value) ? ` @${DEPRECATED}` : "";
       return `  ${v}${d}`;
     })
-    .filter((value) => value.length > 0)
+    .filter((value): boolean => {
+      return value.length > 0;
+    })
     .join(MARKDOWN_EOL);
   code += `${MARKDOWN_EOL}}`;
 
diff --git a/packages/printer-legacy/src/link.ts b/packages/printer-legacy/src/link.ts
index 6e9acaa7..60975652 100644
--- a/packages/printer-legacy/src/link.ts
+++ b/packages/printer-legacy/src/link.ts
@@ -12,7 +12,6 @@ import type {
 import {
   getNamedType,
   getTypeName,
-  hasDirective,
   isDeprecated,
   isDirectiveType,
   isEnumType,
@@ -31,6 +30,7 @@ import { slugify, pathUrl } from "@graphql-markdown/utils";
 
 import { getGroup } from "./group";
 import { DEPRECATED, ROOT_TYPE_LOCALE } from "./const/strings";
+import { hasPrintableDirective } from "./common";
 
 export const getLinkCategory = (type: unknown): Maybe<TypeLocale> => {
   switch (true) {
@@ -82,10 +82,8 @@ export const toLink = (
     return fallback;
   }
 
-  if (typeof options !== "undefined" && "skipDocDirective" in options) {
-    if (hasDirective(type, options.skipDocDirective)) {
-      return fallback;
-    }
+  if (typeof options !== "undefined" && !hasPrintableDirective(type, options)) {
+    return fallback;
   }
 
   const graphQLNamedType = getNamedType(type as Maybe<GraphQLType>);
diff --git a/packages/printer-legacy/src/printer.ts b/packages/printer-legacy/src/printer.ts
index b6e1f45d..4cda3116 100644
--- a/packages/printer-legacy/src/printer.ts
+++ b/packages/printer-legacy/src/printer.ts
@@ -1,6 +1,5 @@
 import type {
   CustomDirectiveMap,
-  DirectiveName,
   GraphQLDirective,
   GraphQLEnumType,
   GraphQLField,
@@ -22,7 +21,6 @@ import type {
 
 import {
   getTypeName,
-  hasDirective,
   isDirectiveType,
   isEnumType,
   isInputType,
@@ -32,11 +30,10 @@ import {
   isScalarType,
   isUnionType,
 } from "@graphql-markdown/graphql";
-
 import { pathUrl } from "@graphql-markdown/utils";
 
 import { printRelations } from "./relation";
-import { printDescription } from "./common";
+import { hasPrintableDirective, printDescription } from "./common";
 import { printCustomDirectives, printCustomTags } from "./directive";
 import {
   printCodeDirective,
@@ -65,8 +62,8 @@ import {
   MARKDOWN_SOC,
 } from "./const/strings";
 import { mdx } from "./const/mdx";
-
 import { DEFAULT_OPTIONS, PRINT_TYPE_DEFAULT_OPTIONS } from "./const/options";
+
 export class Printer implements IPrinter {
   static options: Maybe<PrintTypeOptions>;
 
@@ -83,19 +80,22 @@ export class Printer implements IPrinter {
     {
       customDirectives,
       groups,
+      onlyDocDirectives,
       printTypeOptions,
-      skipDocDirective,
+      skipDocDirectives,
     }: {
       customDirectives?: CustomDirectiveMap;
       deprecated?: TypeDeprecatedOption;
       groups?: SchemaEntitiesGroupMap;
+      onlyDocDirectives?: GraphQLDirective[];
       printTypeOptions?: PrinterConfigPrintTypeOptions;
-      skipDocDirective?: DirectiveName[];
+      skipDocDirectives?: GraphQLDirective[];
     } = {
       customDirectives: undefined,
       groups: undefined,
+      onlyDocDirectives: [],
       printTypeOptions: PRINT_TYPE_DEFAULT_OPTIONS,
-      skipDocDirective: undefined,
+      skipDocDirectives: [],
     },
   ): void {
     if (typeof Printer.options !== "undefined") {
@@ -118,7 +118,8 @@ export class Printer implements IPrinter {
         printTypeOptions?.relatedTypeSection ??
         PRINT_TYPE_DEFAULT_OPTIONS.relatedTypeSection,
       schema,
-      skipDocDirective: skipDocDirective ?? undefined,
+      onlyDocDirectives: onlyDocDirectives ?? [],
+      skipDocDirectives: skipDocDirectives ?? [],
       typeBadges:
         printTypeOptions?.typeBadges ?? PRINT_TYPE_DEFAULT_OPTIONS.typeBadges,
     };
@@ -209,7 +210,7 @@ export class Printer implements IPrinter {
         return printDirectiveMetadata(type as GraphQLDirective, options);
       case isOperation(type):
         return printOperationMetadata(
-          type as GraphQLField<unknown, unknown, unknown>,
+          type as unknown as GraphQLField<unknown, unknown, unknown>,
           options,
         );
       default:
@@ -238,11 +239,7 @@ export class Printer implements IPrinter {
       ...options,
     };
 
-    if (
-      !type ||
-      !name ||
-      hasDirective(type, printTypeOptions.skipDocDirective)
-    ) {
+    if (!name || !hasPrintableDirective(type, printTypeOptions)) {
       return undefined;
     }
 
diff --git a/packages/printer-legacy/src/section.ts b/packages/printer-legacy/src/section.ts
index 501d0801..5613841f 100644
--- a/packages/printer-legacy/src/section.ts
+++ b/packages/printer-legacy/src/section.ts
@@ -6,13 +6,9 @@ import type {
   SectionLevelValue,
 } from "@graphql-markdown/types";
 
-import {
-  isGraphQLFieldType,
-  hasDirective,
-  isDeprecated,
-} from "@graphql-markdown/graphql";
+import { isGraphQLFieldType, isDeprecated } from "@graphql-markdown/graphql";
 
-import { printDescription } from "./common";
+import { hasPrintableDirective, printDescription } from "./common";
 import { printBadges } from "./badge";
 import { printLink, printParentLink } from "./link";
 import { printCustomTags } from "./directive";
@@ -40,10 +36,7 @@ export const printSectionItem = <T>(
       ? options.level
       : SectionLevels.LEVEL_4;
 
-  const skipDirective = hasDirective(type, options.skipDocDirective);
-  const skipDeprecated = options.deprecated === "skip" && isDeprecated(type);
-
-  if (!type || skipDirective || skipDeprecated) {
+  if (!hasPrintableDirective(type, options)) {
     return "";
   }
 
diff --git a/packages/types/src/core.d.ts b/packages/types/src/core.d.ts
index 353427c9..4175e116 100644
--- a/packages/types/src/core.d.ts
+++ b/packages/types/src/core.d.ts
@@ -41,6 +41,7 @@ export interface ConfigOptions {
   rootPath?: Maybe<string>;
   schema?: Maybe<Pointer>;
   skipDocDirective?: Maybe<DirectiveName | DirectiveName[]>;
+  onlyDocDirective?: Maybe<DirectiveName | DirectiveName[]>;
   tmpDir?: Maybe<string>;
 }
 
@@ -63,6 +64,7 @@ export interface CliOptions {
   root?: string;
   schema?: Pointer;
   skip?: string[] | string;
+  only?: string[] | string;
   tmp?: string;
 }
 
@@ -74,6 +76,7 @@ export type Options = Omit<
   docOptions: Required<ConfigDocOptions>;
   homepageLocation: string;
   linkRoot: string;
+  onlyDocDirective: DirectiveName[];
   outputDir: string;
   prettify: boolean;
   printer: PackageName;
diff --git a/packages/types/src/helpers.d.ts b/packages/types/src/helpers.d.ts
index 698fa5f8..1368d71b 100644
--- a/packages/types/src/helpers.d.ts
+++ b/packages/types/src/helpers.d.ts
@@ -1,9 +1,9 @@
 import type { GraphQLDirective, DirectiveName } from ".";
 
-export type CustomDirectiveFunction = <T>(
+export type CustomDirectiveFunction = (
   directive?: GraphQLDirective,
   node?: unknown,
-) => T;
+) => unknown;
 
 export type CustomDirectiveResolver = "descriptor" | "tag";
 
diff --git a/packages/types/src/printer.d.ts b/packages/types/src/printer.d.ts
index ac53cd24..f67e5e79 100644
--- a/packages/types/src/printer.d.ts
+++ b/packages/types/src/printer.d.ts
@@ -2,10 +2,10 @@ import type {
   Maybe,
   TypeDeprecatedOption,
   SchemaEntitiesGroupMap,
-  DirectiveName,
   GraphQLSchema,
   CustomDirectiveMap,
   ConfigPrintTypeOptions,
+  GraphQLDirective,
 } from ".";
 
 export type RootTypeName =
@@ -39,8 +39,8 @@ export interface CollapsibleOption {
 }
 
 export interface PrintTypeHeaderOptions {
-  toc?: boolean;
   pagination?: boolean;
+  toc?: boolean;
 }
 
 export interface PrintTypeOptions {
@@ -50,15 +50,16 @@ export interface PrintTypeOptions {
   customDirectives?: Maybe<CustomDirectiveMap>;
   deprecated?: Maybe<TypeDeprecatedOption>;
   groups?: Maybe<SchemaEntitiesGroupMap>;
+  header?: Maybe<PrintTypeHeaderOptions>;
   level?: Maybe<SectionLevelValue>;
+  onlyDocDirectives?: GraphQLDirective[];
   parentType?: Maybe<string>;
   parentTypePrefix?: boolean;
   relatedTypeSection?: boolean;
   schema?: Maybe<GraphQLSchema>;
-  skipDocDirective?: Maybe<DirectiveName[]>;
+  skipDocDirectives?: GraphQLDirective[];
   typeBadges?: boolean;
   withAttributes?: boolean;
-  header?: Maybe<PrintTypeHeaderOptions>;
 }
 
 export type SectionLevelValue = string & {
@@ -83,9 +84,10 @@ export type PrintLinkOptions = Partial<PrintTypeOptions> &
     | "basePath"
     | "deprecated"
     | "groups"
+    | "onlyDocDirectives"
     | "parentType"
     | "parentTypePrefix"
-    | "skipDocDirective"
+    | "skipDocDirectives"
     | "withAttributes"
   >;
 
@@ -147,6 +149,7 @@ export interface PrinterOptions {
   customDirectives?: Maybe<CustomDirectiveMap>;
   deprecated?: Maybe<TypeDeprecatedOption>;
   groups?: Maybe<SchemaEntitiesGroupMap>;
+  onlyDocDirectives?: GraphQLDirective[];
   printTypeOptions?: Maybe<ConfigPrintTypeOptions>;
-  skipDocDirective?: Maybe<DirectiveName[]>;
+  skipDocDirectives?: GraphQLDirective[];
 }
diff --git a/packages/utils/docs/array.md b/packages/utils/docs/array.md
index 0ccf19a1..77af0eed 100644
--- a/packages/utils/docs/array.md
+++ b/packages/utils/docs/array.md
@@ -1,6 +1,6 @@
 # Module: array
 
-Internal library of helpers for converting array \`<-\>` list.
+Internal library of helpers for converting array \`<-\>`  list.
 
 ## Functions
 
@@ -14,15 +14,15 @@ Returns a k/v object from an array of objects with a `name` property.
 
 #### Type parameters
 
-| Parameter | Description                            |
-| :-------- | :------------------------------------- |
-| `T`       | the type of objects the list contains. |
+| Parameter | Description |
+| :------ | :------ |
+| `T` | the type of objects the list contains. |
 
 #### Parameters
 
-| Parameter | Type               | Description                                                  |
-| :-------- | :----------------- | :----------------------------------------------------------- |
-| `list`    | `Maybe`\< `T`[] \> | the list of objects of type `{ name: any }` to be converted. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `list` | `Maybe`\< `T`[] \> | the list of objects of type `{ name: any }` to be converted. |
 
 #### Returns
 
@@ -30,17 +30,21 @@ Returns a k/v object from an array of objects with a `name` property.
 
 an array of object values with `name` as key, or `undefined` if `list` is not a valid array.
 
+#### Source
+
+[array.ts:76](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/array.ts#L76)
+
 #### Example
 
 ```js
-import { convertArrayToMapObject } from "@graphql-markdown/utils/array";
+import { convertArrayToMapObject } from '@graphql-markdown/utils/array';
 
 convertArrayToMapObject([
-  { name: true },
-  { name: "test" },
-  { name: 123 },
-  { name2: 1234 },
-]);
+    { name: true },
+    { name: "test" },
+    { name: 123 },
+    { name2: 1234 },
+  ]);
 
 // Expected result: {
 //   true: { name: true },
@@ -49,11 +53,7 @@ convertArrayToMapObject([
 // }
 ```
 
-#### Defined In
-
-[array.ts:74](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/array.ts#L74)
-
----
+***
 
 ### toArray
 
@@ -65,8 +65,8 @@ Returns an array of values from a k/v object.
 
 #### Parameters
 
-| Parameter   | Type                                           | Description                                  |
-| :---------- | :--------------------------------------------- | :------------------------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `recordMap` | `Maybe`\< `Record`\< `string`, `unknown` \> \> | the key/value record object to be converted. |
 
 #### Returns
@@ -75,22 +75,22 @@ Returns an array of values from a k/v object.
 
 an array of object values, or `undefined` if `recordMap` is not a valid object.
 
+#### Source
+
+[array.ts:34](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/array.ts#L34)
+
 #### Example
 
 ```js
-import { toArray } from "@graphql-markdown/utils/array";
+import { toArray } from '@graphql-markdown/utils/array';
 
 toArray({
-  bool: true,
-  string: "test",
-  number: 123,
-  array: ["one", "two"],
-  child: { key: "value" },
-});
+    bool: true,
+    string: "test",
+    number: 123,
+    array: ["one", "two"],
+    child: { key: "value" },
+  });
 
 // Expected result: [true, "test", 123, ["one", "two"], { key: "value" }]
 ```
-
-#### Defined In
-
-[array.ts:34](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/array.ts#L34)
diff --git a/packages/utils/docs/fs.md b/packages/utils/docs/fs.md
index e4bb8059..e1aed7f9 100644
--- a/packages/utils/docs/fs.md
+++ b/packages/utils/docs/fs.md
@@ -14,29 +14,29 @@ Asynchronously create a folder structure if it does not exist.
 
 #### Parameters
 
-| Parameter  | Type     | Description                      |
-| :--------- | :------- | :------------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `location` | `string` | folder structure in path format. |
 
 #### Returns
 
 `Promise`\< `void` \>
 
+#### Source
+
+[fs.ts:57](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L57)
+
 #### Example
 
 ```js
-import { ensureDir } from "@graphql-markdown/utils/fs";
+import { ensureDir } from '@graphql-markdown/utils/fs';
 
-await ensureDir("./.temp/local");
+await ensureDir("./.temp/local")
 
 // Creates both folders if they do not exists.
 ```
 
-#### Defined In
-
-[fs.ts:30](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L30)
-
----
+***
 
 ### fileExists
 
@@ -48,8 +48,8 @@ Asynchronously check if a file or folder exists at the path location.
 
 #### Parameters
 
-| Parameter  | Type     | Description              |
-| :--------- | :------- | :----------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `location` | `string` | file or folder location. |
 
 #### Returns
@@ -58,21 +58,21 @@ Asynchronously check if a file or folder exists at the path location.
 
 `true` if the path is valid, else `false` if not.
 
+#### Source
+
+[fs.ts:32](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L32)
+
 #### Example
 
 ```js
-import { fileExists } from "@graphql-markdown/utils/fs";
+import { fileExists } from '@graphql-markdown/utils/fs';
 
-await fileExists("./.temp/local");
+await fileExists("./.temp/local")
 
 // Expected true if path is valid, false if not
 ```
 
-#### Defined In
-
-[fs.ts:54](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L54)
-
----
+***
 
 ### saveFile
 
@@ -89,10 +89,10 @@ The function calls `ensureDir(dirname(location))` to create the folder structure
 
 #### Parameters
 
-| Parameter   | Type                       | Description                                             |
-| :---------- | :------------------------- | :------------------------------------------------------ |
-| `location`  | `string`                   | file location.                                          |
-| `content`   | `string`                   | data to be written into the file (UTF-8 string).        |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `location` | `string` | file location. |
+| `content` | `string` | data to be written into the file (UTF-8 string). |
 | `prettify`? | `PrettifyCallbackFunction` | optional callback function for prettifying the content. |
 
 #### Returns
@@ -101,16 +101,16 @@ The function calls `ensureDir(dirname(location))` to create the folder structure
 
 `true` if the path is valid, else `false` if not.
 
+#### Source
+
+[fs.ts:85](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L85)
+
 #### Example
 
 ```js
-import { saveFile } from "@graphql-markdown/utils/fs";
+import { saveFile } from '@graphql-markdown/utils/fs';
 
-await saveFile("./.temp/local.md", "foobar");
+await saveFile("./.temp/local.md", "foobar")
 
 // Created .temp folder if it does not exists, and save data into local.md
 ```
-
-#### Defined In
-
-[fs.ts:85](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/fs.ts#L85)
diff --git a/packages/utils/docs/object.md b/packages/utils/docs/object.md
index e9829b3a..54fd9112 100644
--- a/packages/utils/docs/object.md
+++ b/packages/utils/docs/object.md
@@ -14,9 +14,9 @@ Check if an object contains key/value records.
 
 #### Parameters
 
-| Parameter | Type      | Description                  |
-| :-------- | :-------- | :--------------------------- |
-| `obj`     | `unknown` | the key/value record object. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `unknown` | the key/value record object. |
 
 #### Returns
 
@@ -24,10 +24,14 @@ Check if an object contains key/value records.
 
 `false` if the object is a valid k/v set of records, else `true`.
 
+#### Source
+
+[object.ts:34](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/object.ts#L34)
+
 #### Example
 
 ```js
-import { isEmpty } from "@graphql-markdown/utils/object";
+import { isEmpty } from '@graphql-markdown/utils/object';
 
 const obj = {
   bool: true,
@@ -41,7 +45,3 @@ isEmpty(obj); // Returns false
 
 isEmpty({}); // Returns true
 ```
-
-#### Defined In
-
-[object.ts:34](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/object.ts#L34)
diff --git a/packages/utils/docs/prettier.md b/packages/utils/docs/prettier.md
index 2bee1ecf..a555990c 100644
--- a/packages/utils/docs/prettier.md
+++ b/packages/utils/docs/prettier.md
@@ -7,24 +7,28 @@ Internal library for prettifying files using `prettier`.
 ### prettify
 
 ```ts
-prettify(content, parser): Promise< string | undefined >
+prettify(content, parser): Promise< undefined | string >
 ```
 
 Prettify a string using [prettier.format](https://prettier.io/docs/en/api#prettierformatsource-options).
 
 #### Parameters
 
-| Parameter | Type     | Description                   |
-| :-------- | :------- | :---------------------------- |
-| `content` | `string` | the string to be prettified.  |
-| `parser`  | `string` | the `prettier` parser to use. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `content` | `string` | the string to be prettified. |
+| `parser` | `string` | the `prettier` parser to use. |
 
 #### Returns
 
-`Promise`\< `string` \| `undefined` \>
+`Promise`\< `undefined` \| `string` \>
 
 a prettified string, or undefined if an error occurred.
 
+#### Source
+
+[prettier.ts:27](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L27)
+
 #### Remarks
 
 This function logs a warning message on error.
@@ -33,32 +37,32 @@ This function logs a warning message on error.
 
 https://prettier.io/docs/en/options#parser for the list of parsers.
 
-#### Defined In
-
-[prettier.ts:27](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L27)
-
----
+***
 
 ### prettifyJavascript
 
 ```ts
-prettifyJavascript(content): Promise< string | undefined >
+prettifyJavascript(content): Promise< undefined | string >
 ```
 
 Prettify a Javascript string using [prettify](prettier.md#prettify) and `babel` parser.
 
 #### Parameters
 
-| Parameter | Type     | Description                  |
-| :-------- | :------- | :--------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `content` | `string` | the string to be prettified. |
 
 #### Returns
 
-`Promise`\< `string` \| `undefined` \>
+`Promise`\< `undefined` \| `string` \>
 
 a prettified string, or undefined if an error occurred.
 
+#### Source
+
+[prettier.ts:80](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L80)
+
 #### Remarks
 
 Same as `prettify(content, "babel")`.
@@ -67,32 +71,32 @@ Same as `prettify(content, "babel")`.
 
 [prettify](prettier.md#prettify)
 
-#### Defined In
-
-[prettier.ts:80](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L80)
-
----
+***
 
 ### prettifyMarkdown
 
 ```ts
-prettifyMarkdown(content): Promise< string | undefined >
+prettifyMarkdown(content): Promise< undefined | string >
 ```
 
 Prettify a Markdown string using [prettify](prettier.md#prettify) and `markdown` parser.
 
 #### Parameters
 
-| Parameter | Type     | Description                  |
-| :-------- | :------- | :--------------------------- |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
 | `content` | `string` | the string to be prettified. |
 
 #### Returns
 
-`Promise`\< `string` \| `undefined` \>
+`Promise`\< `undefined` \| `string` \>
 
 a prettified string, or undefined if an error occurred.
 
+#### Source
+
+[prettier.ts:59](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L59)
+
 #### Remarks
 
 Same as `prettify(content, "markdown")`.
@@ -100,7 +104,3 @@ Same as `prettify(content, "markdown")`.
 #### See
 
 [prettify](prettier.md#prettify)
-
-#### Defined In
-
-[prettier.ts:59](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/prettier.ts#L59)
diff --git a/packages/utils/docs/string.md b/packages/utils/docs/string.md
index 8e223ac8..986184eb 100644
--- a/packages/utils/docs/string.md
+++ b/packages/utils/docs/string.md
@@ -14,9 +14,9 @@ Returns a string in lowercase excepted for the 1st character capitalized using [
 
 #### Parameters
 
-| Parameter | Type                  | Description                   |
-| :-------- | :-------------------- | :---------------------------- |
-| `str`     | `Maybe`\< `string` \> | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
 
 #### Returns
 
@@ -24,6 +24,10 @@ Returns a string in lowercase excepted for the 1st character capitalized using [
 
 a capitalized string, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:216](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L216)
+
 #### Example
 
 ```js
@@ -33,11 +37,7 @@ capitalize("the quick Brown Fox");
 // Expected result: "The quick brown fox"
 ```
 
-#### Defined In
-
-[string.ts:184](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L184)
-
----
+***
 
 ### escapeMDX
 
@@ -49,9 +49,9 @@ Returns a string with MDX special characters converted to HTML unicode using [to
 
 #### Parameters
 
-| Parameter | Type      | Description                   |
-| :-------- | :-------- | :---------------------------- |
-| `str`     | `unknown` | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `unknown` | the string to be transformed. |
 
 #### Returns
 
@@ -59,6 +59,10 @@ Returns a string with MDX special characters converted to HTML unicode using [to
 
 a string with MDX special characters replaced by HTML unicode equivalents.
 
+#### Source
+
+[string.ts:172](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L172)
+
 #### Example
 
 ```js
@@ -68,11 +72,7 @@ escapeMDX("{MDX} <special> characters");
 // Expected result: "&#x007B;MDX&#x007D; &#x003C;special&#x003E; characters"
 ```
 
-#### Defined In
-
-[string.ts:140](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L140)
-
----
+***
 
 ### firstUppercase
 
@@ -84,9 +84,9 @@ Returns a string with the 1st character in uppercase.
 
 #### Parameters
 
-| Parameter | Type                  | Description                   |
-| :-------- | :-------------------- | :---------------------------- |
-| `str`     | `Maybe`\< `string` \> | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
 
 #### Returns
 
@@ -94,6 +94,10 @@ Returns a string with the 1st character in uppercase.
 
 a string with the 1st character in uppercase, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:192](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L192)
+
 #### Example
 
 ```js
@@ -103,11 +107,7 @@ firstUppercase("the quick Brown Fox");
 // Expected result: "The quick Brown Fox"
 ```
 
-#### Defined In
-
-[string.ts:160](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L160)
-
----
+***
 
 ### kebabCase
 
@@ -119,9 +119,9 @@ Returns a lowercase string with `-` as replacement for non alphanum characters u
 
 #### Parameters
 
-| Parameter | Type                  | Description                   |
-| :-------- | :-------------------- | :---------------------------- |
-| `str`     | `Maybe`\< `string` \> | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
 
 #### Returns
 
@@ -129,6 +129,10 @@ Returns a lowercase string with `-` as replacement for non alphanum characters u
 
 a string converted to start case, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:259](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L259)
+
 #### Example
 
 ```js
@@ -138,11 +142,7 @@ kebabCase("The quick brown Fox");
 // Expected result: "the-quick-brown-fox"
 ```
 
-#### Defined In
-
-[string.ts:258](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L258)
-
----
+***
 
 ### prune
 
@@ -154,10 +154,10 @@ Returns a string pruned on both start and end, similar to `trim()` but with any
 
 #### Parameters
 
-| Parameter | Type                  | Default value | Description                             |
-| :-------- | :-------------------- | :------------ | :-------------------------------------- |
-| `str`     | `Maybe`\< `string` \> | `undefined`   | the string to be pruned.                |
-| `substr`  | `string`              | `""`          | the substring to be removed from `str`. |
+| Parameter | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | `undefined` | the string to be pruned. |
+| `substr` | `string` | `""` | the substring to be removed from `str`. |
 
 #### Returns
 
@@ -165,6 +165,10 @@ Returns a string pruned on both start and end, similar to `trim()` but with any
 
 a pruned string, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:58](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L58)
+
 #### Example
 
 ```js
@@ -176,11 +180,7 @@ prune(text, "**");
 // Expected result: "The quick brown fox jumps over the lazy dog."
 ```
 
-#### Defined In
-
-[string.ts:82](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L82)
-
----
+***
 
 ### replaceDiacritics
 
@@ -192,9 +192,9 @@ Replaces diacritics by non-diacritic equivalent characters.
 
 #### Parameters
 
-| Parameter | Type                  | Description                   |
-| :-------- | :-------------------- | :---------------------------- |
-| `str`     | `Maybe`\< `string` \> | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
 
 #### Returns
 
@@ -202,7 +202,11 @@ Replaces diacritics by non-diacritic equivalent characters.
 
 a string with diacritic characters replaced, or an empty string if `str` is not a valid string.
 
--
+ *
+
+#### Source
+
+[string.ts:27](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L27)
 
 #### Example
 
@@ -216,11 +220,7 @@ replaceDiacritics("Âéêś"); // Expected result: "Aees"
 
 [StackOverflow source](https://stackoverflow.com/a/37511463).
 
-#### Defined In
-
-[string.ts:209](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L209)
-
----
+***
 
 ### slugify
 
@@ -232,19 +232,19 @@ Alias of [kebabCase](string.md#kebabcase).
 
 #### Parameters
 
-| Parameter | Type                  |
-| :-------- | :-------------------- |
-| `str`     | `Maybe`\< `string` \> |
+| Parameter | Type |
+| :------ | :------ |
+| `str` | `Maybe`\< `string` \> |
 
 #### Returns
 
 `string`
 
-#### Defined In
+#### Source
 
-[string.ts:258](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L258)
+[string.ts:259](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L259)
 
----
+***
 
 ### startCase
 
@@ -256,9 +256,9 @@ Applies [firstUppercase](string.md#firstuppercase) using [stringCaseBuilder](str
 
 #### Parameters
 
-| Parameter | Type                  | Description                   |
-| :-------- | :-------------------- | :---------------------------- |
-| `str`     | `Maybe`\< `string` \> | the string to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
 
 #### Returns
 
@@ -266,6 +266,10 @@ Applies [firstUppercase](string.md#firstuppercase) using [stringCaseBuilder](str
 
 a string converted to start case, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:238](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L238)
+
 #### Example
 
 ```js
@@ -275,11 +279,7 @@ startCase("the quick Brown Fox");
 // Expected result: "The Quick Brown Fox"
 ```
 
-#### Defined In
-
-[string.ts:234](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L234)
-
----
+***
 
 ### stringCaseBuilder
 
@@ -298,12 +298,12 @@ By default `splitter` expression will split the string into words, where non-alp
 
 #### Parameters
 
-| Parameter         | Type                              | Description                                                   |
-| :---------------- | :-------------------------------- | :------------------------------------------------------------ |
-| `str`             | `Maybe`\< `string` \>             | the string to be transformed.                                 |
-| `transformation`? | `Maybe`\< (`word`) => `string` \> | optional transformation callback function.                    |
-| `separator`?      | `string`                          | optional character separator for word-based transformation.   |
-| `splitter`?       | `string` \| `RegExp`              | optional regex or string rule for splitting string into word. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `Maybe`\< `string` \> | the string to be transformed. |
+| `transformation`? | `Maybe`\< (`word`) => `string` \> | optional transformation callback function. |
+| `separator`? | `string` | optional character separator for word-based transformation. |
+| `splitter`? | `string` \| `RegExp` | optional regex or string rule for splitting string into word. |
 
 #### Returns
 
@@ -311,6 +311,10 @@ By default `splitter` expression will split the string into words, where non-alp
 
 a transformed string, or an empty string if `str` is not a valid string.
 
+#### Source
+
+[string.ts:100](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L100)
+
 #### Example
 
 ```js
@@ -323,11 +327,7 @@ stringCaseBuilder(text, transformation, " ");
 // Expected result: "*The* *quick* *brown* *fox* *jumps* *over* *the* *lazy* *dog*"
 ```
 
-#### Defined In
-
-[string.ts:36](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L36)
-
----
+***
 
 ### toHTMLUnicode
 
@@ -339,9 +339,9 @@ Converts a character to its equivalent HTML unicode representation `&#x0000`.
 
 #### Parameters
 
-| Parameter | Type                  | Description                      |
-| :-------- | :-------------------- | :------------------------------- |
-| `char`    | `Maybe`\< `string` \> | the character to be transformed. |
+| Parameter | Type | Description |
+| :------ | :------ | :------ |
+| `char` | `Maybe`\< `string` \> | the character to be transformed. |
 
 #### Returns
 
@@ -349,6 +349,10 @@ Converts a character to its equivalent HTML unicode representation `&#x0000`.
 
 a HTML unicode representation of `char`, or an empty string if `char` is not a valid string.
 
+#### Source
+
+[string.ts:146](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L146)
+
 #### Example
 
 ```js
@@ -356,7 +360,3 @@ import { toHTMLUnicode } from "@graphql-markdown/utils/string";
 
 toHTMLUnicode("%"); // Expected result: "&#x0025;"
 ```
-
-#### Defined In
-
-[string.ts:114](https://github.com/graphql-markdown/graphql-markdown/blob/main/packages/utils/src/string.ts#L114)
diff --git a/website/package-lock.json b/website/package-lock.json
index edea7483..3155a56f 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -87,74 +87,74 @@
       "integrity": "sha512-ydeYji3VKIPRFHTnIBVbwocFs9FOKLJnQtYIqmT3z3SVhsceeju2XUD9v3jZRrKb9FVrs1oKQaw0MsessZXMkw=="
     },
     "node_modules/@algolia/cache-browser-local-storage": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz",
-      "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz",
+      "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==",
       "dependencies": {
-        "@algolia/cache-common": "4.14.2"
+        "@algolia/cache-common": "4.20.0"
       }
     },
     "node_modules/@algolia/cache-common": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz",
-      "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg=="
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz",
+      "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ=="
     },
     "node_modules/@algolia/cache-in-memory": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz",
-      "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz",
+      "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==",
       "dependencies": {
-        "@algolia/cache-common": "4.14.2"
+        "@algolia/cache-common": "4.20.0"
       }
     },
     "node_modules/@algolia/client-account": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz",
-      "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz",
+      "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==",
       "dependencies": {
-        "@algolia/client-common": "4.14.2",
-        "@algolia/client-search": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+        "@algolia/client-common": "4.20.0",
+        "@algolia/client-search": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/@algolia/client-analytics": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz",
-      "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz",
+      "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==",
       "dependencies": {
-        "@algolia/client-common": "4.14.2",
-        "@algolia/client-search": "4.14.2",
-        "@algolia/requester-common": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+        "@algolia/client-common": "4.20.0",
+        "@algolia/client-search": "4.20.0",
+        "@algolia/requester-common": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/@algolia/client-common": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz",
-      "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz",
+      "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==",
       "dependencies": {
-        "@algolia/requester-common": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+        "@algolia/requester-common": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/@algolia/client-personalization": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz",
-      "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz",
+      "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==",
       "dependencies": {
-        "@algolia/client-common": "4.14.2",
-        "@algolia/requester-common": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+        "@algolia/client-common": "4.20.0",
+        "@algolia/requester-common": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/@algolia/client-search": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz",
-      "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz",
+      "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==",
       "dependencies": {
-        "@algolia/client-common": "4.14.2",
-        "@algolia/requester-common": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+        "@algolia/client-common": "4.20.0",
+        "@algolia/requester-common": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/@algolia/events": {
@@ -163,47 +163,47 @@
       "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ=="
     },
     "node_modules/@algolia/logger-common": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz",
-      "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA=="
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz",
+      "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ=="
     },
     "node_modules/@algolia/logger-console": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz",
-      "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz",
+      "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==",
       "dependencies": {
-        "@algolia/logger-common": "4.14.2"
+        "@algolia/logger-common": "4.20.0"
       }
     },
     "node_modules/@algolia/requester-browser-xhr": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz",
-      "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz",
+      "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==",
       "dependencies": {
-        "@algolia/requester-common": "4.14.2"
+        "@algolia/requester-common": "4.20.0"
       }
     },
     "node_modules/@algolia/requester-common": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz",
-      "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg=="
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz",
+      "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng=="
     },
     "node_modules/@algolia/requester-node-http": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz",
-      "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz",
+      "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==",
       "dependencies": {
-        "@algolia/requester-common": "4.14.2"
+        "@algolia/requester-common": "4.20.0"
       }
     },
     "node_modules/@algolia/transporter": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz",
-      "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz",
+      "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==",
       "dependencies": {
-        "@algolia/cache-common": "4.14.2",
-        "@algolia/logger-common": "4.14.2",
-        "@algolia/requester-common": "4.14.2"
+        "@algolia/cache-common": "4.20.0",
+        "@algolia/logger-common": "4.20.0",
+        "@algolia/requester-common": "4.20.0"
       }
     },
     "node_modules/@ampproject/remapping": {
@@ -2022,24 +2022,25 @@
       }
     },
     "node_modules/@docsearch/css": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz",
-      "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg=="
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz",
+      "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA=="
     },
     "node_modules/@docsearch/react": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz",
-      "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz",
+      "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==",
       "dependencies": {
-        "@algolia/autocomplete-core": "1.7.4",
-        "@algolia/autocomplete-preset-algolia": "1.7.4",
-        "@docsearch/css": "3.3.3",
-        "algoliasearch": "^4.0.0"
+        "@algolia/autocomplete-core": "1.9.3",
+        "@algolia/autocomplete-preset-algolia": "1.9.3",
+        "@docsearch/css": "3.5.2",
+        "algoliasearch": "^4.19.1"
       },
       "peerDependencies": {
         "@types/react": ">= 16.8.0 < 19.0.0",
         "react": ">= 16.8.0 < 19.0.0",
-        "react-dom": ">= 16.8.0 < 19.0.0"
+        "react-dom": ">= 16.8.0 < 19.0.0",
+        "search-insights": ">= 1 < 3"
       },
       "peerDependenciesMeta": {
         "@types/react": {
@@ -2050,23 +2051,38 @@
         },
         "react-dom": {
           "optional": true
+        },
+        "search-insights": {
+          "optional": true
         }
       }
     },
     "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz",
-      "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==",
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz",
+      "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==",
       "dependencies": {
-        "@algolia/autocomplete-shared": "1.7.4"
+        "@algolia/autocomplete-plugin-algolia-insights": "1.9.3",
+        "@algolia/autocomplete-shared": "1.9.3"
+      }
+    },
+    "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz",
+      "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==",
+      "dependencies": {
+        "@algolia/autocomplete-shared": "1.9.3"
+      },
+      "peerDependencies": {
+        "search-insights": ">= 1 < 3"
       }
     },
     "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-preset-algolia": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz",
-      "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==",
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz",
+      "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==",
       "dependencies": {
-        "@algolia/autocomplete-shared": "1.7.4"
+        "@algolia/autocomplete-shared": "1.9.3"
       },
       "peerDependencies": {
         "@algolia/client-search": ">= 4.9.1 < 6",
@@ -2074,9 +2090,13 @@
       }
     },
     "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz",
-      "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg=="
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz",
+      "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==",
+      "peerDependencies": {
+        "@algolia/client-search": ">= 4.9.1 < 6",
+        "algoliasearch": ">= 4.9.1 < 6"
+      }
     },
     "node_modules/@docusaurus/core": {
       "version": "2.4.3",
@@ -3314,11 +3334,11 @@
       }
     },
     "node_modules/@types/hast": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
-      "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz",
+      "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==",
       "dependencies": {
-        "@types/unist": "*"
+        "@types/unist": "^2"
       }
     },
     "node_modules/@types/history": {
@@ -3366,11 +3386,11 @@
       "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
     },
     "node_modules/@types/mdast": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
-      "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz",
+      "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==",
       "dependencies": {
-        "@types/unist": "*"
+        "@types/unist": "^2"
       }
     },
     "node_modules/@types/mime": {
@@ -3491,9 +3511,9 @@
       }
     },
     "node_modules/@types/unist": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
-      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz",
+      "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw=="
     },
     "node_modules/@types/ws": {
       "version": "8.5.3",
@@ -3795,30 +3815,30 @@
       }
     },
     "node_modules/algoliasearch": {
-      "version": "4.14.2",
-      "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz",
-      "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==",
-      "dependencies": {
-        "@algolia/cache-browser-local-storage": "4.14.2",
-        "@algolia/cache-common": "4.14.2",
-        "@algolia/cache-in-memory": "4.14.2",
-        "@algolia/client-account": "4.14.2",
-        "@algolia/client-analytics": "4.14.2",
-        "@algolia/client-common": "4.14.2",
-        "@algolia/client-personalization": "4.14.2",
-        "@algolia/client-search": "4.14.2",
-        "@algolia/logger-common": "4.14.2",
-        "@algolia/logger-console": "4.14.2",
-        "@algolia/requester-browser-xhr": "4.14.2",
-        "@algolia/requester-common": "4.14.2",
-        "@algolia/requester-node-http": "4.14.2",
-        "@algolia/transporter": "4.14.2"
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz",
+      "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==",
+      "dependencies": {
+        "@algolia/cache-browser-local-storage": "4.20.0",
+        "@algolia/cache-common": "4.20.0",
+        "@algolia/cache-in-memory": "4.20.0",
+        "@algolia/client-account": "4.20.0",
+        "@algolia/client-analytics": "4.20.0",
+        "@algolia/client-common": "4.20.0",
+        "@algolia/client-personalization": "4.20.0",
+        "@algolia/client-search": "4.20.0",
+        "@algolia/logger-common": "4.20.0",
+        "@algolia/logger-console": "4.20.0",
+        "@algolia/requester-browser-xhr": "4.20.0",
+        "@algolia/requester-common": "4.20.0",
+        "@algolia/requester-node-http": "4.20.0",
+        "@algolia/transporter": "4.20.0"
       }
     },
     "node_modules/algoliasearch-helper": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz",
-      "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==",
+      "version": "3.14.2",
+      "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz",
+      "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==",
       "dependencies": {
         "@algolia/events": "^4.0.1"
       },
@@ -3934,9 +3954,9 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.14",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
-      "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+      "version": "10.4.16",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+      "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -3945,12 +3965,16 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
-        "browserslist": "^4.21.5",
-        "caniuse-lite": "^1.0.30001464",
-        "fraction.js": "^4.2.0",
+        "browserslist": "^4.21.10",
+        "caniuse-lite": "^1.0.30001538",
+        "fraction.js": "^4.3.6",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
@@ -4223,9 +4247,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "version": "4.21.11",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
+      "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -4234,13 +4258,17 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
+        "caniuse-lite": "^1.0.30001538",
+        "electron-to-chromium": "^1.4.526",
+        "node-releases": "^2.0.13",
+        "update-browserslist-db": "^1.0.13"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -4369,9 +4397,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001464",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz",
-      "integrity": "sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==",
+      "version": "1.0.30001538",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
+      "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
       "funding": [
         {
           "type": "opencollective",
@@ -4380,6 +4408,10 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ]
     },
@@ -4794,9 +4826,9 @@
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
     },
     "node_modules/copy-text-to-clipboard": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz",
-      "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz",
+      "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==",
       "engines": {
         "node": ">=12"
       },
@@ -4969,11 +5001,11 @@
       }
     },
     "node_modules/cross-fetch": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
-      "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
+      "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
       "dependencies": {
-        "node-fetch": "2.6.7"
+        "node-fetch": "^2.6.12"
       }
     },
     "node_modules/cross-spawn": {
@@ -5596,9 +5628,9 @@
       "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.284",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
-      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
+      "version": "1.4.528",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz",
+      "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
     },
     "node_modules/emoji-regex": {
       "version": "9.2.2",
@@ -6002,9 +6034,9 @@
       }
     },
     "node_modules/fbjs": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz",
-      "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz",
+      "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==",
       "dependencies": {
         "cross-fetch": "^3.1.5",
         "fbjs-css-vars": "^1.0.0",
@@ -6012,7 +6044,7 @@
         "object-assign": "^4.1.0",
         "promise": "^7.1.1",
         "setimmediate": "^1.0.5",
-        "ua-parser-js": "^0.7.30"
+        "ua-parser-js": "^1.0.35"
       }
     },
     "node_modules/fbjs-css-vars": {
@@ -6276,15 +6308,15 @@
       }
     },
     "node_modules/fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz",
+      "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==",
       "engines": {
         "node": "*"
       },
       "funding": {
         "type": "patreon",
-        "url": "https://www.patreon.com/infusion"
+        "url": "https://github.com/sponsors/rawify"
       }
     },
     "node_modules/fresh": {
@@ -8093,9 +8125,9 @@
       }
     },
     "node_modules/node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -8120,9 +8152,9 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
-      "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A=="
+      "version": "2.0.13",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+      "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
     },
     "node_modules/normalize-path": {
       "version": "3.0.0",
@@ -9111,9 +9143,9 @@
       }
     },
     "node_modules/postcss-sort-media-queries": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz",
-      "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==",
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz",
+      "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==",
       "dependencies": {
         "sort-css-media-queries": "2.1.0"
       },
@@ -9680,9 +9712,9 @@
       }
     },
     "node_modules/react-textarea-autosize": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz",
-      "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==",
+      "version": "8.5.3",
+      "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
+      "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
       "dependencies": {
         "@babel/runtime": "^7.20.13",
         "use-composed-ref": "^1.3.0",
@@ -9922,6 +9954,7 @@
       "version": "7.12.1",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
       "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
+      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
@@ -11354,9 +11387,9 @@
       }
     },
     "node_modules/ua-parser-js": {
-      "version": "0.7.34",
-      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz",
-      "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==",
+      "version": "1.0.36",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz",
+      "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==",
       "funding": [
         {
           "type": "opencollective",
@@ -11365,6 +11398,10 @@
         {
           "type": "paypal",
           "url": "https://paypal.me/faisalman"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/faisalman"
         }
       ],
       "engines": {
@@ -11564,9 +11601,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
       "funding": [
         {
           "type": "opencollective",
@@ -11575,6 +11612,10 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
@@ -11582,7 +11623,7 @@
         "picocolors": "^1.0.0"
       },
       "bin": {
-        "browserslist-lint": "cli.js"
+        "update-browserslist-db": "cli.js"
       },
       "peerDependencies": {
         "browserslist": ">= 4.21.0"


Test patch:
diff --git a/packages/core/tests/__data__/schema_with_grouping.graphql b/packages/core/tests/__data__/schema_with_grouping.graphql
index 885473fe..462c8697 100644
--- a/packages/core/tests/__data__/schema_with_grouping.graphql
+++ b/packages/core/tests/__data__/schema_with_grouping.graphql
@@ -25,19 +25,12 @@ scalar PhoneNumber
 scalar Time
 scalar URL @specifiedBy(url: "https://tools.ietf.org/html/rfc3986")
 
-type Mutation {
-  UpdateGrade(input: String): String @doc(category: "Grade")
-}
+directive @public on OBJECT | FIELD_DEFINITION
 
 type Mutation {
+  UpdateGrade(input: String): String @doc(category: "Grade")
   UpdateGPA(input: Int): Int @doc(category: "Grade")
-}
-
-type Mutation {
   AddCourse(input: String): String @doc(category: "Course")
-}
-
-type Mutation {
   DropCourse(input: String): String @doc(category: "Course")
 }
 
@@ -47,14 +40,11 @@ enum Roles {
 }
 
 type Query {
-  GPA(skip: Int = 0): Int @doc(category: "Grade")
-  WeightedGPA(input: String, skip: Int!): Int @doc(category: "Grade")
-  UnWeightedGPA(input: String, skip: Int!): Int @doc(category: "Grade")
-  Course(skip: Int = 0): Course @doc(category: "Course")
-}
-
-type Query {
-  allCourses: [String] @doc(category: "Course")
+  GPA(skip: Int = 0): Int @doc(category: "Grade") @public
+  WeightedGPA(input: String, skip: Int!): Int @doc(category: "Grade") @public
+  UnWeightedGPA(input: String, skip: Int!): Int @doc(category: "Grade") @public
+  Course(skip: Int = 0): Course @doc(category: "Course") @public
+  allCourses: [String] @doc(category: "Course") @public
   mathCourses: [String] @doc(category: "Course") @deprecated
   scienceCourses: [String] @doc(category: "Course") @deprecated
   searchRole(roles: [Roles!]! = [ADMIN]): Int!
@@ -68,7 +58,7 @@ interface Record {
   id: ID!
 }
 
-type Semester implements Record {
+type Semester implements Record @public {
   id: ID!
   startDate: Date
   withdrawDate: Date @deprecated
diff --git a/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap b/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
index a29b37c3..121f9195 100644
--- a/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
+++ b/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
@@ -50,6 +50,7 @@ link: null
   "misc/directives/doc.mdx": "doc",
   "misc/directives/include.mdx": "include",
   "misc/directives/no-doc.mdx": "no-doc",
+  "misc/directives/public.mdx": "public",
   "misc/directives/skip.mdx": "skip",
   "misc/directives/specified-by.mdx": "specified-by",
   "misc/enums/_category_.yml": "label: Enums
diff --git a/packages/core/tests/integration/generator.spec.ts b/packages/core/tests/integration/generator.spec.ts
index ad8d87ea..1ce75593 100644
--- a/packages/core/tests/integration/generator.spec.ts
+++ b/packages/core/tests/integration/generator.spec.ts
@@ -29,9 +29,9 @@ describe("renderer", () => {
     jest.spyOn(global.console, "info").mockImplementation(() => {});
     jest.spyOn(global.console, "error").mockImplementation(() => {});
 
-    jest
-      .spyOn(Printer, "printType")
-      .mockImplementation((value) => value as MDXString);
+    jest.spyOn(Printer, "printType").mockImplementation((value) => {
+      return value as MDXString;
+    });
 
     vol.fromJSON({
       "/output": null,
@@ -67,6 +67,8 @@ describe("renderer", () => {
           ...DEFAULT_OPTIONS.printTypeOptions,
           deprecated: DeprecatedOption.DEFAULT,
         },
+        onlyDocDirective: [],
+        skipDocDirective: [],
       } as GeneratorOptions;
 
       await generateDocFromSchema(config);
@@ -96,13 +98,15 @@ describe("renderer", () => {
           ...DEFAULT_OPTIONS.printTypeOptions,
           deprecated: DeprecatedOption.DEFAULT,
         },
+        onlyDocDirective: [],
+        skipDocDirective: [],
       } as GeneratorOptions;
 
       jest.spyOn(diff, "checkSchemaChanges").mockResolvedValue(false);
       await generateDocFromSchema(config);
 
       expect(logSpy).toHaveBeenCalledWith(
-        `No changes detected in schema "${config.schemaLocation}".`,
+        `No changes detected in schema "${String(config.schemaLocation)}".`,
       );
     });
 
@@ -134,6 +138,8 @@ describe("renderer", () => {
           ...DEFAULT_OPTIONS.printTypeOptions,
           deprecated: DeprecatedOption.DEFAULT,
         },
+        onlyDocDirective: [],
+        skipDocDirective: [],
       } as GeneratorOptions;
 
       await generateDocFromSchema(config);
diff --git a/packages/core/tests/unit/config.test.ts b/packages/core/tests/unit/config.test.ts
index ce0494b2..521461c1 100644
--- a/packages/core/tests/unit/config.test.ts
+++ b/packages/core/tests/unit/config.test.ts
@@ -17,8 +17,10 @@ import {
   DEFAULT_OPTIONS,
   DiffMethod,
   getCustomDirectives,
-  getSkipDocDirective,
+  getDocDirective,
+  getOnlyDocDirectives,
   getSkipDocDirectives,
+  getVisibilityDirectives,
   parseGroupByOption,
 } from "../../src/config";
 
@@ -80,27 +82,85 @@ describe("config", () => {
     });
   });
 
-  describe("getSkipDocDirective", () => {
+  describe("getOnlyDocDirectives", () => {
+    test("returns a list of directive names", () => {
+      expect.hasAssertions();
+
+      expect(
+        getOnlyDocDirectives(
+          { only: ["@public" as DirectiveName] },
+          { onlyDocDirective: ["@admin" as DirectiveName] },
+        ),
+      ).toStrictEqual(["public", "admin"]);
+    });
+
+    test("supports string as input", () => {
+      expect.hasAssertions();
+
+      expect(
+        getOnlyDocDirectives({ only: "@public" as DirectiveName }, undefined),
+      ).toStrictEqual(["public"]);
+    });
+  });
+
+  describe("getVisibilityDirectives", () => {
+    test("returns a list of skip and only directive names", () => {
+      expect.hasAssertions();
+
+      expect(
+        getVisibilityDirectives(
+          {
+            only: ["@public" as DirectiveName],
+            skip: ["@noDoc" as DirectiveName],
+          },
+          {
+            onlyDocDirective: ["@admin" as DirectiveName],
+            skipDocDirective: ["@deprecated" as DirectiveName],
+          },
+        ),
+      ).toStrictEqual({
+        onlyDocDirective: ["public", "admin"],
+        skipDocDirective: ["noDoc", "deprecated"],
+      });
+    });
+
+    test("throws an errors if a directive is declared both as only and skip", () => {
+      expect.hasAssertions();
+
+      expect(() => {
+        return getVisibilityDirectives(
+          {
+            only: ["@admin" as DirectiveName],
+          },
+          {
+            skipDocDirective: ["@admin" as DirectiveName],
+          },
+        );
+      }).toThrow(Error);
+    });
+  });
+
+  describe("getDocDirective", () => {
     test("returns a directive name", () => {
       expect.hasAssertions();
 
-      expect(getSkipDocDirective("@noDoc" as DirectiveName)).toBe("noDoc");
+      expect(getDocDirective("@noDoc" as DirectiveName)).toBe("noDoc");
     });
 
     test("throws an error if not a string", () => {
       expect.hasAssertions();
 
-      expect(() => getSkipDocDirective({} as unknown as DirectiveName)).toThrow(
-        Error,
-      );
+      expect(() => {
+        return getDocDirective({} as unknown as DirectiveName);
+      }).toThrow(Error);
     });
 
     test("throws an error if format is not a directive", () => {
       expect.hasAssertions();
 
-      expect(() =>
-        getSkipDocDirective("+NotADirective@" as DirectiveName),
-      ).toThrow(`Invalid "+NotADirective@"`);
+      expect(() => {
+        return getDocDirective("+NotADirective@" as DirectiveName);
+      }).toThrow(`Invalid "+NotADirective@"`);
     });
   });
 
@@ -112,22 +172,23 @@ describe("config", () => {
 
       expect(config).toEqual(
         expect.objectContaining({
-          id: DEFAULT_OPTIONS.id,
           baseURL: DEFAULT_OPTIONS.baseURL,
+          customDirective: DEFAULT_OPTIONS.customDirective,
           diffMethod: DEFAULT_OPTIONS.diffMethod,
+          docOptions: DEFAULT_OPTIONS.docOptions,
           groupByDirective: DEFAULT_OPTIONS.groupByDirective,
           homepageLocation: expect.stringMatching(/.+\/assets\/generated.md$/),
+          id: DEFAULT_OPTIONS.id,
           linkRoot: DEFAULT_OPTIONS.linkRoot,
           loaders: DEFAULT_OPTIONS.loaders,
           outputDir: join(DEFAULT_OPTIONS.rootPath, DEFAULT_OPTIONS.baseURL),
+          onlyDocDirective: DEFAULT_OPTIONS.onlyDocDirective,
           prettify: DEFAULT_OPTIONS.pretty,
-          schemaLocation: DEFAULT_OPTIONS.schema,
-          tmpDir: expect.stringMatching(/.+@graphql-markdown\/docusaurus$/),
-          docOptions: DEFAULT_OPTIONS.docOptions,
-          printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
           printer: DEFAULT_OPTIONS.printer,
+          printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
+          schemaLocation: DEFAULT_OPTIONS.schema,
           skipDocDirective: DEFAULT_OPTIONS.skipDocDirective,
-          customDirective: DEFAULT_OPTIONS.customDirective,
+          tmpDir: expect.stringMatching(/.+@graphql-markdown\/docusaurus$/),
         }),
       );
     });
@@ -171,7 +232,9 @@ describe("config", () => {
             descriptor: (
               directiveType?: GraphQLDirective,
               node?: GraphQLDirective,
-            ): string => `Test${node!.name}`,
+            ): string => {
+              return `Test${node!.name}`;
+            },
           } as CustomDirective,
         },
       };
@@ -179,22 +242,23 @@ describe("config", () => {
       const config = await buildConfig(configFileOpts, undefined);
 
       expect(config).toStrictEqual({
-        id: DEFAULT_OPTIONS.id,
         baseURL: configFileOpts.baseURL,
+        customDirective: configFileOpts.customDirective,
         diffMethod: configFileOpts.diffMethod,
+        docOptions: configFileOpts.docOptions,
         groupByDirective: configFileOpts.groupByDirective,
         homepageLocation: configFileOpts.homepage,
+        id: DEFAULT_OPTIONS.id,
         linkRoot: configFileOpts.linkRoot,
         loaders: configFileOpts.loaders,
         outputDir: join(configFileOpts.rootPath!, configFileOpts.baseURL!),
+        onlyDocDirective: DEFAULT_OPTIONS.onlyDocDirective,
         prettify: configFileOpts.pretty,
-        schemaLocation: configFileOpts.schema,
-        tmpDir: configFileOpts.tmpDir,
-        docOptions: configFileOpts.docOptions,
-        printTypeOptions: configFileOpts.printTypeOptions,
         printer: DEFAULT_OPTIONS.printer,
+        printTypeOptions: configFileOpts.printTypeOptions,
+        schemaLocation: configFileOpts.schema,
         skipDocDirective: ["noDoc"],
-        customDirective: configFileOpts.customDirective,
+        tmpDir: configFileOpts.tmpDir,
       });
     });
 
@@ -236,6 +300,7 @@ describe("config", () => {
         noCode: true,
         noPagination: true,
         noToc: true,
+        only: "@public",
         pretty: true,
         root: "cli",
         schema: "cli/my-schema.graphql",
@@ -273,6 +338,7 @@ describe("config", () => {
         },
         printer: DEFAULT_OPTIONS.printer,
         skipDocDirective: ["noDoc"],
+        onlyDocDirective: ["public"],
         customDirective: DEFAULT_OPTIONS.customDirective,
       });
     });
@@ -293,22 +359,23 @@ describe("config", () => {
       const input = await buildConfig(configFileOpts, cliOpts);
 
       expect(input).toStrictEqual({
-        id: DEFAULT_OPTIONS.id,
         baseURL: configFileOpts.baseURL,
-        schemaLocation: cliOpts.schema,
-        outputDir: join(DEFAULT_OPTIONS.rootPath, configFileOpts.baseURL!),
-        linkRoot: DEFAULT_OPTIONS.linkRoot,
-        homepageLocation: DEFAULT_OPTIONS.homepage,
+        customDirective: DEFAULT_OPTIONS.customDirective,
         diffMethod: DEFAULT_OPTIONS.diffMethod,
-        tmpDir: DEFAULT_OPTIONS.tmpDir,
-        loaders: configFileOpts.loaders,
+        docOptions: DEFAULT_OPTIONS.docOptions,
         groupByDirective: undefined,
+        homepageLocation: DEFAULT_OPTIONS.homepage,
+        id: DEFAULT_OPTIONS.id,
+        linkRoot: DEFAULT_OPTIONS.linkRoot,
+        loaders: configFileOpts.loaders,
+        onlyDocDirective: DEFAULT_OPTIONS.onlyDocDirective,
+        outputDir: join(DEFAULT_OPTIONS.rootPath, configFileOpts.baseURL!),
         prettify: cliOpts.pretty,
-        docOptions: DEFAULT_OPTIONS.docOptions,
-        printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
         printer: DEFAULT_OPTIONS.printer,
+        printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
+        schemaLocation: cliOpts.schema,
         skipDocDirective: DEFAULT_OPTIONS.skipDocDirective,
-        customDirective: DEFAULT_OPTIONS.customDirective,
+        tmpDir: DEFAULT_OPTIONS.tmpDir,
       });
     });
 
@@ -320,22 +387,23 @@ describe("config", () => {
       const input = await buildConfig({ loaders: {} }, cliOpts);
 
       expect(input).toStrictEqual({
-        id: DEFAULT_OPTIONS.id,
         baseURL: DEFAULT_OPTIONS.baseURL,
-        schemaLocation: DEFAULT_OPTIONS.schema,
-        outputDir: join(DEFAULT_OPTIONS.rootPath, DEFAULT_OPTIONS.baseURL),
-        linkRoot: DEFAULT_OPTIONS.linkRoot,
-        homepageLocation: DEFAULT_OPTIONS.homepage,
+        customDirective: DEFAULT_OPTIONS.customDirective,
         diffMethod: DiffMethod.FORCE as TypeDiffMethod,
-        tmpDir: DEFAULT_OPTIONS.tmpDir,
-        loaders: {},
+        docOptions: DEFAULT_OPTIONS.docOptions,
         groupByDirective: DEFAULT_OPTIONS.groupByDirective,
+        homepageLocation: DEFAULT_OPTIONS.homepage,
+        id: DEFAULT_OPTIONS.id,
+        linkRoot: DEFAULT_OPTIONS.linkRoot,
+        loaders: {},
+        onlyDocDirective: DEFAULT_OPTIONS.onlyDocDirective,
+        outputDir: join(DEFAULT_OPTIONS.rootPath, DEFAULT_OPTIONS.baseURL),
         prettify: DEFAULT_OPTIONS.pretty,
-        docOptions: DEFAULT_OPTIONS.docOptions,
-        printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
         printer: DEFAULT_OPTIONS.printer,
+        printTypeOptions: DEFAULT_OPTIONS.printTypeOptions,
+        schemaLocation: DEFAULT_OPTIONS.schema,
         skipDocDirective: DEFAULT_OPTIONS.skipDocDirective,
-        customDirective: DEFAULT_OPTIONS.customDirective,
+        tmpDir: DEFAULT_OPTIONS.tmpDir,
       });
     });
   });
@@ -455,7 +523,9 @@ describe("config", () => {
       const descriptor = (
         _: GraphQLDirective,
         constDirectiveType: GraphQLDirective,
-      ): string => `Test${constDirectiveType.name}`;
+      ): string => {
+        return `Test${constDirectiveType.name}`;
+      };
       const options = {
         testA: { descriptor },
         testB: { descriptor },
diff --git a/packages/core/tests/unit/generator.test.ts b/packages/core/tests/unit/generator.test.ts
index 05fc9b64..9d0f4a76 100644
--- a/packages/core/tests/unit/generator.test.ts
+++ b/packages/core/tests/unit/generator.test.ts
@@ -8,6 +8,8 @@ import type {
   SchemaMap,
 } from "@graphql-markdown/types";
 
+import { GraphQLDirective } from "graphql";
+
 import * as GraphQL from "@graphql-markdown/graphql";
 jest.mock("@graphql-markdown/graphql", () => {
   return {
@@ -53,8 +55,9 @@ describe("generator", () => {
       },
       prettify: true,
       printer: "printer module",
-      skipDocDirective: "doc directive",
-    } as unknown as GeneratorOptions;
+      skipDocDirective: ["docDirective"],
+      onlyDocDirective: [],
+    } as GeneratorOptions;
 
     beforeAll(() => {
       Object.assign(global, { logger: global.console });
@@ -75,14 +78,18 @@ describe("generator", () => {
       delete global.logger;
     });
 
+    const getDirective = (name: string): GraphQLDirective => {
+      return new GraphQLDirective({ name, locations: [] });
+    };
+
     test("passes options to Printer and Renderer", async () => {
       jest.spyOn(CoreDiff, "hasChanges").mockResolvedValueOnce(true);
       jest
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest
-        .spyOn(GraphQL, "loadSchema")
-        .mockResolvedValueOnce({} as GraphQLSchema);
+      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+        getDirective,
+      } as unknown as GraphQLSchema);
       jest
         .spyOn(GraphQL, "getSchemaMap")
         .mockReturnValueOnce({ objects: {} } as SchemaMap);
@@ -101,13 +108,16 @@ describe("generator", () => {
         {
           baseURL: options.baseURL,
           linkRoot: options.linkRoot,
-          schema: {},
+          schema: { getDirective },
         },
         {
           customDirectives: undefined,
           groups: undefined,
           printTypeOptions: options.printTypeOptions,
-          skipDocDirective: options.skipDocDirective,
+          onlyDocDirectives: [],
+          skipDocDirectives: [
+            expect.objectContaining({ name: "docDirective" }),
+          ],
         },
       );
       expect(rendererSpy).toHaveBeenCalledWith(
@@ -130,9 +140,9 @@ describe("generator", () => {
       jest
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest
-        .spyOn(GraphQL, "loadSchema")
-        .mockResolvedValueOnce({} as GraphQLSchema);
+      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+        getDirective,
+      } as unknown as GraphQLSchema);
       jest
         .spyOn(GraphQL, "getSchemaMap")
         .mockReturnValueOnce({ objects: {} } as SchemaMap);
@@ -168,7 +178,11 @@ describe("generator", () => {
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce(undefined);
       const loggerSpy = jest.spyOn(console, "error");
-      const loadSchemaSpy = jest.spyOn(GraphQL, "loadSchema");
+      const loadSchemaSpy = jest
+        .spyOn(GraphQL, "loadSchema")
+        .mockResolvedValueOnce({
+          getDirective,
+        } as unknown as GraphQLSchema);
 
       await generateDocFromSchema({} as unknown as GeneratorOptions);
 
@@ -185,9 +199,9 @@ describe("generator", () => {
       jest
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest
-        .spyOn(GraphQL, "loadSchema")
-        .mockResolvedValueOnce({} as GraphQLSchema);
+      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+        getDirective,
+      } as unknown as GraphQLSchema);
       jest
         .spyOn(GraphQL, "getSchemaMap")
         .mockReturnValueOnce({ objects: {} } as SchemaMap);
@@ -198,7 +212,11 @@ describe("generator", () => {
 
       await generateDocFromSchema(options);
 
-      expect(hasChangesSpy).toHaveBeenCalledWith({}, "temp dir", "diff method");
+      expect(hasChangesSpy).toHaveBeenCalledWith(
+        { getDirective },
+        "temp dir",
+        "diff method",
+      );
       expect(loggerSpy).not.toHaveBeenCalledWith(
         `No changes detected in schema "schema location".`,
       );
@@ -210,9 +228,9 @@ describe("generator", () => {
       jest
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest
-        .spyOn(GraphQL, "loadSchema")
-        .mockResolvedValueOnce({} as GraphQLSchema);
+      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+        getDirective,
+      } as unknown as GraphQLSchema);
       jest
         .spyOn(GraphQL, "getSchemaMap")
         .mockReturnValueOnce({ objects: {} } as SchemaMap);
@@ -232,9 +250,9 @@ describe("generator", () => {
       jest
         .spyOn(GraphQL, "getDocumentLoaders")
         .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest
-        .spyOn(GraphQL, "loadSchema")
-        .mockResolvedValueOnce({} as GraphQLSchema);
+      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+        getDirective,
+      } as unknown as GraphQLSchema);
       jest
         .spyOn(GraphQL, "getSchemaMap")
         .mockReturnValueOnce({ objects: {} } as SchemaMap);
@@ -245,7 +263,11 @@ describe("generator", () => {
 
       await generateDocFromSchema(options);
 
-      expect(hasChangesSpy).toHaveBeenCalledWith({}, "temp dir", "diff method");
+      expect(hasChangesSpy).toHaveBeenCalledWith(
+        { getDirective },
+        "temp dir",
+        "diff method",
+      );
       expect(loggerSpy).toHaveBeenCalledWith(
         `No changes detected in schema "schema location".`,
       );
diff --git a/packages/graphql/tests/unit/directive.test.ts b/packages/graphql/tests/unit/directive.test.ts
index 7510897c..168884ae 100644
--- a/packages/graphql/tests/unit/directive.test.ts
+++ b/packages/graphql/tests/unit/directive.test.ts
@@ -1,8 +1,12 @@
-import type { GraphQLDirective, GraphQLNamedType } from "graphql";
+import { GraphQLDirective, buildSchema } from "graphql";
 
-import { buildSchema } from "graphql";
-
-import type { DirectiveName, CustomDirective } from "@graphql-markdown/types";
+import type {
+  DirectiveName,
+  CustomDirective,
+  CustomDirectiveFunction,
+  Maybe,
+  CustomDirectiveMap,
+} from "@graphql-markdown/types";
 
 import * as Directives from "../../src/directive";
 const {
@@ -30,19 +34,21 @@ describe("directive", () => {
     }
   `);
 
-  const descriptor = (
-    directiveType: GraphQLNamedType,
-    constDirectiveType: GraphQLDirective,
-  ): string => `Test ${constDirectiveType.name}`;
-  const wildcard = (
-    directiveType: GraphQLNamedType,
-    constDirectiveType: GraphQLDirective,
-  ): string => `TestWildcard ${constDirectiveType.name}`;
-  const customDirectiveOptions = {
-    testA: {
+  const descriptor: CustomDirectiveFunction = (
+    directive: Maybe<GraphQLDirective>,
+  ): string => {
+    return `Test ${directive!.name}`;
+  };
+  const wildcard: CustomDirectiveFunction = (
+    directive: Maybe<GraphQLDirective>,
+  ): string => {
+    return `TestWildcard ${directive!.name}`;
+  };
+  const customDirectiveOptions: CustomDirective = {
+    ["testA" as DirectiveName]: {
       descriptor,
     },
-    nonExist: {
+    ["nonExist" as DirectiveName]: {
       descriptor,
     },
   };
@@ -89,16 +95,16 @@ describe("directive", () => {
       const descriptorDirective = getCustomDirectiveOptions(
         "testA" as DirectiveName,
         {
-          ["*" as DirectiveName]: { descriptor: wildcard } as CustomDirective,
+          ["*" as DirectiveName]: { descriptor: wildcard },
           ...customDirectiveOptions,
         },
       )!;
 
       expect(descriptorDirective.descriptor).toBeDefined();
 
-      expect(
-        descriptorDirective.descriptor!(undefined, schemaMap.directives.testA),
-      ).toBe("Test testA");
+      expect(descriptorDirective.descriptor!(schemaMap.directives.testA)).toBe(
+        "Test testA",
+      );
     });
 
     test("returns wildcard description if wildcard match", () => {
@@ -107,16 +113,16 @@ describe("directive", () => {
       const descriptorDirective = getCustomDirectiveOptions(
         "testB" as DirectiveName,
         {
-          ["*" as DirectiveName]: { descriptor: wildcard } as CustomDirective,
+          ["*" as DirectiveName]: { descriptor: wildcard },
           ...customDirectiveOptions,
         },
       )!;
 
       expect(descriptorDirective.descriptor).toBeDefined();
 
-      expect(
-        descriptorDirective.descriptor!(undefined, schemaMap.directives.testB),
-      ).toBe("TestWildcard testB");
+      expect(descriptorDirective.descriptor!(schemaMap.directives.testB)).toBe(
+        "TestWildcard testB",
+      );
     });
 
     test("returns undefined if no match", () => {
@@ -170,7 +176,6 @@ describe("directive", () => {
       `);
       expect(
         customDirectives["testA" as DirectiveName].descriptor!(
-          undefined,
           schemaMap.directives.testA,
         ),
       ).toBe("Test testA");
@@ -204,14 +209,12 @@ describe("directive", () => {
 
       expect(
         customDirectives["testA" as DirectiveName].descriptor!(
-          undefined,
           schemaMap.directives.testA,
         ),
       ).toBe("TestWildcard testA");
 
       expect(
         customDirectives["testB" as DirectiveName].descriptor!(
-          undefined,
           schemaMap.directives.testB,
         ),
       ).toBe("TestWildcard testB");
@@ -240,14 +243,12 @@ describe("directive", () => {
 
       expect(
         customDirectives["testA" as DirectiveName].descriptor!(
-          undefined,
           schemaMap.directives.testA,
         ),
       ).toBe("Test testA");
 
       expect(
         customDirectives["testB" as DirectiveName].descriptor!(
-          undefined,
           schemaMap.directives.testB,
         ),
       ).toBe("TestWildcard testB");
@@ -284,18 +285,19 @@ describe("directive", () => {
     `);
     const type = schema.getType("Test")!;
     const typeWithoutDirective = schema.getType("TestWithoutDirective")!;
-    const descriptor = (
-      directiveType: GraphQLNamedType,
-      constDirectiveType: GraphQLDirective,
-    ): string => `Test${constDirectiveType.name}`;
-    const options = {
+    const descriptor: CustomDirectiveFunction = (
+      directive: Maybe<GraphQLDirective>,
+    ): string => {
+      return `Test${directive!.name}`;
+    };
+    const options: { customDirectives: CustomDirectiveMap } = {
       customDirectives: {
-        testA: {
-          type: schema.getDirective("testA"),
+        ["testA" as DirectiveName]: {
+          type: schema.getDirective("testA")!,
           descriptor,
         },
-        nonExist: {
-          type: undefined,
+        ["nonExist" as DirectiveName]: {
+          type: new GraphQLDirective({ name: "nonExist", locations: [] }),
           descriptor,
         },
       },
diff --git a/packages/graphql/tests/unit/introspection.test.ts b/packages/graphql/tests/unit/introspection.test.ts
index 74f47e4e..2a683d38 100644
--- a/packages/graphql/tests/unit/introspection.test.ts
+++ b/packages/graphql/tests/unit/introspection.test.ts
@@ -3,16 +3,19 @@ import { GraphQLFileLoader } from "@graphql-tools/graphql-file-loader";
 
 jest.mock("graphql", () => {
   const graphql = jest.requireActual("graphql");
+  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
   return {
     __esModule: true,
     ...graphql,
     getDirectiveValues: jest.fn(graphql.getDirectiveValues),
   };
 });
-import type { GraphQLSchema, ObjectTypeDefinitionNode } from "graphql";
+import type { GraphQLSchema, ObjectTypeDefinitionNode, ASTNode } from "graphql";
 import {
   buildSchema,
+  DirectiveLocation,
   getDirectiveValues,
+  GraphQLDirective,
   GraphQLEnumType,
   GraphQLInputObjectType,
   GraphQLInterfaceType,
@@ -20,6 +23,7 @@ import {
   GraphQLScalarType,
   GraphQLUnionType,
   isDirective,
+  Kind,
 } from "graphql";
 
 import {
@@ -32,6 +36,8 @@ import {
   getTypeFromSchema,
   getTypeName,
   hasDirective,
+  isValidDirectiveLocation,
+  getDirectiveLocationForASTPath,
 } from "../../src/introspection";
 import { loadSchema } from "../../src/loader";
 
@@ -149,7 +155,11 @@ describe("introspection", () => {
     test("calls toString method when it exists", () => {
       expect.hasAssertions();
 
-      const name = getTypeName({ toString: () => "FooBar" });
+      const name = getTypeName({
+        toString: () => {
+          return "FooBar";
+        },
+      });
 
       expect(name).toBe("FooBar");
     });
@@ -287,13 +297,13 @@ describe("introspection", () => {
 
   describe("hasDirective", () => {
     const schema = buildSchema(`
-        directive @foobaz on OBJECT
+        directive @foobar on OBJECT
 
         interface Record {
           id: String!
         }
 
-        type StudyItem implements Record @foobaz {
+        type StudyItem implements Record @foobar {
           id: String!
           subject: String!
           duration: Int!
@@ -313,12 +323,21 @@ describe("introspection", () => {
         }
       `);
 
+    const foobar = new GraphQLDirective({
+      name: "foobar",
+      locations: [DirectiveLocation.SUBSCRIPTION, DirectiveLocation.OBJECT],
+    });
+    const foobaz = new GraphQLDirective({
+      name: "foobaz",
+      locations: [DirectiveLocation.SUBSCRIPTION],
+    });
+
     test("return false if the type has no directive", () => {
       expect.hasAssertions();
 
       const type = schema.getType("Subscription")!;
 
-      expect(hasDirective(type, "foobar")).toBeFalsy();
+      expect(hasDirective(type, [foobar])).toBeFalsy();
     });
 
     test("return false if directives not defined", () => {
@@ -334,7 +353,7 @@ describe("introspection", () => {
 
       const type = schema.getType("StudyItem")!;
 
-      expect(hasDirective(type, "foobar")).toBeFalsy();
+      expect(hasDirective(type, [foobaz])).toBeFalsy();
     });
 
     test("return true if the type has matching directive", () => {
@@ -342,7 +361,7 @@ describe("introspection", () => {
 
       const type = schema.getType("StudyItem")!;
 
-      expect(hasDirective(type, "foobaz")).toBeTruthy();
+      expect(hasDirective(type, [foobar])).toBeTruthy();
     });
 
     test("return true if the type has one matching directive", () => {
@@ -350,7 +369,15 @@ describe("introspection", () => {
 
       const type = schema.getType("StudyItem")!;
 
-      expect(hasDirective(type, ["foobar", "foobaz"])).toBeTruthy();
+      expect(hasDirective(type, [foobar, foobaz])).toBeTruthy();
+    });
+
+    test("return true if the type is not a valid directive location and checkLocation is true", () => {
+      expect.hasAssertions();
+
+      const type = schema.getType("Record")!;
+
+      expect(hasDirective(type, [foobar, foobaz], true)).toBeTruthy();
     });
   });
 
@@ -382,11 +409,20 @@ describe("introspection", () => {
       }
     `);
 
+    const foobar = new GraphQLDirective({
+      name: "foobar",
+      locations: [],
+    });
+    const foobaz = new GraphQLDirective({
+      name: "foobaz",
+      locations: [],
+    });
+
     test("return empty list if the type has no directive", () => {
       expect.hasAssertions();
 
       const type = schema.getType("Subscription")!;
-      const actual = getDirective(type, "foobar");
+      const actual = getDirective(type, [foobar]);
 
       expect(actual).toHaveLength(0);
     });
@@ -404,7 +440,7 @@ describe("introspection", () => {
       expect.hasAssertions();
 
       const type = schema.getType("StudyItem")!;
-      const actual = getDirective(type, "foobar");
+      const actual = getDirective(type, [foobar]);
 
       expect(actual).toHaveLength(0);
     });
@@ -413,7 +449,7 @@ describe("introspection", () => {
       expect.hasAssertions();
 
       const type = schema.getType("StudyItem")!;
-      const actual = getDirective(type, "foobaz");
+      const actual = getDirective(type, [foobaz]);
 
       expect(actual).toHaveLength(1);
       expect(actual[0].toString()).toBe("@foobaz");
@@ -424,7 +460,7 @@ describe("introspection", () => {
       expect.hasAssertions();
 
       const type = schema.getType("StudyItem")!;
-      const actual = getDirective(type, ["foobar", "foobaz"]);
+      const actual = getDirective(type, [foobar, foobaz]);
 
       expect(actual).toHaveLength(1);
       expect(actual[0].toString()).toBe("@foobaz");
@@ -484,7 +520,9 @@ describe("introspection", () => {
       const directiveType = schema.getDirective(directiveName)!;
       const typeFieldNode = (
         type.astNode! as ObjectTypeDefinitionNode
-      ).fields!.find((field) => field.name.value === "fieldA")!;
+      ).fields!.find((field) => {
+        return field.name.value === "fieldA";
+      })!;
       const argName = "argC";
 
       expect(getTypeDirectiveArgValue(directiveType, typeFieldNode, argName))
@@ -502,7 +540,9 @@ describe("introspection", () => {
       const directiveType = schema.getDirective(directiveName)!;
       const typeFieldNode = (
         type.astNode! as ObjectTypeDefinitionNode
-      ).fields!.find((field) => field.name.value === "fieldA")!;
+      ).fields!.find((field) => {
+        return field.name.value === "fieldA";
+      })!;
       const argName = "argB";
 
       expect(getTypeDirectiveArgValue(directiveType, typeFieldNode, argName))
@@ -520,7 +560,9 @@ describe("introspection", () => {
       const directiveType = schema.getDirective(directiveName)!;
       const typeFieldNode = (
         type.astNode! as ObjectTypeDefinitionNode
-      ).fields!.find((field) => field.name.value === "fieldA")!;
+      ).fields!.find((field) => {
+        return field.name.value === "fieldA";
+      })!;
       const argName = "argA";
 
       expect(
@@ -613,4 +655,143 @@ describe("introspection", () => {
       expect(values).toMatchObject({ arg: "ARGA" });
     });
   });
+
+  describe("isValidDirectiveLocation", () => {
+    const schema = buildSchema(`
+    directive @dirWithoutArg on OBJECT
+
+    directive @testA(
+      arg: ArgEnum = ARGA
+    ) on OBJECT | FIELD_DEFINITION
+
+    directive @testB(
+      argA: Int!, 
+      argB: [String!]
+      argC: TestInput
+    ) on FIELD_DEFINITION
+
+    enum ArgEnum {
+      ARGA
+      ARGB
+      ARGC
+    }
+
+    type Test @testA @dirWithoutArg {
+      id: ID!
+      fieldA: [String!] 
+        @testA(arg: ARGC) 
+        @testB(argA: 10, argB: ["testArgB"], argC: { id: "input-id" })
+    }
+
+    input TestInput {
+      id: ID!
+    }
+  `);
+
+    test("returns false if entity location is not a valid directive location", () => {
+      expect.assertions(1);
+
+      expect(
+        isValidDirectiveLocation(
+          schema.getType("ArgEnum"),
+          schema.getDirective("testA")!,
+        ),
+      ).toBeFalsy();
+    });
+
+    test("returns true if entity location is a valid directive location", () => {
+      expect.assertions(1);
+
+      expect(
+        isValidDirectiveLocation(
+          schema.getType("Test"),
+          schema.getDirective("testA")!,
+        ),
+      ).toBeTruthy();
+    });
+
+    test("returns false if entity has no astNode definition", () => {
+      expect.assertions(1);
+
+      expect(
+        isValidDirectiveLocation({}, schema.getDirective("testA")!),
+      ).toBeFalsy();
+    });
+  });
+
+  describe("getDirectiveLocationForASTPath", () => {
+    const schema = buildSchema(`
+    directive @directiveTest on OBJECT
+
+    enum ArgEnum {
+      ARGA
+      ARGB
+      ARGC
+    }
+
+    type TestObject {
+      id: ID!
+      fieldA: [String!] 
+    }
+
+    input TestInput {
+      id: ID!
+    }
+
+    interface TestInterface {
+      id: String!
+    }
+
+    union TestUnion = ID | String 
+
+    scalar JSON
+  `);
+
+    test.each([
+      {
+        entity: schema.getType("ArgEnum"),
+        location: DirectiveLocation.ENUM,
+      },
+      {
+        entity: schema.getType("TestObject"),
+        location: DirectiveLocation.OBJECT,
+      },
+      {
+        entity: schema.getType("TestInput"),
+        location: DirectiveLocation.INPUT_OBJECT,
+      },
+      {
+        entity: schema.getType("TestInterface"),
+        location: DirectiveLocation.INTERFACE,
+      },
+      {
+        entity: schema.getType("TestUnion"),
+        location: DirectiveLocation.UNION,
+      },
+      {
+        entity: schema.getType("JSON"),
+        location: DirectiveLocation.SCALAR,
+      },
+    ])("returns directive location", ({ entity, location }) => {
+      expect.assertions(1);
+
+      expect(getDirectiveLocationForASTPath(entity?.astNode)).toBe(location);
+    });
+
+    test.each([
+      [{}],
+      [undefined],
+      [
+        {
+          appliedTo: Kind.DIRECTIVE,
+        },
+      ],
+    ])("throws on unsupported entity", (node: unknown) => {
+      expect.assertions(1);
+
+      expect(() => {
+        return getDirectiveLocationForASTPath(node as ASTNode);
+      }).toThrow();
+    });
+  });
 });
diff --git a/packages/printer-legacy/tests/unit/common.test.ts b/packages/printer-legacy/tests/unit/common.test.ts
index 456baabd..1a245fce 100644
--- a/packages/printer-legacy/tests/unit/common.test.ts
+++ b/packages/printer-legacy/tests/unit/common.test.ts
@@ -1,18 +1,43 @@
+import type { ConstDirectiveNode } from "graphql";
 import {
   DirectiveLocation,
   GraphQLDirective,
+  GraphQLEnumType,
   GraphQLScalarType,
+  Kind,
 } from "graphql";
 
 import {
+  hasPrintableDirective,
   printCustomDirectives,
   printDeprecation,
   printDescription,
 } from "../../src/common";
 
 import { DEFAULT_OPTIONS } from "../../src/const/options";
+import type { PrintTypeOptions } from "@graphql-markdown/types";
+
+import * as GraphQL from "@graphql-markdown/graphql";
+jest.mock("@graphql-markdown/graphql", () => {
+  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+  return {
+    ...jest.requireActual("@graphql-markdown/graphql"),
+    isDeprecated: jest.fn(),
+    hasDirective: jest.fn(),
+  };
+});
+const mockGraphQL = jest.mocked(GraphQL, { shallow: true });
 
 describe("common", () => {
+  beforeEach(() => {
+    mockGraphQL.isDeprecated.mockReturnValue(false);
+  });
+
+  afterAll(() => {
+    jest.resetAllMocks();
+    jest.restoreAllMocks();
+  });
+
   describe("printDescription()", () => {
     test("returns the type description text", () => {
       expect.hasAssertions();
@@ -98,6 +123,8 @@ describe("common", () => {
     });
 
     test("return DEPRECATED tag if deprecated", () => {
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+
       const type = {
         description: "Lorem ipsum",
         isDeprecated: true,
@@ -141,8 +168,9 @@ describe("common", () => {
         customDirectives: {
           testDirective: {
             type: directiveType,
-            descriptor: (directive: GraphQLDirective): string =>
-              `Test ${directive.name}`,
+            descriptor: (directive: GraphQLDirective): string => {
+              return `Test ${directive.name}`;
+            },
           },
         },
       };
@@ -163,6 +191,8 @@ describe("common", () => {
     test("prints deprecated badge if type is deprecated", () => {
       expect.hasAssertions();
 
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+
       const type = {
         name: "EntityTypeName",
         isDeprecated: true,
@@ -180,6 +210,8 @@ describe("common", () => {
     test("prints deprecation reason if type is deprecated with reason", () => {
       expect.hasAssertions();
 
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+
       const type = {
         name: "EntityTypeName",
         isDeprecated: true,
@@ -245,8 +277,9 @@ describe("common", () => {
         customDirectives: {
           testDirective: {
             type: directiveType,
-            descriptor: (directive: GraphQLDirective): string =>
-              `Test ${directive.name}`,
+            descriptor: (directive: GraphQLDirective): string => {
+              return `Test ${directive.name}`;
+            },
           },
         },
       };
@@ -260,4 +293,186 @@ Test testDirective"
 `);
     });
   });
+
+  describe("hasPrintableDirective", () => {
+    const noDocDirective = new GraphQLDirective({
+      name: "noDoc",
+      locations: [DirectiveLocation.ENUM],
+      astNode: {
+        kind: Kind.DIRECTIVE_DEFINITION,
+        name: { kind: Kind.NAME, value: "noDoc" },
+        repeatable: false,
+        locations: [],
+      },
+    });
+    const publicDirective = new GraphQLDirective({
+      name: "public",
+      locations: [DirectiveLocation.ENUM],
+      astNode: {
+        kind: Kind.DIRECTIVE_DEFINITION,
+        name: { kind: Kind.NAME, value: "public" },
+        repeatable: false,
+        locations: [],
+      },
+    });
+    const docDirective = new GraphQLDirective({
+      name: "doc",
+      locations: [DirectiveLocation.OBJECT],
+      astNode: {
+        kind: Kind.DIRECTIVE_DEFINITION,
+        name: { kind: Kind.NAME, value: "doc" },
+        repeatable: false,
+        locations: [],
+      },
+    });
+    const enumType = new GraphQLEnumType({
+      name: "test",
+      values: {
+        RED: { value: 0 },
+        GREEN: { value: 1 },
+        BLUE: { value: 2 },
+      },
+      astNode: {
+        kind: Kind.ENUM_TYPE_DEFINITION,
+        name: { kind: Kind.NAME, value: "test" },
+        directives: [
+          {
+            ...publicDirective.astNode,
+            kind: Kind.DIRECTIVE,
+          } as ConstDirectiveNode,
+        ],
+      },
+    });
+
+    test.each([
+      { options: undefined },
+      {
+        options: {
+          skipDocDirectives: undefined,
+          onlyDocDirectives: undefined,
+          deprecated: undefined,
+        },
+      },
+      {
+        options: {},
+      },
+    ])("return true if no option set", ({ options }) => {
+      expect.assertions(1);
+
+      expect(
+        hasPrintableDirective({}, options as unknown as PrintTypeOptions),
+      ).toBeTruthy();
+    });
+
+    test("return false if type undefined", () => {
+      expect.assertions(1);
+
+      expect(hasPrintableDirective(undefined, {})).toBeFalsy();
+    });
+
+    test("return false if type has skip directive", () => {
+      expect.assertions(1);
+
+      const options = {
+        skipDocDirectives: [noDocDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(false);
+      mockGraphQL.hasDirective.mockReturnValue(true);
+
+      expect(hasPrintableDirective(enumType, options)).toBeFalsy();
+    });
+
+    test("return true if type has not skip directive", () => {
+      expect.assertions(1);
+
+      const options = {
+        skipDocDirectives: [noDocDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(false);
+      mockGraphQL.hasDirective.mockReturnValue(false);
+
+      expect(hasPrintableDirective(enumType, options)).toBeTruthy();
+    });
+
+    test("return false if type has skip deprecated", () => {
+      expect.assertions(1);
+
+      const options = {
+        deprecated: "skip",
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+      mockGraphQL.hasDirective.mockReturnValue(true);
+
+      expect(hasPrintableDirective(enumType, options)).toBeFalsy();
+    });
+
+    test("return true if type has not skip deprecated", () => {
+      expect.assertions(1);
+
+      const options = {
+        deprecated: "default",
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+      mockGraphQL.hasDirective.mockReturnValue(true);
+
+      expect(hasPrintableDirective(enumType, options)).toBeTruthy();
+    });
+
+    test("return true if type has only directive", () => {
+      expect.assertions(1);
+
+      const options = {
+        onlyDocDirectives: [publicDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(false);
+      mockGraphQL.hasDirective.mockImplementation(
+        jest.requireActual("@graphql-markdown/graphql").hasDirective,
+      );
+
+      expect(hasPrintableDirective(enumType, options)).toBeTruthy();
+    });
+
+    test("return false if type has not only directive and type is a valid location", () => {
+      expect.assertions(1);
+
+      const options = {
+        onlyDocDirectives: [noDocDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(false);
+      mockGraphQL.hasDirective.mockImplementation(
+        jest.requireActual("@graphql-markdown/graphql").hasDirective,
+      );
+
+      expect(hasPrintableDirective(enumType, options)).toBeFalsy();
+    });
+
+    test("return true if type has not only directive and type is not a valid location", () => {
+      expect.assertions(1);
+
+      const options = {
+        onlyDocDirectives: [docDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(false);
+      mockGraphQL.hasDirective.mockImplementation(
+        jest.requireActual("@graphql-markdown/graphql").hasDirective,
+      );
+
+      expect(hasPrintableDirective(enumType, options)).toBeTruthy();
+    });
+
+    test("return false if type has only directive and skip deprecated", () => {
+      expect.assertions(1);
+
+      const options = {
+        deprecated: "skip",
+        onlyDocDirectives: [publicDirective],
+      } as unknown as PrintTypeOptions;
+      mockGraphQL.isDeprecated.mockReturnValue(true);
+      mockGraphQL.hasDirective.mockImplementation(
+        jest.requireActual("@graphql-markdown/graphql").hasDirective,
+      );
+
+      expect(hasPrintableDirective(enumType, options)).toBeFalsy();
+    });
+  });
 });
diff --git a/packages/printer-legacy/tests/unit/link.test.ts b/packages/printer-legacy/tests/unit/link.test.ts
index 783c19c7..8f0b3112 100644
--- a/packages/printer-legacy/tests/unit/link.test.ts
+++ b/packages/printer-legacy/tests/unit/link.test.ts
@@ -8,14 +8,16 @@ import {
 
 import type { PrintLinkOptions, TypeLocale } from "@graphql-markdown/types";
 
+import * as Utils from "@graphql-markdown/utils";
 jest.mock("@graphql-markdown/utils", () => {
   return {
     slugify: jest.fn(),
     pathUrl: jest.requireActual("path").posix,
   };
 });
-import * as Utils from "@graphql-markdown/utils";
+const mockUtils = jest.mocked(Utils);
 
+import * as GraphQL from "@graphql-markdown/graphql";
 jest.mock("@graphql-markdown/graphql", () => {
   return {
     hasDirective: jest.fn(),
@@ -35,16 +37,22 @@ jest.mock("@graphql-markdown/graphql", () => {
     isDeprecated: jest.fn(),
   };
 });
-import * as GraphQL from "@graphql-markdown/graphql";
+const mockGraphQL = jest.mocked(GraphQL);
 
 import { DEFAULT_OPTIONS } from "../../src/const/options";
 
+import * as Group from "../../src/group";
 jest.mock("../../src/group", () => {
-  return { getGroup: jest.fn(() => "") };
+  return {
+    getGroup: jest.fn(() => {
+      return "";
+    }),
+  };
 });
-import * as Group from "../../src/group";
+const mockGroup = jest.mocked(Group);
 
 import * as Link from "../../src/link";
+import * as Common from "../../src/common";
 
 describe("link", () => {
   const basePath: string = "docs/graphql";
@@ -105,7 +113,11 @@ describe("link", () => {
     test.each(types)(
       "returns a category object matching the graphLQLNamedType $name",
       ({ guard }) => {
-        jest.spyOn(GraphQL, guard).mockReturnValueOnce(true);
+        expect.assertions(1);
+
+        jest.spyOn(Common, "hasPrintableDirective").mockReturnValue(true);
+
+        mockGraphQL[guard].mockReturnValueOnce(true);
 
         const category = Link.getLinkCategory(
           {} as unknown as GraphQLNamedType,
@@ -116,6 +128,8 @@ describe("link", () => {
     );
 
     test("returns undefined if unknown", () => {
+      expect.assertions(1);
+
       const category = Link.getLinkCategory({} as unknown as GraphQLNamedType);
 
       expect(category).toBeUndefined();
@@ -124,7 +138,8 @@ describe("link", () => {
 
   describe("toLink()", () => {
     beforeEach(() => {
-      jest.spyOn(Group, "getGroup").mockReturnValue("");
+      mockGroup.getGroup.mockReturnValue("");
+      jest.spyOn(Common, "hasPrintableDirective").mockReturnValue(true);
     });
 
     test.each(types)(
@@ -139,11 +154,11 @@ describe("link", () => {
           locations: [],
         });
 
-        jest
-          .spyOn(GraphQL, "getNamedType")
-          .mockReturnValue(entityName as unknown as GraphQLNamedType);
-        jest.spyOn(GraphQL, guard).mockReturnValue(true);
-        jest.spyOn(Utils, "slugify").mockReturnValueOnce(slug);
+        mockGraphQL.getNamedType.mockReturnValue(
+          entityName as unknown as GraphQLNamedType,
+        );
+        mockGraphQL[guard].mockReturnValue(true);
+        mockUtils.slugify.mockReturnValueOnce(slug);
 
         const link = Link.toLink(type, entityName, operation, {
           ...DEFAULT_OPTIONS,
@@ -166,11 +181,11 @@ describe("link", () => {
         }),
       );
 
-      jest
-        .spyOn(GraphQL, "getNamedType")
-        .mockReturnValue(entityName as unknown as GraphQLNamedType);
-      jest.spyOn(GraphQL, "isObjectType").mockReturnValue(true);
-      jest.spyOn(Utils, "slugify").mockReturnValueOnce(slug);
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL.isObjectType.mockReturnValue(true);
+      mockUtils.slugify.mockReturnValueOnce(slug);
 
       const link = Link.toLink(type, entityName, undefined, {
         ...DEFAULT_OPTIONS,
@@ -204,6 +219,34 @@ describe("link", () => {
       `);
     });
 
+    test("returns plain text for type without printable directive", () => {
+      expect.hasAssertions();
+
+      const entityName = `Test`;
+      const type = new GraphQLDirective({
+        name: entityName,
+        locations: [],
+      });
+
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL[TypeGuard.DIRECTIVE].mockReturnValue(true);
+      jest.spyOn(Common, "hasPrintableDirective").mockReturnValueOnce(false);
+
+      const link = Link.toLink(type, entityName, undefined, {
+        ...DEFAULT_OPTIONS,
+        basePath,
+      });
+
+      expect(link).toMatchInlineSnapshot(`
+        {
+          "text": "Test",
+          "url": "#",
+        }
+      `);
+    });
+
     test("returns markdown link with group in path", () => {
       expect.hasAssertions();
 
@@ -214,12 +257,12 @@ describe("link", () => {
         locations: [],
       });
 
-      jest
-        .spyOn(GraphQL, "getNamedType")
-        .mockReturnValue(entityName as unknown as GraphQLNamedType);
-      jest.spyOn(GraphQL, "isDirectiveType").mockReturnValue(true);
-      jest.spyOn(Utils, "slugify").mockReturnValueOnce(slug);
-      jest.spyOn(Group, "getGroup").mockReturnValueOnce("group");
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL.isDirectiveType.mockReturnValue(true);
+      mockUtils.slugify.mockReturnValueOnce(slug);
+      mockGroup.getGroup.mockReturnValueOnce("group");
 
       const link = Link.toLink(type, entityName, undefined, {
         ...DEFAULT_OPTIONS,
@@ -245,12 +288,12 @@ describe("link", () => {
         locations: [],
       });
 
-      jest
-        .spyOn(GraphQL, "getNamedType")
-        .mockReturnValue(entityName as unknown as GraphQLNamedType);
-      jest.spyOn(GraphQL, "isDirectiveType").mockReturnValue(true);
-      jest.spyOn(Utils, "slugify").mockReturnValueOnce(slug);
-      jest.spyOn(GraphQL, "isDeprecated").mockReturnValue(true);
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL.isDirectiveType.mockReturnValue(true);
+      mockUtils.slugify.mockReturnValueOnce(slug);
+      mockGraphQL.isDeprecated.mockReturnValue(true);
 
       const link = Link.toLink(type, entityName, undefined, {
         ...DEFAULT_OPTIONS,
@@ -291,7 +334,7 @@ describe("link", () => {
     test("calls recursively if not a leaf node", () => {
       expect.hasAssertions();
 
-      jest.spyOn(GraphQL, "isLeafType").mockReturnValueOnce(false);
+      mockGraphQL.isLeafType.mockReturnValueOnce(false);
 
       const type = { ofType: "test" };
       const text = "baz";
@@ -304,7 +347,7 @@ describe("link", () => {
     test("returns a format [text] if type is list", () => {
       expect.hasAssertions();
 
-      jest.spyOn(GraphQL, "isListType").mockReturnValueOnce(true);
+      mockGraphQL.isListType.mockReturnValueOnce(true);
 
       const type = { ofType: "test" };
       const text = "baz";
@@ -317,7 +360,7 @@ describe("link", () => {
     test("returns a format text! if type is non-null", () => {
       expect.hasAssertions();
 
-      jest.spyOn(GraphQL, "isNonNullType").mockReturnValueOnce(true);
+      mockGraphQL.isNonNullType.mockReturnValueOnce(true);
 
       const type = { ofType: "test" };
       const text = "baz";
@@ -490,11 +533,13 @@ describe("link", () => {
         name: entityName,
       });
 
-      jest
-        .spyOn(GraphQL, "getNamedType")
-        .mockReturnValue(entityName as unknown as GraphQLNamedType);
-      jest.spyOn(GraphQL, "isScalarType").mockReturnValue(true);
-      jest.spyOn(Utils, "slugify").mockReturnValue(slug);
+      jest.spyOn(Common, "hasPrintableDirective").mockReturnValue(true);
+
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL.isScalarType.mockReturnValue(true);
+      mockUtils.slugify.mockReturnValue(slug);
 
       const link = Link.getRelationLink("foo", type, {
         ...DEFAULT_OPTIONS,
@@ -516,11 +561,11 @@ describe("link", () => {
         name: entityName,
       });
 
-      jest
-        .spyOn(GraphQL, "getNamedType")
-        .mockReturnValue(entityName as unknown as GraphQLNamedType);
-      jest.spyOn(GraphQL, "isScalarType").mockReturnValue(true);
-      jest.spyOn(Utils, "slugify").mockReturnValue(slug);
+      mockGraphQL.getNamedType.mockReturnValue(
+        entityName as unknown as GraphQLNamedType,
+      );
+      mockGraphQL.isScalarType.mockReturnValue(true);
+      mockUtils.slugify.mockReturnValue(slug);
 
       const link = Link.getRelationLink(undefined, type, {
         ...DEFAULT_OPTIONS,
diff --git a/packages/printer-legacy/tests/unit/printer.test.ts b/packages/printer-legacy/tests/unit/printer.test.ts
index 5863bc94..b61171d2 100644
--- a/packages/printer-legacy/tests/unit/printer.test.ts
+++ b/packages/printer-legacy/tests/unit/printer.test.ts
@@ -12,7 +12,7 @@ import {
   GraphQLSchema,
 } from "graphql";
 
-import type { DirectiveName, PrintTypeOptions } from "@graphql-markdown/types";
+import type { PrintTypeOptions } from "@graphql-markdown/types";
 
 jest.mock("@graphql-markdown/utils", () => {
   return {
@@ -43,6 +43,8 @@ import * as GraphQL from "@graphql-markdown/graphql";
 jest.mock("../../src/graphql");
 import * as GraphQLPrinter from "../../src/graphql";
 
+import * as Common from "../../src/common";
+
 import { Printer } from "../../src/printer";
 import { DEFAULT_OPTIONS } from "../../src/const/options";
 
@@ -143,9 +145,9 @@ describe("Printer", () => {
 
   beforeEach(() => {
     Printer.options = undefined;
-    jest
-      .spyOn(GraphQL, "getTypeName")
-      .mockImplementation((value) => value as string);
+    jest.spyOn(GraphQL, "getTypeName").mockImplementation((value) => {
+      return value as string;
+    });
   });
 
   afterEach(() => {
@@ -174,11 +176,12 @@ describe("Printer", () => {
             "toc": true,
           },
           "level": undefined,
+          "onlyDocDirectives": [],
           "parentType": undefined,
           "parentTypePrefix": true,
           "relatedTypeSection": true,
           "schema": undefined,
-          "skipDocDirective": undefined,
+          "skipDocDirectives": [],
           "typeBadges": true,
           "withAttributes": false,
         }
@@ -198,6 +201,11 @@ describe("Printer", () => {
     test("override values on init when options is undefined", () => {
       expect.hasAssertions();
 
+      const testDirective = new GraphQLDirective({
+        name: "test",
+        locations: [],
+      });
+
       Printer.options = undefined;
 
       Printer.init(new GraphQLSchema({}), "test", "/", {
@@ -208,7 +216,7 @@ describe("Printer", () => {
           relatedTypeSection: false,
           typeBadges: false,
         },
-        skipDocDirective: ["test" as DirectiveName],
+        skipDocDirectives: [testDirective],
       });
 
       expect(Printer.options).toMatchInlineSnapshot(`
@@ -224,6 +232,7 @@ describe("Printer", () => {
             "toc": true,
           },
           "level": undefined,
+          "onlyDocDirectives": [],
           "parentType": undefined,
           "parentTypePrefix": false,
           "relatedTypeSection": false,
@@ -257,8 +266,8 @@ describe("Printer", () => {
             "extensionASTNodes": [],
             "extensions": {},
           },
-          "skipDocDirective": [
-            "test",
+          "skipDocDirectives": [
+            "@test",
           ],
           "typeBadges": false,
           "withAttributes": false,
@@ -412,9 +421,11 @@ describe("Printer", () => {
       ({ name, type }) => {
         expect.hasAssertions();
 
-        const spies = methods.map((method) =>
-          jest.spyOn(Printer, method).mockReturnValue(""),
-        );
+        jest.spyOn(Common, "hasPrintableDirective").mockReturnValue(true);
+
+        const spies = methods.map((method) => {
+          return jest.spyOn(Printer, method).mockReturnValue("");
+        });
 
         Printer.printType(name, type);
 
@@ -440,9 +451,9 @@ describe("Printer", () => {
       expect(printedType).toBeUndefined();
     });
 
-    test("returns undefined if matches skipDocDirective", () => {
+    test("returns undefined if type has no printable directive", () => {
       expect.hasAssertions();
-      jest.spyOn(GraphQL, "hasDirective").mockReturnValue(true);
+      jest.spyOn(Common, "hasPrintableDirective").mockReturnValueOnce(false);
       const printedType = Printer.printType("any", null);
 
       expect(printedType).toBeUndefined();
diff --git a/packages/printer-legacy/tests/unit/section.test.ts b/packages/printer-legacy/tests/unit/section.test.ts
index 772d7546..98feb262 100644
--- a/packages/printer-legacy/tests/unit/section.test.ts
+++ b/packages/printer-legacy/tests/unit/section.test.ts
@@ -1,4 +1,4 @@
-import type { DirectiveName, SectionLevelValue } from "@graphql-markdown/types";
+import type { SectionLevelValue } from "@graphql-markdown/types";
 
 import {
   GraphQLNonNull,
@@ -6,6 +6,9 @@ import {
   GraphQLList,
   GraphQLObjectType,
   GraphQLString,
+  GraphQLDirective,
+  Kind,
+  DirectiveLocation,
 } from "graphql";
 
 import {
@@ -149,6 +152,11 @@ describe("section", () => {
   });
 
   describe("printSectionItem()", () => {
+    const noDoc = new GraphQLDirective({
+      name: "noDoc",
+      locations: [DirectiveLocation.FIELD],
+    });
+
     test("returns Markdown #### link section with description", () => {
       expect.hasAssertions();
 
@@ -351,13 +359,14 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`,
       const type = {
         name: "EntityTypeNameList",
         astNode: {
-          directives: [{ name: { value: "@noDoc" } }],
+          kind: Kind.FIELD,
+          directives: [{ name: { value: "noDoc", appliedTo: [Kind.FIELD] } }],
         },
       };
 
       const section = printSectionItem(type, {
         ...DEFAULT_OPTIONS,
-        skipDocDirective: ["@noDoc" as DirectiveName],
+        skipDocDirectives: [noDoc],
       });
 
       expect(section).toBe("");
@@ -370,13 +379,14 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`,
         name: "EntityTypeNameList",
         isDeprecated: true,
         astNode: {
-          directives: [{ name: { value: "@noDoc" } }],
+          kind: Kind.FIELD,
+          directives: [{ name: { value: "@noDoc" }, appliedTo: [Kind.FIELD] }],
         },
       };
 
       const section = printSectionItem(type, {
         ...DEFAULT_OPTIONS,
-        skipDocDirective: ["@noDoc" as DirectiveName],
+        skipDocDirectives: [noDoc],
         deprecated: "skip",
       });
 
@@ -394,14 +404,18 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`,
             name: "ParameterTypeName",
             type: GraphQLString,
             astNode: {
-              directives: [{ name: { value: "@doc" } }],
+              kind: Kind.FIELD,
+              directives: [{ name: { value: "doc", appliedTo: [Kind.FIELD] } }],
             },
           },
           {
             name: "ParameterSkipDoc",
             type: GraphQLString,
             astNode: {
-              directives: [{ name: { value: "@noDoc" } }],
+              kind: Kind.FIELD,
+              directives: [
+                { name: { value: "noDoc" }, appliedTo: [Kind.FIELD] },
+              ],
             },
           },
         ],
@@ -409,7 +423,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`,
 
       const section = printSectionItem(type, {
         ...DEFAULT_OPTIONS,
-        skipDocDirective: ["@noDoc" as DirectiveName],
+        skipDocDirectives: [noDoc],
       });
 
       expect(section).toMatchInlineSnapshot(`