Browse Source

fix(docs): Fix MDX parsing errors in generated API docs

- Fix angle bracket handling in typescript-docs-renderer.ts:
  - renderType: Leave angle brackets as-is (safe inside JS template literals)
  - renderHeritageType: Wrap angle brackets in backticks (markdown context)
  - renderDescription: Escape unmatched {@link} references as inline code
- Generate _index.mdx files for GraphQL API admin/shop directories
- Add docs/CLAUDE.md with documentation structure guidelines
- Regenerate all API reference docs

All 788 MDX files now pass validation (was 300+ failures).
David Höck 1 tuần trước cách đây
mục cha
commit
72559b340f
28 tập tin đã thay đổi với 218 bổ sung89 xóa
  1. 27 0
      docs/CLAUDE.md
  2. 1 1
      docs/docs/reference/admin-ui-api/bulk-actions/bulk-action.mdx
  3. 1 1
      docs/docs/reference/admin-ui-api/components/asset-picker-dialog-component.mdx
  4. 1 1
      docs/docs/reference/admin-ui-api/directives/if-permissions-directive.mdx
  5. 1 1
      docs/docs/reference/admin-ui-api/list-detail-views/typed-base-detail-component.mdx
  6. 1 1
      docs/docs/reference/admin-ui-api/list-detail-views/typed-base-list-component.mdx
  7. 1 1
      docs/docs/reference/core-plugins/email-plugin/email-event-handler-with-async-data.mdx
  8. 1 1
      docs/docs/reference/core-plugins/email-plugin/email-plugin-options.mdx
  9. 11 0
      docs/docs/reference/graphql-api/admin/_index.mdx
  10. 11 0
      docs/docs/reference/graphql-api/shop/_index.mdx
  11. 1 1
      docs/docs/reference/typescript-api/auth/native-authentication-strategy.mdx
  12. 1 1
      docs/docs/reference/typescript-api/configuration/collection-filter.mdx
  13. 2 2
      docs/docs/reference/typescript-api/configuration/entity-duplicator.mdx
  14. 2 2
      docs/docs/reference/typescript-api/configuration/entity-id-strategy.mdx
  15. 29 29
      docs/docs/reference/typescript-api/events/event-types.mdx
  16. 2 2
      docs/docs/reference/typescript-api/fulfillment/fulfillment-handler.mdx
  17. 1 1
      docs/docs/reference/typescript-api/job-queue/subscribable-job.mdx
  18. 1 1
      docs/docs/reference/typescript-api/payment/payment-method-config-options.mdx
  19. 2 2
      docs/docs/reference/typescript-api/payment/payment-method-eligibility-checker.mdx
  20. 1 1
      docs/docs/reference/typescript-api/payment/payment-method-handler.mdx
  21. 10 10
      docs/docs/reference/typescript-api/promotions/promotion-action.mdx
  22. 2 2
      docs/docs/reference/typescript-api/promotions/promotion-condition.mdx
  23. 2 2
      docs/docs/reference/typescript-api/request/request-context.mdx
  24. 1 1
      docs/docs/reference/typescript-api/shipping/shipping-calculator.mdx
  25. 1 1
      docs/docs/reference/typescript-api/shipping/shipping-eligibility-checker-config.mdx
  26. 1 1
      docs/docs/reference/typescript-api/shipping/shipping-eligibility-checker.mdx
  27. 10 0
      scripts/docs/generate-graphql-docs.ts
  28. 93 23
      scripts/docs/typescript-docs-renderer.ts

+ 27 - 0
docs/CLAUDE.md

@@ -0,0 +1,27 @@
+# Vendure Documentation
+
+## Structure
+
+- `docs/docs/reference/` - **AUTO-GENERATED** API reference documentation
+- `docs/docs/guides/` - Manually written guides and tutorials
+- `docs/docs/user-guide/` - Manually written end-user documentation
+
+## Important: Generated vs Manual Content
+
+### Generated Content (DO NOT EDIT DIRECTLY)
+
+Everything in `docs/docs/reference/` is auto-generated by scripts:
+
+- **TypeScript API docs**: Generated by `scripts/docs/generate-typescript-docs.ts`
+- **GraphQL API docs**: Generated by `scripts/docs/generate-graphql-docs.ts`
+
+These files are regenerated from source code and will be overwritten. To update them:
+1. Modify the source code or JSDoc comments in the relevant package
+2. Run `npm run docs:build` from the repo root
+
+### Manual Content (CAN BE EDITED)
+
+- `docs/docs/guides/` - Developer guides, tutorials, how-tos
+- `docs/docs/user-guide/` - End-user documentation for the Admin UI
+
+These files are written and maintained manually.

+ 1 - 1
docs/docs/reference/admin-ui-api/bulk-actions/bulk-action.mdx

@@ -191,7 +191,7 @@ interface BulkActionClickContext<ItemType, ComponentType> extends BulkActionFunc
     event: MouseEvent;
 }
 ```
-* Extends: <DocsLink href="/reference/admin-ui-api/bulk-actions/bulk-action#bulkactionfunctioncontext">`BulkActionFunctionContext`</DocsLink><ItemType, ComponentType>
+* Extends: <DocsLink href="/reference/admin-ui-api/bulk-actions/bulk-action#bulkactionfunctioncontext">`BulkActionFunctionContext`</DocsLink>`<ItemType, ComponentType>`
 
 
 

+ 1 - 1
docs/docs/reference/admin-ui-api/components/asset-picker-dialog-component.mdx

@@ -49,7 +49,7 @@ class AssetPickerDialogComponent implements OnInit, AfterViewInit, OnDestroy, Di
     createAssets(files: File[]) => ;
 }
 ```
