chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore(shared,clerk-react,types): Improve Typedoc - #5372

Merged
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks
Mar 18, 2025
Merged

chore(shared,clerk-react,types): Improve Typedoc#5372
LekoArts merged 7 commits into
mainfrom
lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks

Conversation

@LekoArts

@LekoArtsLekoArts commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

Description

TL;DR: Improve the JSDoc comments of all React hooks and add additional Next.js examples to some of them. Modify the MDX output so that it can be used for rendering on clerk.com/docs

  • Format Typedoc MDX output with Prettier
  • Remove headings from certain Typedoc files
  • Add support for replacing links in Typedoc output
  • Remove type signature titles and type parameter tables from Typedoc output
  • Use {@include} JSDoc comments to add additional examples

Fixes ECO-508
Fixes ECO-424

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

@vercel

vercelBot commented Mar 17, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
clerk-js-sandbox✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 18, 2025 10:09am

@changeset-bot

changeset-botBot commented Mar 17, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f108423

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 22 packages
NameType
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/typesPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/clerk-expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-startPatch
@clerk/testingPatch
@clerk/vuePatch
@clerk/localizationsPatch
@clerk/themesPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

/**
* A list of files where we want to remove any headings
*/
const FILES_WITHOUT_HEADINGS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the files only contain the contents of a single interface.

For example:

# Parameters
Table goes here

So since I want to use the table contents as a partial/include somewhere else I need to get rid off the heading. But since I don't want to remove headings everywhere I'm removing them only from the files I want to use in such way.

/**
* An array of tuples where the first element is the file name and the second element is the new path.
*/
const LINK_REPLACEMENTS = [

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes there are relative links like [PaginatedResponse](../types/paginated-response.mdx) in the files. The link to the also generated file through typedoc. But we already have that page manually created and want to link to it. So this replaces relative links with links to our existing docs.

@@ -0,0 +1,43 @@
<!-- #region nextjs-01 -->

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to use the https://typedoc.org/documents/Tags.__include_.html flag the examples should be in the root of the package, so that relative links work for the files inside dist. Because it has to be resolved from dist to that folder.

*
* The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you use these MDX components (they are not resolved, just passed along) in such way, they won't be rendered in IntelliSense

* ```
*/
export const useOrganization: UseOrganization = params => {
export function useOrganization<T extends UseOrganizationParams>(params?: T): UseOrganizationReturn<T> {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No behavior change, just removing a type alias and explicitly making it a function (sometimes typedoc can be tripped up by using a const for a function)

/**
* @interface
*/
export type UseOrganizationParams = {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inside useOrganization and useOrganizationList you'll notice that I added export to the params and return types. I need those to be accessible to typedoc, which requires you to export them.

Since we don't re-export them from src/react/hooks/index.ts file they won't surface to the users.

{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": ["./src/index.ts", "./src/react/index.ts", "./src/react/types.ts"],
"entryPoints": ["./src/index.ts", "./src/react/types.ts", "./src/react/hooks/*.{ts,tsx}"],

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I needed access to the exported interfaces inside useOrganization/useOrganizationList but didn't want to change the public API. So we're looking at the hooks individually now.

@LekoArts
LekoArts marked this pull request as ready for review March 17, 2025 11:47
Comment threadpackages/react/.gitignore Outdated
@@ -1,2 +1,3 @@
/*/
!/src/
!/examples/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename to doc-examples, or simply docs ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we can choose whatever name we want really. I'd probably pick docs then

*
* The following example uses the `useSession()` hook to access the `Session` object, which has the `lastActiveAt` property. The `lastActiveAt` property is a `Date` object used to show the time the session was last active.
*
* <Tabs items='React,Next.js'>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be items='react,next' ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our existing docs we use <Tabs items={['React', 'Next.js'}]>. After the transformation to add the curly and square brackets it needs to be the same, hence it's written like that

@LekoArts
LekoArts merged commit 7524943 into mainMar 18, 2025
@LekoArts
LekoArts deleted the lekoarts/eco-508-finish-up-last-missing-pieces-for-react-hooks branch March 18, 2025 10:45
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LekoArts@panteliselef@clerk-cookie