Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/quiet-signs-peel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@clerk/clerk-js': patch
'@clerk/backend': patch
'@clerk/shared': patch
'@clerk/clerk-react': patch
'@clerk/types': patch
'@clerk/clerk-expo': patch
---

Update jsdocs mentions of `@experimental` tag.
2 changes: 1 addition & 1 deletion .typedoc/custom-plugin.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// @ts-check
// @ts-check - Enable TypeScript checks for safer MDX post-processing and link rewriting
import { MarkdownPageEvent } from 'typedoc-plugin-markdown';

/**
Expand Down
12 changes: 9 additions & 3 deletions .typedoc/custom-theme.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -218,13 +218,19 @@ class ClerkMarkdownThemeContext extends MarkdownThemeContext {
const customizedModel = model;
customizedModel.typeParameters = undefined;

// Extract the Accessors group (if any) and prevent default rendering for it
const originalGroups = customizedModel.groups;
const accessorsGroup = originalGroups?.find(g => g.title === 'Accessors');
const groupsWithoutAccessors = originalGroups?.filter(g => g.title !== 'Accessors');

// When an interface extends another interface, typedoc will generate a "Methods" group
// We want to hide this group from being rendered
const groupsWithoutMethods = originalGroups?.filter(g => g.title !== 'Methods');

// Extract the Accessors group (if any) and prevent default rendering for it
const accessorsGroup = groupsWithoutMethods?.find(g => g.title === 'Accessors');
const groupsWithoutAccessors = groupsWithoutMethods?.filter(g => g.title !== 'Accessors');
Comment on lines +223 to +229
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Hiding every “Methods” group is too broad; restrict to interfaces (extends case).

As written, you’ll also remove legitimate methods from classes. Limit the filter to interface pages only.

-        const groupsWithoutMethods = originalGroups?.filter(g => g.title !== 'Methods');
+        const isInterface = customizedModel?.kind === ReflectionKind.Interface;
+        const groupsWithoutMethods = isInterface
+          ? originalGroups?.filter(g => g.title !== 'Methods')
+          : originalGroups;

Build a sample class with methods in the docs to confirm the Methods section remains visible.


🏁 Script executed:

#!/bin/bash
# Locate ReflectionKind usage and import in custom-theme.mjs
grep -R "ReflectionKind" -n .typedoc/custom-theme.mjs || true
# Locate where customizedModel is defined or passed in
grep -R "customizedModel" -n .typedoc/custom-theme.mjs || true

Length of output: 1133


Restrict “Methods” filtering to interfaces only
Only omit the “Methods” group when customizedModel.kind === ReflectionKind.Interface; leave it intact for classes.

-        const groupsWithoutMethods = originalGroups?.filter(g => g.title !== 'Methods');
+        const isInterface = customizedModel.kind === ReflectionKind.Interface;
+        const groupsWithoutMethods = isInterface
+          ? originalGroups.filter(g => g.title !== 'Methods')
+          : originalGroups;

[matches .typedoc/custom-theme.mjs:243]

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// When an interface extends another interface, typedoc will generate a "Methods" group
// We want to hide this group from being rendered
const groupsWithoutMethods = originalGroups?.filter(g => g.title !== 'Methods');
// Extract the Accessors group (if any) and prevent default rendering for it
const accessorsGroup = groupsWithoutMethods?.find(g => g.title === 'Accessors');
const groupsWithoutAccessors = groupsWithoutMethods?.filter(g => g.title !== 'Accessors');
// When an interface extends another interface, typedoc will generate a "Methods" group
// We want to hide this group from being rendered
const isInterface = customizedModel.kind === ReflectionKind.Interface;
const groupsWithoutMethods = isInterface
? originalGroups.filter(g => g.title !== 'Methods')
: originalGroups;
// Extract the Accessors group (if any) and prevent default rendering for it
const accessorsGroup = groupsWithoutMethods?.find(g => g.title === 'Accessors');
const groupsWithoutAccessors = groupsWithoutMethods?.filter(g => g.title !== 'Accessors');
🤖 Prompt for AI Agents
In .typedoc/custom-theme.mjs around lines 243 to 249, the current code always
filters out the "Methods" group; change this to only filter when the model is an
interface by wrapping the "Methods" removal in a conditional that checks if
customizedModel.kind === ReflectionKind.Interface (ensure ReflectionKind is
imported/available in this module). Leave the "Accessors" extraction and
subsequent filtering unchanged so accessors are still handled the same way.


customizedModel.groups = groupsWithoutAccessors;
const nonAccessorOutput = superPartials.memberWithGroups(customizedModel, options);

customizedModel.groups = originalGroups;

/** @type {string[]} */
Expand Down
15 changes: 5 additions & 10 deletions packages/backend/src/api/endpoints/BillingApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ type ExtendSubscriptionItemFreeTrialParams = {

export class BillingAPI extends AbstractAPI {
/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
public async getPlanList(params?: GetOrganizationListParams) {
return this.request<PaginatedResourceResponse<CommercePlan[]>>({
Expand All @@ -45,8 +44,7 @@ export class BillingAPI extends AbstractAPI {
}

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
public async cancelSubscriptionItem(subscriptionItemId: string, params?: CancelSubscriptionItemParams) {
this.requireId(subscriptionItemId);
Expand All @@ -58,8 +56,7 @@ export class BillingAPI extends AbstractAPI {
}

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
public async extendSubscriptionItemFreeTrial(
subscriptionItemId: string,
Expand All @@ -74,8 +71,7 @@ export class BillingAPI extends AbstractAPI {
}

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
public async getOrganizationBillingSubscription(organizationId: string) {
this.requireId(organizationId);
Expand All @@ -86,8 +82,7 @@ export class BillingAPI extends AbstractAPI {
}

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
public async getUserBillingSubscription(userId: string) {
this.requireId(userId);
Expand Down
3 changes: 1 addition & 2 deletions packages/backend/src/api/factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ export function createBackendApiClient(options: CreateBackendApiOptions) {
betaFeatures: new BetaFeaturesAPI(request),
blocklistIdentifiers: new BlocklistIdentifierAPI(request),
/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
billing: new BillingAPI(request),
clients: new ClientAPI(request),
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/resources/CommercePlan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { Feature } from './Feature';
import type { CommercePlanJSON } from './JSON';

/**
* The `CommercePlan` object is similar to the [`CommercePlanResource`](/docs/references/javascript/types/commerce-plan-resource) object as it holds information about a plan, as well as methods for managing it. However, the `CommercePlan` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/commerce/get/commerce/plans){{ target: '_blank' }} and is not directly accessible from the Frontend API.
* The `CommercePlan` object is similar to the [`CommercePlanResource`](/docs/references/javascript/types/commerce-plan-resource) object as it holds information about a plan, as well as methods for managing it. However, the `CommercePlan` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/commerce/get/commerce/plans) and is not directly accessible from the Frontend API.
*
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export class CommercePlan {
constructor(
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/resources/CommerceSubscription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { CommerceSubscriptionItem } from './CommerceSubscriptionItem';
import type { CommerceSubscriptionJSON } from './JSON';

/**
* The `CommerceSubscription` object is similar to the [`CommerceSubscriptionResource`](/docs/references/javascript/types/commerce-subscription-resource) object as it holds information about a subscription, as well as methods for managing it. However, the `CommerceSubscription` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/billing/get/organizations/%7Borganization_id%7D/billing/subscription){{ target: '_blank' }} and is not directly accessible from the Frontend API.
* The `CommerceSubscription` object is similar to the [`CommerceSubscriptionResource`](/docs/references/javascript/types/commerce-subscription-resource) object as it holds information about a subscription, as well as methods for managing it. However, the `CommerceSubscription` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/billing/get/organizations/%7Borganization_id%7D/billing/subscription) and is not directly accessible from the Frontend API.
*
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export class CommerceSubscription {
constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { CommercePlan } from './CommercePlan';
import type { CommerceSubscriptionItemJSON } from './JSON';

/**
* The `CommerceSubscriptionItem` object is similar to the [`CommerceSubscriptionItemResource`](/docs/references/javascript/types/commerce-subscription-item-resource) object as it holds information about a subscription item, as well as methods for managing it. However, the `CommerceSubscriptionItem` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/commerce/get/commerce/subscription_items){{ target: '_blank' }} and is not directly accessible from the Frontend API.
* The `CommerceSubscriptionItem` object is similar to the [`CommerceSubscriptionItemResource`](/docs/references/javascript/types/commerce-subscription-item-resource) object as it holds information about a subscription item, as well as methods for managing it. However, the `CommerceSubscriptionItem` object is different in that it is used in the [Backend API](https://clerk.com/docs/reference/backend-api/tag/commerce/get/commerce/subscription_items) and is not directly accessible from the Frontend API.
*
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export class CommerceSubscriptionItem {
constructor(
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/Feature.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { FeatureJSON } from './JSON';
/**
* The `Feature` object represents a feature of a subscription plan.
*
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export class Feature {
constructor(
Expand Down
6 changes: 2 additions & 4 deletions packages/backend/src/api/resources/JSON.ts
Original file line number Diff line number Diff line change
Expand Up @@ -828,8 +828,7 @@ export interface FeatureJSON extends ClerkResourceJSON {
}

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export interface CommercePlanJSON extends ClerkResourceJSON {
object: typeof ObjectType.CommercePlan;
Expand Down Expand Up @@ -860,8 +859,7 @@ type CommerceSubscriptionItemStatus =
| 'upcoming';

/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change.
* It is advised to pin the SDK version to avoid breaking changes.
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export interface CommerceSubscriptionItemJSON extends ClerkResourceJSON {
object: typeof ObjectType.CommerceSubscriptionItem;
Expand Down
6 changes: 2 additions & 4 deletions packages/clerk-js/src/core/clerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1158,8 +1158,7 @@ export class Clerk implements ClerkInterface {
};

/**
* @experimental
* This API is in early access and may change in future releases.
* @experimental This API is in early access and may change in future releases.
*
* Mount a api keys component at the target element.
* @param targetNode Target to mount the APIKeys component.
Expand Down Expand Up @@ -1201,8 +1200,7 @@ export class Clerk implements ClerkInterface {
};

/**
* @experimental
* This API is in early access and may change in future releases.
* @experimental This API is in early access and may change in future releases.
*
* Unmount a api keys component from the target element.
* If there is no component mounted at the target node, results in a noop.
Expand Down
4 changes: 2 additions & 2 deletions packages/expo/src/provider/ClerkProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ export type ClerkProviderProps = Without<React.ComponentProps<typeof ClerkReactP
/**
* Note: Passkey support in Expo is currently in a limited rollout phase.
* If you're interested in using this feature, please contact us for early access or additional details.
* This API is experimental and may change at any moment.
* @experimental
*
* @experimental This API is experimental and may change at any moment.
*/
__experimental_passkeys?: BuildClerkOptions['__experimental_passkeys'];
/**
Expand Down
4 changes: 2 additions & 2 deletions packages/expo/src/provider/singleton/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ export type BuildClerkOptions = {
/**
* Note: Passkey support in Expo is currently in a limited rollout phase.
* If you're interested in using this feature, please contact us for early access or additional details.
* This API is experimental and may change at any moment.
* @experimental
*
* @experimental This API is experimental and may change at any moment.
*/
__experimental_passkeys?: {
get: ({
Expand Down
4 changes: 3 additions & 1 deletion packages/react/src/components/CheckoutButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../ut
import { withClerk } from './withClerk';

/**
* @experimental A button component that opens the Clerk Checkout drawer when clicked. This component must be rendered
* A button component that opens the Clerk Checkout drawer when clicked. This component must be rendered
* inside a `<SignedIn />` component to ensure the user is authenticated.
*
* @example
Expand Down Expand Up @@ -43,6 +43,8 @@ import { withClerk } from './withClerk';
*
* @throws {Error} When rendered outside of a `<SignedIn />` component
* @throws {Error} When `for="organization"` is used without an active organization context
*
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export const CheckoutButton = withClerk(
({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_CheckoutButtonProps>>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/components/PlanDetailsButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../ut
import { withClerk } from './withClerk';

/**
* @experimental A button component that opens the Clerk Plan Details drawer when clicked. This component is part of
* A button component that opens the Clerk Plan Details drawer when clicked. This component is part of
* Clerk's Billing feature which is available under a public beta.
*
* @example
Expand All @@ -31,7 +31,7 @@ import { withClerk } from './withClerk';
* }
* ```
*
* @see https://clerk.com/docs/billing/overview
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export const PlanDetailsButton = withClerk(
({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_PlanDetailsButtonProps>>) => {
Expand Down
5 changes: 2 additions & 3 deletions packages/react/src/components/SubscriptionDetailsButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../ut
import { withClerk } from './withClerk';

/**
* @experimental A button component that opens the Clerk Subscription Details drawer when clicked. This component must be rendered
* inside a `<SignedIn />` component to ensure the user is authenticated.
* A button component that opens the Clerk Subscription Details drawer when clicked. This component must be rendered inside a `<SignedIn />` component to ensure the user is authenticated.
*
* @example
* ```tsx
Expand Down Expand Up @@ -38,7 +37,7 @@ import { withClerk } from './withClerk';
* @throws {Error} When rendered outside of a `<SignedIn />` component
* @throws {Error} When `for="organization"` is used without an active organization context
*
* @see https://clerk.com/docs/billing/overview
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export const SubscriptionDetailsButton = withClerk(
({
Expand Down
12 changes: 6 additions & 6 deletions packages/react/src/components/uiComponents.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ type UserButtonPropsWithoutCustomPages = Without<
userProfileProps?: Pick<UserProfileProps, 'additionalOAuthScopes' | 'appearance'>;
/**
* Adding `asProvider` will defer rendering until the `<Outlet />` component is mounted.
* This API is experimental and may change at any moment.
* @experimental
*
* @experimental This API is experimental and may change at any moment.
* @default undefined
*/
__experimental_asProvider?: boolean;
Expand All @@ -99,6 +99,7 @@ type OrganizationSwitcherExportType = typeof _OrganizationSwitcher & {
/**
* The `<Outlet />` component can be used in conjunction with `asProvider` in order to control rendering
* of the `<OrganizationSwitcher />` without affecting its configuration or any custom pages that could be mounted
*
* @experimental This API is experimental and may change at any moment.
*/
__experimental_Outlet: typeof OrganizationSwitcherOutlet;
Expand All @@ -111,8 +112,8 @@ type OrganizationSwitcherPropsWithoutCustomPages = Without<
organizationProfileProps?: Pick<OrganizationProfileProps, 'appearance'>;
/**
* Adding `asProvider` will defer rendering until the `<Outlet />` component is mounted.
* This API is experimental and may change at any moment.
* @experimental
*
* @experimental This API is experimental and may change at any moment.
* @default undefined
*/
__experimental_asProvider?: boolean;
Expand Down Expand Up @@ -609,8 +610,7 @@ export const PricingTable = withClerk(
);

/**
* @experimental
* This component is in early access and may change in future releases.
* @experimental This component is in early access and may change in future releases.
*/
export const APIKeys = withClerk(
({ clerk, component, fallback, ...props }: WithClerkProp<APIKeysProps & FallbackProp>) => {
Expand Down
Loading
Loading