-* Implements: OnInit, AfterViewInit, OnDestroy, <DocsLink href="/reference/admin-ui-api/services/modal-service#dialog">`Dialog`</DocsLink><<DocsLink href="/reference/typescript-api/entities/asset#asset">`Asset`</DocsLink>[]>
+* Implements: OnInit, AfterViewInit, OnDestroy, <DocsLink href="/reference/admin-ui-api/services/modal-service#dialog">`Dialog`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/asset#asset">`Asset`</DocsLink>`[]>`
 
 
 

+ 1 - 1
docs/docs/reference/admin-ui-api/directives/if-permissions-directive.mdx

@@ -22,7 +22,7 @@ class IfPermissionsDirective extends IfDirectiveBase<Array<Permission[] | null>>
     constructor(_viewContainer: ViewContainerRef, templateRef: TemplateRef<any>, changeDetectorRef: ChangeDetectorRef, permissionsService: PermissionsService)
 }
 ```
-* Extends: IfDirectiveBase<`Array<`<DocsLink href="/reference/typescript-api/common/permission#permission">`Permission`</DocsLink>[] | null>>
+* Extends: `IfDirectiveBase<Array<`<DocsLink href="/reference/typescript-api/common/permission#permission">`Permission`</DocsLink>`[] | null>>`
 
 
 

+ 1 - 1
docs/docs/reference/admin-ui-api/list-detail-views/typed-base-detail-component.mdx

@@ -15,7 +15,7 @@ class TypedBaseDetailComponent<T extends TypedDocumentNode<any, any>, Field exte
     init() => ;
 }
 ```
-* Extends: <DocsLink href="/reference/admin-ui-api/list-detail-views/base-detail-component#basedetailcomponent">`BaseDetailComponent`</DocsLink><NonNullable<ResultOf<T>[Field]>>
+* Extends: <DocsLink href="/reference/admin-ui-api/list-detail-views/base-detail-component#basedetailcomponent">`BaseDetailComponent`</DocsLink>`<NonNullable<ResultOf<T>[Field]>>`
 
 
 

+ 1 - 1
docs/docs/reference/admin-ui-api/list-detail-views/typed-base-list-component.mdx

@@ -31,7 +31,7 @@ class TypedBaseListComponent<T extends TypedDocumentNode<any, Vars>, Field exten
     getCustomFieldConfig(key: Exclude<keyof CustomFields, '__typename'> | string) => CustomFieldConfig[];
 }
 ```
-* Extends: <DocsLink href="/reference/admin-ui-api/list-detail-views/base-list-component#baselistcomponent">`BaseListComponent`</DocsLink><ResultOf<T>, ItemOf<ResultOf<T>, Field>, VariablesOf<T>>
+* Extends: <DocsLink href="/reference/admin-ui-api/list-detail-views/base-list-component#baselistcomponent">`BaseListComponent`</DocsLink>`<ResultOf<T>, ItemOf<ResultOf<T>, Field>, VariablesOf<T>>`
 
 
 * Implements: OnInit

+ 1 - 1
docs/docs/reference/core-plugins/email-plugin/email-event-handler-with-async-data.mdx

@@ -12,7 +12,7 @@ class EmailEventHandlerWithAsyncData<Data, T extends string = string, InputEvent
     constructor(_loadDataFn: LoadDataFn<InputEvent, Data>, listener: EmailEventListener<T>, event: Type<InputEvent>)
 }
 ```
-* Extends: <DocsLink href="/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler">`EmailEventHandler`</DocsLink><T, Event>
+* Extends: <DocsLink href="/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler">`EmailEventHandler`</DocsLink>`<T, Event>`
 
 
 

+ 1 - 1
docs/docs/reference/core-plugins/email-plugin/email-plugin-options.mdx

@@ -115,7 +115,7 @@ interface EmailPluginDevModeOptions extends Omit<EmailPluginOptions, 'transport'
     route: string;
 }
 ```
-* Extends: `Omit<`<DocsLink href="/reference/core-plugins/email-plugin/email-plugin-options#emailpluginoptions">`EmailPluginOptions`</DocsLink>, 'transport'>
+* Extends: `Omit<`<DocsLink href="/reference/core-plugins/email-plugin/email-plugin-options#emailpluginoptions">`EmailPluginOptions`</DocsLink>`, 'transport'>`
 
 
 

+ 11 - 0
docs/docs/reference/graphql-api/admin/_index.mdx

@@ -0,0 +1,11 @@
+---
+title: "Admin API"
+generated: true
+---
+
+
+<LinkCard href="/reference/graphql-api/admin/queries" title="Queries" />
+<LinkCard href="/reference/graphql-api/admin/mutations" title="Mutations" />
+<LinkCard href="/reference/graphql-api/admin/object-types" title="Types" />
+<LinkCard href="/reference/graphql-api/admin/input-types" title="Input Objects" />
+<LinkCard href="/reference/graphql-api/admin/enums" title="Enums" />

+ 11 - 0
docs/docs/reference/graphql-api/shop/_index.mdx

@@ -0,0 +1,11 @@
+---
+title: "Shop API"
+generated: true
+---
+
+
+<LinkCard href="/reference/graphql-api/shop/queries" title="Queries" />
+<LinkCard href="/reference/graphql-api/shop/mutations" title="Mutations" />
+<LinkCard href="/reference/graphql-api/shop/object-types" title="Types" />
+<LinkCard href="/reference/graphql-api/shop/input-types" title="Input Objects" />
+<LinkCard href="/reference/graphql-api/shop/enums" title="Enums" />

+ 1 - 1
docs/docs/reference/typescript-api/auth/native-authentication-strategy.mdx

@@ -17,7 +17,7 @@ class NativeAuthenticationStrategy implements AuthenticationStrategy<NativeAuthe
     verifyUserPassword(ctx: RequestContext, userId: ID, password: string) => Promise<boolean>;
 }
 ```
-* Implements: <DocsLink href="/reference/typescript-api/auth/authentication-strategy#authenticationstrategy">`AuthenticationStrategy`</DocsLink><NativeAuthenticationData>
+* Implements: <DocsLink href="/reference/typescript-api/auth/authentication-strategy#authenticationstrategy">`AuthenticationStrategy`</DocsLink>`<NativeAuthenticationData>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/configuration/collection-filter.mdx

@@ -50,7 +50,7 @@ class CollectionFilter<T extends ConfigArgs = ConfigArgs> extends ConfigurableOp
     apply(qb: SelectQueryBuilder<ProductVariant>, args: ConfigArg[]) => SelectQueryBuilder<ProductVariant>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/configuration/entity-duplicator.mdx

@@ -101,7 +101,7 @@ class EntityDuplicator<T extends ConfigArgs = ConfigArgs> extends ConfigurableOp
     }) => Promise<VendureEntity>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 
@@ -143,7 +143,7 @@ interface EntityDuplicatorConfig<T extends ConfigArgs> extends ConfigurableOpera
     duplicate: DuplicateEntityFn<T>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/configuration/entity-id-strategy.mdx

@@ -14,7 +14,7 @@ class AutoIncrementIdStrategy implements EntityIdStrategy<'increment'> {
     encodeId(primaryKey: number) => string;
 }
 ```
-* Implements: <DocsLink href="/reference/typescript-api/configuration/entity-id-strategy#entityidstrategy">`EntityIdStrategy`</DocsLink><'increment'>
+* Implements: <DocsLink href="/reference/typescript-api/configuration/entity-id-strategy#entityidstrategy">`EntityIdStrategy`</DocsLink>`<'increment'>`
 
 
 
@@ -129,7 +129,7 @@ class UuidIdStrategy implements EntityIdStrategy<'uuid'> {
     encodeId(primaryKey: string) => string;
 }
 ```
-* Implements: <DocsLink href="/reference/typescript-api/configuration/entity-id-strategy#entityidstrategy">`EntityIdStrategy`</DocsLink><'uuid'>
+* Implements: <DocsLink href="/reference/typescript-api/configuration/entity-id-strategy#entityidstrategy">`EntityIdStrategy`</DocsLink>`<'uuid'>`
 
 
 

+ 29 - 29
docs/docs/reference/typescript-api/events/event-types.mdx

@@ -59,7 +59,7 @@ class AdministratorEvent extends VendureEntityEvent<Administrator, Administrator
     constructor(ctx: RequestContext, entity: Administrator, type: 'created' | 'updated' | 'deleted', input?: AdministratorInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/administrator#administrator">`Administrator`</DocsLink>, AdministratorInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/administrator#administrator">`Administrator`</DocsLink>`, AdministratorInputTypes>`
 
 
 
@@ -107,7 +107,7 @@ class AssetEvent extends VendureEntityEvent<Asset, AssetInputTypes> {
     asset: Asset
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/asset#asset">`Asset`</DocsLink>, AssetInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/asset#asset">`Asset`</DocsLink>`, AssetInputTypes>`
 
 
 
@@ -184,7 +184,7 @@ class ChannelEvent extends VendureEntityEvent<Channel, ChannelInputTypes> {
     constructor(ctx: RequestContext, entity: Channel, type: 'created' | 'updated' | 'deleted', input?: ChannelInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/channel#channel">`Channel`</DocsLink>, ChannelInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/channel#channel">`Channel`</DocsLink>`, ChannelInputTypes>`
 
 
 
@@ -207,7 +207,7 @@ class CollectionEvent extends VendureEntityEvent<Collection, CollectionInputType
     constructor(ctx: RequestContext, entity: Collection, type: 'created' | 'updated' | 'deleted', input?: CollectionInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/collection#collection">`Collection`</DocsLink>, CollectionInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/collection#collection">`Collection`</DocsLink>`, CollectionInputTypes>`
 
 
 
@@ -257,7 +257,7 @@ class CountryEvent extends VendureEntityEvent<Country, CountryInputTypes> {
     constructor(ctx: RequestContext, entity: Country, type: 'created' | 'updated' | 'deleted', input?: CountryInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/country#country">`Country`</DocsLink>, CountryInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/country#country">`Country`</DocsLink>`, CountryInputTypes>`
 
 
 
@@ -306,7 +306,7 @@ class CustomerAddressEvent extends VendureEntityEvent<Address, CustomerAddressIn
     address: Address
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/address#address">`Address`</DocsLink>, CustomerAddressInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/address#address">`Address`</DocsLink>`, CustomerAddressInputTypes>`
 
 
 
@@ -336,7 +336,7 @@ class CustomerEvent extends VendureEntityEvent<Customer, CustomerInputTypes> {
     customer: Customer
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/customer#customer">`Customer`</DocsLink>, CustomerInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/customer#customer">`Customer`</DocsLink>`, CustomerInputTypes>`
 
 
 
@@ -388,7 +388,7 @@ class CustomerGroupEvent extends VendureEntityEvent<CustomerGroup, CustomerGroup
     constructor(ctx: RequestContext, entity: CustomerGroup, type: 'created' | 'updated' | 'deleted', input?: CustomerGroupInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/customer-group#customergroup">`CustomerGroup`</DocsLink>, CustomerGroupInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/customer-group#customergroup">`CustomerGroup`</DocsLink>`, CustomerGroupInputTypes>`
 
 
 
@@ -411,7 +411,7 @@ class FacetEvent extends VendureEntityEvent<Facet, FacetInputTypes> {
     constructor(ctx: RequestContext, entity: Facet, type: 'created' | 'updated' | 'deleted', input?: FacetInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/facet#facet">`Facet`</DocsLink>, FacetInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/facet#facet">`Facet`</DocsLink>`, FacetInputTypes>`
 
 
 
@@ -434,7 +434,7 @@ class FacetValueEvent extends VendureEntityEvent<FacetValue, FacetValueInputType
     constructor(ctx: RequestContext, entity: FacetValue, type: 'created' | 'updated' | 'deleted', input?: FacetValueInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/facet-value#facetvalue">`FacetValue`</DocsLink>, FacetValueInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/facet-value#facetvalue">`FacetValue`</DocsLink>`, FacetValueInputTypes>`
 
 
 
@@ -457,7 +457,7 @@ class FulfillmentEvent extends VendureEntityEvent<Fulfillment, CreateFulfillment
     constructor(ctx: RequestContext, entity: Fulfillment, input?: CreateFulfillmentInput)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/fulfillment#fulfillment">`Fulfillment`</DocsLink>, CreateFulfillmentInput>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/fulfillment#fulfillment">`Fulfillment`</DocsLink>`, CreateFulfillmentInput>`
 
 
 
@@ -504,7 +504,7 @@ class GlobalSettingsEvent extends VendureEntityEvent<GlobalSettings, UpdateGloba
     constructor(ctx: RequestContext, entity: GlobalSettings, input?: UpdateGlobalSettingsInput)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/global-settings#globalsettings">`GlobalSettings`</DocsLink>, UpdateGlobalSettingsInput>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/global-settings#globalsettings">`GlobalSettings`</DocsLink>`, UpdateGlobalSettingsInput>`
 
 
 
@@ -528,7 +528,7 @@ class HistoryEntryEvent extends VendureEntityEvent<HistoryEntry, HistoryInput> {
     constructor(ctx: RequestContext, entity: HistoryEntry, type: 'created' | 'updated' | 'deleted', historyType: 'order' | 'customer' | string, input?: HistoryInput)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/history-entry#historyentry">`HistoryEntry`</DocsLink>, HistoryInput>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/history-entry#historyentry">`HistoryEntry`</DocsLink>`, HistoryInput>`
 
 
 
@@ -675,7 +675,7 @@ class OrderEvent extends VendureEntityEvent<Order, OrderInputTypes> {
     order: Order
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/order#order">`Order`</DocsLink>, OrderInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/order#order">`Order`</DocsLink>`, OrderInputTypes>`
 
 
 
@@ -824,7 +824,7 @@ class PaymentMethodEvent extends VendureEntityEvent<PaymentMethod, PaymentMethod
     constructor(ctx: RequestContext, entity: PaymentMethod, type: 'created' | 'updated' | 'deleted', input?: PaymentMethodInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/payment-method#paymentmethod">`PaymentMethod`</DocsLink>, PaymentMethodInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/payment-method#paymentmethod">`PaymentMethod`</DocsLink>`, PaymentMethodInputTypes>`
 
 
 
@@ -897,7 +897,7 @@ class ProductEvent extends VendureEntityEvent<Product, ProductInputTypes> {
     product: Product
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/product#product">`Product`</DocsLink>, ProductInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/product#product">`Product`</DocsLink>`, ProductInputTypes>`
 
 
 
@@ -925,7 +925,7 @@ class ProductOptionEvent extends VendureEntityEvent<ProductOption, ProductOption
     constructor(ctx: RequestContext, entity: ProductOption, type: 'created' | 'updated' | 'deleted', input?: ProductOptionInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/product-option#productoption">`ProductOption`</DocsLink>, ProductOptionInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/product-option#productoption">`ProductOption`</DocsLink>`, ProductOptionInputTypes>`
 
 
 
@@ -974,7 +974,7 @@ class ProductOptionGroupEvent extends VendureEntityEvent<
     constructor(ctx: RequestContext, entity: ProductOptionGroup, type: 'created' | 'updated' | 'deleted', input?: ProductOptionGroupInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><     <DocsLink href="/reference/typescript-api/entities/product-option-group#productoptiongroup">`ProductOptionGroup`</DocsLink>,     ProductOptionGroupInputTypes >
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<     `<DocsLink href="/reference/typescript-api/entities/product-option-group#productoptiongroup">`ProductOptionGroup`</DocsLink>`,     ProductOptionGroupInputTypes >`
 
 
 
@@ -1022,7 +1022,7 @@ class ProductVariantEvent extends VendureEntityEvent<ProductVariant[], ProductVa
     variants: ProductVariant[]
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/product-variant#productvariant">`ProductVariant`</DocsLink>[], ProductVariantInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/product-variant#productvariant">`ProductVariant`</DocsLink>`[], ProductVariantInputTypes>`
 
 
 
@@ -1053,7 +1053,7 @@ class ProductVariantPriceEvent extends VendureEntityEvent<
     constructor(ctx: RequestContext, entity: ProductVariantPrice[], type: 'created' | 'updated' | 'deleted', input?: ProductVariantInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><     <DocsLink href="/reference/typescript-api/entities/product-variant-price#productvariantprice">`ProductVariantPrice`</DocsLink>[],     ProductVariantInputTypes >
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<     `<DocsLink href="/reference/typescript-api/entities/product-variant-price#productvariantprice">`ProductVariantPrice`</DocsLink>`[],     ProductVariantInputTypes >`
 
 
 
@@ -1077,7 +1077,7 @@ class PromotionEvent extends VendureEntityEvent<Promotion, PromotionInputTypes>
     constructor(ctx: RequestContext, entity: Promotion, type: 'created' | 'updated' | 'deleted', input?: PromotionInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/promotion#promotion">`Promotion`</DocsLink>, PromotionInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/promotion#promotion">`Promotion`</DocsLink>`, PromotionInputTypes>`
 
 
 
@@ -1100,7 +1100,7 @@ class ProvinceEvent extends VendureEntityEvent<Province, ProvinceInputTypes> {
     constructor(ctx: RequestContext, entity: Province, type: 'created' | 'updated' | 'deleted', input?: ProvinceInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/province#province">`Province`</DocsLink>, ProvinceInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/province#province">`Province`</DocsLink>`, ProvinceInputTypes>`
 
 
 
@@ -1193,7 +1193,7 @@ class RoleEvent extends VendureEntityEvent<Role, RoleInputTypes> {
     constructor(ctx: RequestContext, entity: Role, type: 'created' | 'updated' | 'deleted', input?: RoleInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/role#role">`Role`</DocsLink>, RoleInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/role#role">`Role`</DocsLink>`, RoleInputTypes>`
 
 
 
@@ -1239,7 +1239,7 @@ class SellerEvent extends VendureEntityEvent<Seller, SellerInputTypes> {
     constructor(ctx: RequestContext, entity: Seller, type: 'created' | 'updated' | 'deleted', input?: SellerInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/seller#seller">`Seller`</DocsLink>, SellerInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/seller#seller">`Seller`</DocsLink>`, SellerInputTypes>`
 
 
 
@@ -1263,7 +1263,7 @@ class ShippingMethodEvent extends VendureEntityEvent<ShippingMethod, ShippingMet
     constructor(ctx: RequestContext, entity: ShippingMethod, type: 'created' | 'updated' | 'deleted', input?: ShippingMethodInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/shipping-method#shippingmethod">`ShippingMethod`</DocsLink>, ShippingMethodInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/shipping-method#shippingmethod">`ShippingMethod`</DocsLink>`, ShippingMethodInputTypes>`
 
 
 
@@ -1287,7 +1287,7 @@ class StockLocationEvent extends VendureEntityEvent<StockLocation, StockLocation
     constructor(ctx: RequestContext, entity: StockLocation, type: 'created' | 'updated' | 'deleted', input?: StockLocationInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/stock-location#stocklocation">`StockLocation`</DocsLink>, StockLocationInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/stock-location#stocklocation">`StockLocation`</DocsLink>`, StockLocationInputTypes>`
 
 
 
@@ -1341,7 +1341,7 @@ class TaxCategoryEvent extends VendureEntityEvent<TaxCategory, TaxCategoryInputT
     constructor(ctx: RequestContext, entity: TaxCategory, type: 'created' | 'updated' | 'deleted', input?: TaxCategoryInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/tax-category#taxcategory">`TaxCategory`</DocsLink>, TaxCategoryInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/tax-category#taxcategory">`TaxCategory`</DocsLink>`, TaxCategoryInputTypes>`
 
 
 
@@ -1365,7 +1365,7 @@ class TaxRateEvent extends VendureEntityEvent<TaxRate, TaxRateInputTypes> {
     constructor(ctx: RequestContext, entity: TaxRate, type: 'created' | 'updated' | 'deleted', input?: TaxRateInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/tax-rate#taxrate">`TaxRate`</DocsLink>, TaxRateInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/tax-rate#taxrate">`TaxRate`</DocsLink>`, TaxRateInputTypes>`
 
 
 
@@ -1412,7 +1412,7 @@ class ZoneEvent extends VendureEntityEvent<Zone, ZoneInputTypes> {
     constructor(ctx: RequestContext, entity: Zone, type: 'created' | 'updated' | 'deleted', input?: ZoneInputTypes)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink><<DocsLink href="/reference/typescript-api/entities/zone#zone">`Zone`</DocsLink>, ZoneInputTypes>
+* Extends: <DocsLink href="/reference/typescript-api/events/vendure-entity-event#vendureentityevent">`VendureEntityEvent`</DocsLink>`<`<DocsLink href="/reference/typescript-api/entities/zone#zone">`Zone`</DocsLink>`, ZoneInputTypes>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/fulfillment/fulfillment-handler.mdx

@@ -83,7 +83,7 @@ class FulfillmentHandler<T extends ConfigArgs = ConfigArgs> extends Configurable
     constructor(config: FulfillmentHandlerConfig<T>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 
@@ -107,7 +107,7 @@ interface FulfillmentHandlerConfig<T extends ConfigArgs> extends ConfigurableOpe
     onFulfillmentTransition?: OnTransitionStartFn<FulfillmentState, FulfillmentTransitionData>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/job-queue/subscribable-job.mdx

@@ -15,7 +15,7 @@ class SubscribableJob<T extends JobData<T> = any> extends Job<T> {
     updates(options?: JobUpdateOptions) => Observable<JobUpdate<T>>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/job-queue/job#job">`Job`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/job-queue/job#job">`Job`</DocsLink>`<T>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/payment/payment-method-config-options.mdx

@@ -15,7 +15,7 @@ interface PaymentMethodConfigOptions<T extends ConfigArgs> extends ConfigurableO
     onStateTransitionStart?: OnTransitionStartFn<PaymentState, PaymentTransitionData>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/payment/payment-method-eligibility-checker.mdx

@@ -27,7 +27,7 @@ class PaymentMethodEligibilityChecker<T extends ConfigArgs = ConfigArgs> extends
     constructor(config: PaymentMethodEligibilityCheckerConfig<T>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 
@@ -51,7 +51,7 @@ interface PaymentMethodEligibilityCheckerConfig<T extends ConfigArgs> extends Co
     check: CheckPaymentMethodEligibilityCheckerFn<T>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/payment/payment-method-handler.mdx

@@ -62,7 +62,7 @@ class PaymentMethodHandler<T extends ConfigArgs = ConfigArgs> extends Configurab
     constructor(config: PaymentMethodConfigOptions<T>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 

+ 10 - 10
docs/docs/reference/typescript-api/promotions/promotion-action.mdx

@@ -13,7 +13,7 @@ class PromotionAction<T extends ConfigArgs = ConfigArgs, U extends PromotionCond
     constructor(config: PromotionActionConfig<T, U>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 
@@ -57,7 +57,7 @@ class PromotionItemAction<T extends ConfigArgs = ConfigArgs, U extends Array<Pro
     constructor(config: PromotionItemActionConfig<T, U>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink>`<T, U>`
 
 
 
@@ -94,7 +94,7 @@ class PromotionOrderAction<T extends ConfigArgs = ConfigArgs, U extends Promotio
     constructor(config: PromotionOrderActionConfig<T, U>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink>`<T, U>`
 
 
 
@@ -117,7 +117,7 @@ class PromotionShippingAction<T extends ConfigArgs = ConfigArgs, U extends Promo
     constructor(config: PromotionShippingActionConfig<T, U>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink>`<T, U>`
 
 
 
@@ -212,7 +212,7 @@ interface PromotionActionConfig<T extends ConfigArgs, U extends Array<PromotionC
     onDeactivate?: PromotionActionSideEffectFn<T>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 
@@ -262,7 +262,7 @@ interface PromotionItemActionConfig<T extends ConfigArgs, U extends PromotionCon
     execute: ExecutePromotionItemActionFn<T, U>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink>`<T, U>`
 
 
 
@@ -287,7 +287,7 @@ interface PromotionLineActionConfig<T extends ConfigArgs, U extends PromotionCon
     execute: ExecutePromotionLineActionFn<T, U>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink>`<T, U>`
 
 
 
@@ -312,7 +312,7 @@ interface PromotionOrderActionConfig<T extends ConfigArgs, U extends PromotionCo
     execute: ExecutePromotionOrderActionFn<T, U>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink>`<T, U>`
 
 
 
@@ -337,7 +337,7 @@ interface PromotionShippingActionConfig<T extends ConfigArgs, U extends Promotio
     execute: ExecutePromotionShippingActionFn<T, U>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionactionconfig">`PromotionActionConfig`</DocsLink>`<T, U>`
 
 
 
@@ -377,7 +377,7 @@ class PromotionLineAction<T extends ConfigArgs = ConfigArgs, U extends Array<Pro
     constructor(config: PromotionLineActionConfig<T, U>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink><T, U>
+* Extends: <DocsLink href="/reference/typescript-api/promotions/promotion-action#promotionaction">`PromotionAction`</DocsLink>`<T, U>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/promotions/promotion-condition.mdx

@@ -16,7 +16,7 @@ class PromotionCondition<T extends ConfigArgs = ConfigArgs, C extends string = s
     check(ctx: RequestContext, order: Order, args: ConfigArg[], promotion: Promotion) => Promise<R>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 
@@ -59,7 +59,7 @@ interface PromotionConditionConfig<T extends ConfigArgs, C extends string, R ext
     priorityValue?: number;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 2 - 2
docs/docs/reference/typescript-api/request/request-context.mdx

@@ -87,7 +87,7 @@ Returns `true` if there is an active Session & User associated with this request
 and that User has **at least one** of the specified permissions on the active Channel.
 
 This method uses OR logic - it checks if the user has ANY of the given permissions,
-not ALL of them. For AND logic, use {@link userHasAllPermissions}.
+not ALL of them. For AND logic, use `userHasAllPermissions`.
 
 *Example*
 
@@ -103,7 +103,7 @@ Returns `true` if there is an active Session & User associated with this request
 and that User has **all** of the specified permissions on the active Channel.
 
 This method uses AND logic - it checks if the user has EVERY one of the given permissions.
-For OR logic (any permission), use {@link userHasPermissions}.
+For OR logic (any permission), use `userHasPermissions`.
 
 *Example*
 

+ 1 - 1
docs/docs/reference/typescript-api/shipping/shipping-calculator.mdx

@@ -37,7 +37,7 @@ class ShippingCalculator<T extends ConfigArgs = ConfigArgs> extends Configurable
     constructor(config: ShippingCalculatorConfig<T>)
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/shipping/shipping-eligibility-checker-config.mdx

@@ -13,7 +13,7 @@ interface ShippingEligibilityCheckerConfig<T extends ConfigArgs> extends Configu
     shouldRunCheck?: ShouldRunCheckFn<T>;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/configurable-operation-def-options#configurableoperationdefoptions">`ConfigurableOperationDefOptions`</DocsLink>`<T>`
 
 
 

+ 1 - 1
docs/docs/reference/typescript-api/shipping/shipping-eligibility-checker.mdx

@@ -29,7 +29,7 @@ class ShippingEligibilityChecker<T extends ConfigArgs = ConfigArgs> extends Conf
     toJSON() => ;
 }
 ```
-* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink><T>
+* Extends: <DocsLink href="/reference/typescript-api/configurable-operation-def/#configurableoperationdef">`ConfigurableOperationDef`</DocsLink>`<T>`
 
 
 

+ 10 - 0
scripts/docs/generate-graphql-docs.ts

@@ -512,6 +512,16 @@ function generateGraphqlDocs(hugoOutputPath: string) {
     fs.writeFileSync(path.join(hugoOutputPath, FileName.INPUT + '.mdx'), inputTypesOutput);
     fs.writeFileSync(path.join(hugoOutputPath, FileName.ENUM + '.mdx'), enumsOutput);
 
+    // Generate _index.mdx for the API section
+    const apiTitle = targetApi === 'admin' ? 'Admin API' : 'Shop API';
+    const indexOutput = generateFrontMatter(apiTitle) + '\n\n' +
+        `<LinkCard href="${docsUrl}${FileName.QUERY}" title="Queries" />\n` +
+        `<LinkCard href="${docsUrl}${FileName.MUTATION}" title="Mutations" />\n` +
+        `<LinkCard href="${docsUrl}${FileName.OBJECT}" title="Types" />\n` +
+        `<LinkCard href="${docsUrl}${FileName.INPUT}" title="Input Objects" />\n` +
+        `<LinkCard href="${docsUrl}${FileName.ENUM}" title="Enums" />\n`;
+    fs.writeFileSync(path.join(hugoOutputPath, '_index.mdx'), indexOutput);
+
     console.log(`Generated 5 GraphQL API docs in ${+new Date() - timeStart}ms`);
 }
 

+ 93 - 23
scripts/docs/typescript-docs-renderer.ts

@@ -468,51 +468,118 @@ export class TypescriptDocsRenderer {
 
     /**
      * This function takes a string representing a type (e.g. "Array<ShippingMethod>") and turns
-     * and known types (e.g. "ShippingMethod") into hyperlinks.
+     * known types (e.g. "ShippingMethod") into hyperlinks, while wrapping generic syntax in backticks
+     * to prevent MDX from interpreting them as JSX.
      */
     private renderType(type: string, knownTypeMap: TypeMap, docsUrl: string): string {
-        let typeText = type
+        const typeText = type
             .trim()
             // encode HTML entities
             .replace(/[\u00A0-\u9999\&]/gim, i => '&#' + i.charCodeAt(0) + ';')
             // remove newlines
             .replace(/\n/g, ' ');
 
-        for (const [key, val] of knownTypeMap) {
-            const re = new RegExp(`(?!<a[^>]*>)\\b${key}\\b(?![^<]*<\/a>)`, 'g');
-            const strippedIndex = val.replace(/\/_index$/, '');
-            typeText = typeText.replace(re, `<a href='${docsUrl}/${strippedIndex}'>${key}</a>`);
+        // Sort known types by length (longest first) to avoid partial matches
+        const sortedTypes = [...knownTypeMap.entries()].sort((a, b) => b[0].length - a[0].length);
+
+        let result = '';
+        let remaining = typeText;
+
+        while (remaining.length > 0) {
+            // Try to match a known type at the current position
+            let matched = false;
+            for (const [key, val] of sortedTypes) {
+                const re = new RegExp(`^(${key})\\b`);
+                const match = remaining.match(re);
+                if (match) {
+                    const strippedIndex = val.replace(/\/_index$/, '');
+                    result += `<a href='${docsUrl}/${strippedIndex}'>${key}</a>`;
+                    remaining = remaining.slice(match[0].length);
+                    matched = true;
+                    break;
+                }
+            }
+
+            if (!matched) {
+                // Find the next known type in the remaining string
+                let nextTypeIndex = remaining.length;
+                for (const [key] of sortedTypes) {
+                    const re = new RegExp(`\\b(${key})\\b`);
+                    const match = remaining.match(re);
+                    if (match && match.index !== undefined && match.index > 0 && match.index < nextTypeIndex) {
+                        nextTypeIndex = match.index;
+                    }
+                }
+
+                // Extract the non-type part (syntax like <, >, [], commas, etc.)
+                const nonTypePart = remaining.slice(0, nextTypeIndex);
+                // Angle brackets inside JS template literals in JSX don't need escaping
+                result += nonTypePart;
+                remaining = remaining.slice(nextTypeIndex);
+            }
         }
-        return typeText;
+
+        return result;
     }
 
     /**
      * Renders a heritage clause type (extends/implements) with DocsLink and backticks.
+     * Processes the type string piece by piece to correctly handle nested generics.
      */
     private renderHeritageType(type: string, knownTypeMap: TypeMap, docsUrl: string): string {
-        let typeText = type
+        const typeText = type
             .trim()
             // encode HTML entities
             .replace(/[\u00A0-\u9999\&]/gim, i => '&#' + i.charCodeAt(0) + ';')
             // remove newlines
             .replace(/\n/g, ' ');
 
-        for (const [key, val] of knownTypeMap) {
-            const re = new RegExp(`(?!<DocsLink[^>]*>)\\b${key}\\b(?![^<]*<\\/DocsLink>)`, 'g');
-            const strippedIndex = val.replace(/\/_index$/, '');
-            typeText = typeText.replace(re, `<DocsLink href="${docsUrl}/${strippedIndex}">\`${key}\`</DocsLink>`);
-        }
-        // Wrap generic type wrappers (like Partial<, Array<) in backticks when they precede <DocsLink
-        // to prevent MDX from interpreting consecutive < characters as nested JSX
-        typeText = typeText.replace(/(\w+<)(<DocsLink)/g, '`$1`$2');
-        // Wrap any trailing generic type closing brackets in backticks to prevent MDX issues
-        typeText = typeText.replace(/(<\/DocsLink>)(>+)/g, '$1`$2`');
-        // If no DocsLink was added (type not in knownTypeMap) but the type contains
-        // angle brackets, wrap the entire type in backticks
-        if (!typeText.includes('<DocsLink') && typeText.includes('<')) {
-            typeText = '`' + typeText + '`';
+        // Sort known types by length (longest first) to avoid partial matches
+        const sortedTypes = [...knownTypeMap.entries()].sort((a, b) => b[0].length - a[0].length);
+
+        let result = '';
+        let remaining = typeText;
+
+        while (remaining.length > 0) {
+            // Try to match a known type at the current position
+            let matched = false;
+            for (const [key, val] of sortedTypes) {
+                const re = new RegExp(`^(${key})\\b`);
+                const match = remaining.match(re);
+                if (match) {
+                    const strippedIndex = val.replace(/\/_index$/, '');
+                    result += `<DocsLink href="${docsUrl}/${strippedIndex}">\`${key}\`</DocsLink>`;
+                    remaining = remaining.slice(match[0].length);
+                    matched = true;
+                    break;
+                }
+            }
+
+            if (!matched) {
+                // Find the next known type in the remaining string
+                let nextTypeIndex = remaining.length;
+                for (const [key] of sortedTypes) {
+                    const re = new RegExp(`\\b(${key})\\b`);
+                    const match = remaining.match(re);
+                    if (match && match.index !== undefined && match.index > 0 && match.index < nextTypeIndex) {
+                        nextTypeIndex = match.index;
+                    }
+                }
+
+                // Extract the non-type part (syntax like <, >, [], commas, etc.)
+                const nonTypePart = remaining.slice(0, nextTypeIndex);
+                // Wrap in backticks if it contains angle brackets to prevent MDX parsing issues
+                // (heritage clauses are rendered directly in markdown text, not inside JSX attributes)
+                if (nonTypePart.includes('<') || nonTypePart.includes('>')) {
+                    result += '`' + nonTypePart + '`';
+                } else {
+                    result += nonTypePart;
+                }
+                remaining = remaining.slice(nextTypeIndex);
+            }
         }
-        return typeText;
+
+        return result;
     }
 
     /**
@@ -523,6 +590,9 @@ export class TypescriptDocsRenderer {
             const re = new RegExp(`{@link\\s*${key}}`, 'g');
             description = description.replace(re, `<DocsLink href="${docsUrl}/${val}">${key}</DocsLink>`);
         }
+        // Escape any remaining {@link ...} references that weren't matched by known types
+        // Convert them to inline code to prevent MDX parsing issues with { }
+        description = description.replace(/\{@link\s*(\S+)\}/g, '`$1`');
         return description;
     }
 }