@vendure/docs 0.0.0-202601161541

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (968) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/manifest.d.ts +3 -0
  6. package/dist/manifest.d.ts.map +1 -0
  7. package/dist/manifest.js +857 -0
  8. package/dist/manifest.js.map +1 -0
  9. package/docs/guides/core-concepts/auth/admin-role.webp +0 -0
  10. package/docs/guides/core-concepts/auth/admin.webp +0 -0
  11. package/docs/guides/core-concepts/auth/customer.webp +0 -0
  12. package/docs/guides/core-concepts/auth/index.md +557 -0
  13. package/docs/guides/core-concepts/auth/roles.webp +0 -0
  14. package/docs/guides/core-concepts/channels/channel-token.webp +0 -0
  15. package/docs/guides/core-concepts/channels/channels.webp +0 -0
  16. package/docs/guides/core-concepts/channels/channels_currencies_diagram.png +0 -0
  17. package/docs/guides/core-concepts/channels/channels_diagram.png +0 -0
  18. package/docs/guides/core-concepts/channels/channels_prices_diagram.png +0 -0
  19. package/docs/guides/core-concepts/channels/default-currency.webp +0 -0
  20. package/docs/guides/core-concepts/channels/index.md +154 -0
  21. package/docs/guides/core-concepts/channels/variant-prices.webp +0 -0
  22. package/docs/guides/core-concepts/collections/collection-filters.webp +0 -0
  23. package/docs/guides/core-concepts/collections/collections.webp +0 -0
  24. package/docs/guides/core-concepts/collections/filter-inheritance.webp +0 -0
  25. package/docs/guides/core-concepts/collections/index.mdx +125 -0
  26. package/docs/guides/core-concepts/customers/customer.webp +0 -0
  27. package/docs/guides/core-concepts/customers/index.mdx +21 -0
  28. package/docs/guides/core-concepts/email/email-plugin-flow.webp +0 -0
  29. package/docs/guides/core-concepts/email/index.mdx +155 -0
  30. package/docs/guides/core-concepts/images-assets/asset-flow.webp +0 -0
  31. package/docs/guides/core-concepts/images-assets/asset-tags.webp +0 -0
  32. package/docs/guides/core-concepts/images-assets/index.mdx +42 -0
  33. package/docs/guides/core-concepts/money/index.mdx +246 -0
  34. package/docs/guides/core-concepts/orders/custom-order-ui.webp +0 -0
  35. package/docs/guides/core-concepts/orders/index.md +366 -0
  36. package/docs/guides/core-concepts/orders/order-process.webp +0 -0
  37. package/docs/guides/core-concepts/orders/order.webp +0 -0
  38. package/docs/guides/core-concepts/payment/index.md +410 -0
  39. package/docs/guides/core-concepts/payment/payment-method.webp +0 -0
  40. package/docs/guides/core-concepts/payment/payment_sequence_one_step.png +0 -0
  41. package/docs/guides/core-concepts/payment/payment_sequence_two_step.png +0 -0
  42. package/docs/guides/core-concepts/products/facets.webp +0 -0
  43. package/docs/guides/core-concepts/products/index.mdx +59 -0
  44. package/docs/guides/core-concepts/products/product-relations.webp +0 -0
  45. package/docs/guides/core-concepts/products/products-variants.webp +0 -0
  46. package/docs/guides/core-concepts/promotions/index.md +324 -0
  47. package/docs/guides/core-concepts/shipping/index.md +225 -0
  48. package/docs/guides/core-concepts/shipping/shipping-method.webp +0 -0
  49. package/docs/guides/core-concepts/stock-control/global-stock-control.webp +0 -0
  50. package/docs/guides/core-concepts/stock-control/index.md +233 -0
  51. package/docs/guides/core-concepts/stock-control/stock-levels.webp +0 -0
  52. package/docs/guides/core-concepts/taxes/index.mdx +76 -0
  53. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/01-create-space.webp +0 -0
  54. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/02-space-access-keys.webp +0 -0
  55. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/03-create-app.webp +0 -0
  56. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/04-configure-server.webp +0 -0
  57. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/05-open-server-settings.webp +0 -0
  58. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/06-admin-app-route.webp +0 -0
  59. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/07-open-app.webp +0 -0
  60. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/deploy-to-do-app-platform.webp +0 -0
  61. package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/index.md +246 -0
  62. package/docs/guides/deployment/deploy-to-google-cloud-run/deploy-to-gcr.webp +0 -0
  63. package/docs/guides/deployment/deploy-to-google-cloud-run/index.md +53 -0
  64. package/docs/guides/deployment/deploy-to-northflank/01-create-template-screen.webp +0 -0
  65. package/docs/guides/deployment/deploy-to-northflank/02-paste-config.webp +0 -0
  66. package/docs/guides/deployment/deploy-to-northflank/03-run-template.webp +0 -0
  67. package/docs/guides/deployment/deploy-to-northflank/04-find-project.webp +0 -0
  68. package/docs/guides/deployment/deploy-to-northflank/05-server-service.webp +0 -0
  69. package/docs/guides/deployment/deploy-to-northflank/06-find-url.webp +0 -0
  70. package/docs/guides/deployment/deploy-to-northflank/deploy-to-northflank.webp +0 -0
  71. package/docs/guides/deployment/deploy-to-northflank/index.md +606 -0
  72. package/docs/guides/deployment/deploy-to-railway/01-new-service.webp +0 -0
  73. package/docs/guides/deployment/deploy-to-railway/02-env-vars.webp +0 -0
  74. package/docs/guides/deployment/deploy-to-railway/03-test-server.webp +0 -0
  75. package/docs/guides/deployment/deploy-to-railway/deploy-to-railway.webp +0 -0
  76. package/docs/guides/deployment/deploy-to-railway/index.md +202 -0
  77. package/docs/guides/deployment/deploy-to-render/01-create-db.webp +0 -0
  78. package/docs/guides/deployment/deploy-to-render/02-env-group.webp +0 -0
  79. package/docs/guides/deployment/deploy-to-render/03-db-connection.webp +0 -0
  80. package/docs/guides/deployment/deploy-to-render/04-link-env-group.webp +0 -0
  81. package/docs/guides/deployment/deploy-to-render/05-server-url.webp +0 -0
  82. package/docs/guides/deployment/deploy-to-render/deploy-to-render.webp +0 -0
  83. package/docs/guides/deployment/deploy-to-render/index.md +221 -0
  84. package/docs/guides/deployment/deploying-admin-ui.md +130 -0
  85. package/docs/guides/deployment/getting-data-into-production.md +50 -0
  86. package/docs/guides/deployment/horizontal-scaling.md +75 -0
  87. package/docs/guides/deployment/production-configuration/env-var-ui.webp +0 -0
  88. package/docs/guides/deployment/production-configuration/index.md +140 -0
  89. package/docs/guides/deployment/server-resource-requirements.md +29 -0
  90. package/docs/guides/deployment/using-docker.md +193 -0
  91. package/docs/guides/developer-guide/cache/cache-service.webp +0 -0
  92. package/docs/guides/developer-guide/cache/index.mdx +327 -0
  93. package/docs/guides/developer-guide/channel-aware/index.md +117 -0
  94. package/docs/guides/developer-guide/cli/add-command.webp +0 -0
  95. package/docs/guides/developer-guide/cli/index.md +418 -0
  96. package/docs/guides/developer-guide/cli/migrate-command.webp +0 -0
  97. package/docs/guides/developer-guide/cli/schema-command.webp +0 -0
  98. package/docs/guides/developer-guide/configuration/index.md +226 -0
  99. package/docs/guides/developer-guide/custom-fields/custom-fields-data-table.webp +0 -0
  100. package/docs/guides/developer-guide/custom-fields/custom-fields-ui.webp +0 -0
  101. package/docs/guides/developer-guide/custom-fields/index.md +1423 -0
  102. package/docs/guides/developer-guide/custom-permissions/index.md +186 -0
  103. package/docs/guides/developer-guide/custom-strategies-in-plugins/index.mdx +467 -0
  104. package/docs/guides/developer-guide/database-entity/index.md +136 -0
  105. package/docs/guides/developer-guide/dataloaders/index.md +137 -0
  106. package/docs/guides/developer-guide/db-subscribers/index.md +115 -0
  107. package/docs/guides/developer-guide/error-handling/index.mdx +324 -0
  108. package/docs/guides/developer-guide/events/index.mdx +406 -0
  109. package/docs/guides/developer-guide/extend-graphql-api/index.md +501 -0
  110. package/docs/guides/developer-guide/has-custom-fields/index.md +174 -0
  111. package/docs/guides/developer-guide/importing-data/index.md +488 -0
  112. package/docs/guides/developer-guide/importing-data/reindex.webp +0 -0
  113. package/docs/guides/developer-guide/logging/index.md +77 -0
  114. package/docs/guides/developer-guide/migrating-from-v1/breaking-api-changes.md +213 -0
  115. package/docs/guides/developer-guide/migrating-from-v1/database-migration.md +39 -0
  116. package/docs/guides/developer-guide/migrating-from-v1/index.md +41 -0
  117. package/docs/guides/developer-guide/migrating-from-v1/storefront-migration.md +30 -0
  118. package/docs/guides/developer-guide/migrations/index.md +197 -0
  119. package/docs/guides/developer-guide/migrations/migration.webp +0 -0
  120. package/docs/guides/developer-guide/nest-devtools/index.md +74 -0
  121. package/docs/guides/developer-guide/nest-devtools/nest-devtools-bootstrap-perf.webp +0 -0
  122. package/docs/guides/developer-guide/nest-devtools/nest-devtools-graph.webp +0 -0
  123. package/docs/guides/developer-guide/overview/Vendure_docs-architecture.webp +0 -0
  124. package/docs/guides/developer-guide/overview/index.md +40 -0
  125. package/docs/guides/developer-guide/plugins/index.mdx +806 -0
  126. package/docs/guides/developer-guide/rest-endpoint/index.md +99 -0
  127. package/docs/guides/developer-guide/scheduled-tasks/index.md +298 -0
  128. package/docs/guides/developer-guide/security/index.md +264 -0
  129. package/docs/guides/developer-guide/settings-store/index.mdx +553 -0
  130. package/docs/guides/developer-guide/stand-alone-scripts/index.md +119 -0
  131. package/docs/guides/developer-guide/strategies-configurable-operations/collection-filters-args.webp +0 -0
  132. package/docs/guides/developer-guide/strategies-configurable-operations/collection-filters.webp +0 -0
  133. package/docs/guides/developer-guide/strategies-configurable-operations/index.mdx +373 -0
  134. package/docs/guides/developer-guide/testing/index.md +254 -0
  135. package/docs/guides/developer-guide/the-api-layer/Vendure_docs-api_request.webp +0 -0
  136. package/docs/guides/developer-guide/the-api-layer/index.mdx +474 -0
  137. package/docs/guides/developer-guide/the-service-layer/index.mdx +311 -0
  138. package/docs/guides/developer-guide/translatable/index.md +224 -0
  139. package/docs/guides/developer-guide/translations/index.md +165 -0
  140. package/docs/guides/developer-guide/updating/index.md +79 -0
  141. package/docs/guides/developer-guide/uploading-files/index.md +220 -0
  142. package/docs/guides/developer-guide/worker-job-queue/Vendure_docs-job-queue-2.webp +0 -0
  143. package/docs/guides/developer-guide/worker-job-queue/Vendure_docs-job-queue-3.webp +0 -0
  144. package/docs/guides/developer-guide/worker-job-queue/Vendure_docs-job-queue.webp +0 -0
  145. package/docs/guides/developer-guide/worker-job-queue/index.mdx +522 -0
  146. package/docs/guides/developer-guide/worker-job-queue/worker-job-queue.webp +0 -0
  147. package/docs/guides/extending-the-admin-ui/add-actions-to-pages/index.md +233 -0
  148. package/docs/guides/extending-the-admin-ui/add-actions-to-pages/ui-extensions-actionbar-dropdown.webp +0 -0
  149. package/docs/guides/extending-the-admin-ui/add-actions-to-pages/ui-extensions-actionbar.webp +0 -0
  150. package/docs/guides/extending-the-admin-ui/adding-ui-translations/index.md +113 -0
  151. package/docs/guides/extending-the-admin-ui/adding-ui-translations/ui-translations-01.webp +0 -0
  152. package/docs/guides/extending-the-admin-ui/admin-ui-theming-branding/index.md +133 -0
  153. package/docs/guides/extending-the-admin-ui/alerts/alerts-01.webp +0 -0
  154. package/docs/guides/extending-the-admin-ui/alerts/index.md +56 -0
  155. package/docs/guides/extending-the-admin-ui/bulk-actions/bulk-actions-screenshot.webp +0 -0
  156. package/docs/guides/extending-the-admin-ui/bulk-actions/index.md +78 -0
  157. package/docs/guides/extending-the-admin-ui/creating-detail-views/index.md +332 -0
  158. package/docs/guides/extending-the-admin-ui/creating-list-views/index.md +331 -0
  159. package/docs/guides/extending-the-admin-ui/custom-data-table-components/custom-data-table-location.webp +0 -0
  160. package/docs/guides/extending-the-admin-ui/custom-data-table-components/custom-data-table.webp +0 -0
  161. package/docs/guides/extending-the-admin-ui/custom-data-table-components/index.md +111 -0
  162. package/docs/guides/extending-the-admin-ui/custom-detail-components/detail-component.webp +0 -0
  163. package/docs/guides/extending-the-admin-ui/custom-detail-components/index.md +198 -0
  164. package/docs/guides/extending-the-admin-ui/custom-form-inputs/index.md +285 -0
  165. package/docs/guides/extending-the-admin-ui/custom-form-inputs/ui-extensions-custom-field-default.webp +0 -0
  166. package/docs/guides/extending-the-admin-ui/custom-form-inputs/ui-extensions-custom-field-slider.webp +0 -0
  167. package/docs/guides/extending-the-admin-ui/custom-timeline-components/index.md +79 -0
  168. package/docs/guides/extending-the-admin-ui/custom-timeline-components/timeline-entry.webp +0 -0
  169. package/docs/guides/extending-the-admin-ui/dashboard-widgets/dashboard-widgets.webp +0 -0
  170. package/docs/guides/extending-the-admin-ui/dashboard-widgets/index.md +149 -0
  171. package/docs/guides/extending-the-admin-ui/defining-routes/index.md +777 -0
  172. package/docs/guides/extending-the-admin-ui/defining-routes/route-area.webp +0 -0
  173. package/docs/guides/extending-the-admin-ui/defining-routes/ui-extensions-greeter.webp +0 -0
  174. package/docs/guides/extending-the-admin-ui/getting-started/index.md +656 -0
  175. package/docs/guides/extending-the-admin-ui/getting-started/provider-extension-points.webp +0 -0
  176. package/docs/guides/extending-the-admin-ui/nav-menu/index.md +97 -0
  177. package/docs/guides/extending-the-admin-ui/nav-menu/nav-menu-id.webp +0 -0
  178. package/docs/guides/extending-the-admin-ui/nav-menu/ui-extensions-navbar.webp +0 -0
  179. package/docs/guides/extending-the-admin-ui/page-tabs/index.md +44 -0
  180. package/docs/guides/extending-the-admin-ui/page-tabs/ui-extensions-tabs.webp +0 -0
  181. package/docs/guides/extending-the-admin-ui/ui-library/buttons.webp +0 -0
  182. package/docs/guides/extending-the-admin-ui/ui-library/card.webp +0 -0
  183. package/docs/guides/extending-the-admin-ui/ui-library/form-inputs.webp +0 -0
  184. package/docs/guides/extending-the-admin-ui/ui-library/icons.webp +0 -0
  185. package/docs/guides/extending-the-admin-ui/ui-library/index.md +356 -0
  186. package/docs/guides/extending-the-admin-ui/ui-library/layout.webp +0 -0
  187. package/docs/guides/extending-the-admin-ui/using-other-frameworks/index.md +205 -0
  188. package/docs/guides/extending-the-admin-ui/using-other-frameworks/ui-extensions-cra.jpg +0 -0
  189. package/docs/guides/extending-the-dashboard/alerts/alert.webp +0 -0
  190. package/docs/guides/extending-the-dashboard/alerts/index.md +89 -0
  191. package/docs/guides/extending-the-dashboard/creating-pages/detail-pages.md +316 -0
  192. package/docs/guides/extending-the-dashboard/creating-pages/index.md +90 -0
  193. package/docs/guides/extending-the-dashboard/creating-pages/list-pages.md +206 -0
  194. package/docs/guides/extending-the-dashboard/creating-pages/tabbed-page-example.webp +0 -0
  195. package/docs/guides/extending-the-dashboard/creating-pages/tabbed-pages.md +144 -0
  196. package/docs/guides/extending-the-dashboard/custom-form-components/color-picker.webp +0 -0
  197. package/docs/guides/extending-the-dashboard/custom-form-components/dev-mode.webp +0 -0
  198. package/docs/guides/extending-the-dashboard/custom-form-components/example-currency-input.webp +0 -0
  199. package/docs/guides/extending-the-dashboard/custom-form-components/example-email-input.webp +0 -0
  200. package/docs/guides/extending-the-dashboard/custom-form-components/example-slug-input.webp +0 -0
  201. package/docs/guides/extending-the-dashboard/custom-form-components/example-tags-input.webp +0 -0
  202. package/docs/guides/extending-the-dashboard/custom-form-components/form-component-examples.mdx +445 -0
  203. package/docs/guides/extending-the-dashboard/custom-form-components/index.md +465 -0
  204. package/docs/guides/extending-the-dashboard/custom-form-components/locator.webp +0 -0
  205. package/docs/guides/extending-the-dashboard/custom-form-components/relation-selectors.md +687 -0
  206. package/docs/guides/extending-the-dashboard/customizing-pages/action-bar-button.webp +0 -0
  207. package/docs/guides/extending-the-dashboard/customizing-pages/action-bar-dropdown.webp +0 -0
  208. package/docs/guides/extending-the-dashboard/customizing-pages/action-bar-items.md +272 -0
  209. package/docs/guides/extending-the-dashboard/customizing-pages/custom-widget.webp +0 -0
  210. package/docs/guides/extending-the-dashboard/customizing-pages/customizing-detail-pages.md +129 -0
  211. package/docs/guides/extending-the-dashboard/customizing-pages/customizing-list-pages.md +93 -0
  212. package/docs/guides/extending-the-dashboard/customizing-pages/customizing-login-page.md +66 -0
  213. package/docs/guides/extending-the-dashboard/customizing-pages/history-entries.md +43 -0
  214. package/docs/guides/extending-the-dashboard/customizing-pages/history-entry.webp +0 -0
  215. package/docs/guides/extending-the-dashboard/customizing-pages/index.md +10 -0
  216. package/docs/guides/extending-the-dashboard/customizing-pages/insights-widgets.md +57 -0
  217. package/docs/guides/extending-the-dashboard/customizing-pages/login-page.webp +0 -0
  218. package/docs/guides/extending-the-dashboard/customizing-pages/page-blocks.md +244 -0
  219. package/docs/guides/extending-the-dashboard/data-fetching/index.md +126 -0
  220. package/docs/guides/extending-the-dashboard/data-fetching/type-inference.webp +0 -0
  221. package/docs/guides/extending-the-dashboard/deployment/index.md +200 -0
  222. package/docs/guides/extending-the-dashboard/extending-overview/dev-mode.webp +0 -0
  223. package/docs/guides/extending-the-dashboard/extending-overview/index.md +228 -0
  224. package/docs/guides/extending-the-dashboard/extending-overview/location-id.webp +0 -0
  225. package/docs/guides/extending-the-dashboard/getting-started/detail-view.webp +0 -0
  226. package/docs/guides/extending-the-dashboard/getting-started/index.md +194 -0
  227. package/docs/guides/extending-the-dashboard/getting-started/list-view-empty.webp +0 -0
  228. package/docs/guides/extending-the-dashboard/getting-started/list-view-full.webp +0 -0
  229. package/docs/guides/extending-the-dashboard/getting-started/page-block.webp +0 -0
  230. package/docs/guides/extending-the-dashboard/getting-started/test-page.webp +0 -0
  231. package/docs/guides/extending-the-dashboard/localization/index.md +94 -0
  232. package/docs/guides/extending-the-dashboard/migration/index.md +1902 -0
  233. package/docs/guides/extending-the-dashboard/navigation/dev-mode-nav.webp +0 -0
  234. package/docs/guides/extending-the-dashboard/navigation/index.md +322 -0
  235. package/docs/guides/extending-the-dashboard/navigation/unauthenticated-page.webp +0 -0
  236. package/docs/guides/extending-the-dashboard/tech-stack/index.md +395 -0
  237. package/docs/guides/extending-the-dashboard/theming/index.md +180 -0
  238. package/docs/guides/extending-the-dashboard/theming/show-colour-value-inspection.gif +0 -0
  239. package/docs/guides/getting-started/graphql-intro/index.mdx +572 -0
  240. package/docs/guides/getting-started/installation/app-screens.webp +0 -0
  241. package/docs/guides/getting-started/installation/index.md +234 -0
  242. package/docs/guides/getting-started/try-the-api/graphiql-docs.jpeg +0 -0
  243. package/docs/guides/getting-started/try-the-api/graphiql.jpeg +0 -0
  244. package/docs/guides/getting-started/try-the-api/index.mdx +238 -0
  245. package/docs/guides/how-to/cms-integration-plugin/index.mdx +2083 -0
  246. package/docs/guides/how-to/codegen/index.md +280 -0
  247. package/docs/guides/how-to/configurable-products/index.md +138 -0
  248. package/docs/guides/how-to/digital-products/index.mdx +485 -0
  249. package/docs/guides/how-to/digital-products/product-variant.webp +0 -0
  250. package/docs/guides/how-to/digital-products/shipping-method.webp +0 -0
  251. package/docs/guides/how-to/github-oauth-authentication/index.mdx +360 -0
  252. package/docs/guides/how-to/google-oauth-authentication/index.mdx +494 -0
  253. package/docs/guides/how-to/multi-vendor-marketplaces/aggregate-order.webp +0 -0
  254. package/docs/guides/how-to/multi-vendor-marketplaces/index.md +197 -0
  255. package/docs/guides/how-to/paginated-list/index.mdx +360 -0
  256. package/docs/guides/how-to/publish-plugin/index.mdx +402 -0
  257. package/docs/guides/how-to/s3-asset-storage/index.mdx +572 -0
  258. package/docs/guides/how-to/telemetry/grafana-logs.webp +0 -0
  259. package/docs/guides/how-to/telemetry/grafana-trace.webp +0 -0
  260. package/docs/guides/how-to/telemetry/index.md +260 -0
  261. package/docs/guides/how-to/telemetry/jaeger-trace.webp +0 -0
  262. package/docs/guides/storefront/active-order/index.mdx +201 -0
  263. package/docs/guides/storefront/checkout-flow/index.mdx +428 -0
  264. package/docs/guides/storefront/codegen/index.mdx +157 -0
  265. package/docs/guides/storefront/connect-api/index.mdx +677 -0
  266. package/docs/guides/storefront/customer-accounts/index.mdx +389 -0
  267. package/docs/guides/storefront/customer-accounts/pw-reset.webp +0 -0
  268. package/docs/guides/storefront/customer-accounts/verification.webp +0 -0
  269. package/docs/guides/storefront/listing-products/index.mdx +711 -0
  270. package/docs/guides/storefront/navigation-menu/index.mdx +157 -0
  271. package/docs/guides/storefront/order-workflow/index.md +231 -0
  272. package/docs/guides/storefront/order-workflow/order_class_diagram.png +0 -0
  273. package/docs/guides/storefront/order-workflow/order_state_diagram.png +0 -0
  274. package/docs/guides/storefront/product-detail/index.mdx +295 -0
  275. package/docs/guides/storefront/storefront-starters/angular-storefront.webp +0 -0
  276. package/docs/guides/storefront/storefront-starters/index.mdx +69 -0
  277. package/docs/guides/storefront/storefront-starters/next-storefront.webp +0 -0
  278. package/docs/guides/storefront/storefront-starters/qwik-storefront.webp +0 -0
  279. package/docs/guides/storefront/storefront-starters/remix-storefront.webp +0 -0
  280. package/docs/reference/admin-ui-api/action-bar/action-bar-context.md +82 -0
  281. package/docs/reference/admin-ui-api/action-bar/action-bar-dropdown-menu-item.md +93 -0
  282. package/docs/reference/admin-ui-api/action-bar/action-bar-item.md +106 -0
  283. package/docs/reference/admin-ui-api/action-bar/action-bar-location-id.md +17 -0
  284. package/docs/reference/admin-ui-api/action-bar/add-action-bar-dropdown-menu-item.md +38 -0
  285. package/docs/reference/admin-ui-api/action-bar/add-action-bar-item.md +36 -0
  286. package/docs/reference/admin-ui-api/action-bar/index.md +5 -0
  287. package/docs/reference/admin-ui-api/action-bar/page-location-id.md +61 -0
  288. package/docs/reference/admin-ui-api/action-bar/router-link-definition.md +16 -0
  289. package/docs/reference/admin-ui-api/alerts/alert-config.md +88 -0
  290. package/docs/reference/admin-ui-api/alerts/alert-context.md +52 -0
  291. package/docs/reference/admin-ui-api/alerts/index.md +5 -0
  292. package/docs/reference/admin-ui-api/alerts/register-alert.md +23 -0
  293. package/docs/reference/admin-ui-api/bulk-actions/bulk-action.md +229 -0
  294. package/docs/reference/admin-ui-api/bulk-actions/index.md +5 -0
  295. package/docs/reference/admin-ui-api/bulk-actions/register-bulk-action.md +63 -0
  296. package/docs/reference/admin-ui-api/components/asset-picker-dialog-component.md +160 -0
  297. package/docs/reference/admin-ui-api/components/chip-component.md +63 -0
  298. package/docs/reference/admin-ui-api/components/currency-input-component.md +174 -0
  299. package/docs/reference/admin-ui-api/components/data-table-component.md +238 -0
  300. package/docs/reference/admin-ui-api/components/data-table2component.md +354 -0
  301. package/docs/reference/admin-ui-api/components/datetime-picker-component.md +262 -0
  302. package/docs/reference/admin-ui-api/components/dropdown-component.md +86 -0
  303. package/docs/reference/admin-ui-api/components/facet-value-selector-component.md +155 -0
  304. package/docs/reference/admin-ui-api/components/index.md +5 -0
  305. package/docs/reference/admin-ui-api/components/object-tree-component.md +86 -0
  306. package/docs/reference/admin-ui-api/components/order-state-label-component.md +41 -0
  307. package/docs/reference/admin-ui-api/components/product-variant-selector-component.md +75 -0
  308. package/docs/reference/admin-ui-api/components/rich-text-editor-component.md +108 -0
  309. package/docs/reference/admin-ui-api/components/zone-selector-component.md +124 -0
  310. package/docs/reference/admin-ui-api/custom-detail-components/custom-detail-component-config.md +41 -0
  311. package/docs/reference/admin-ui-api/custom-detail-components/custom-detail-component-location-id.md +36 -0
  312. package/docs/reference/admin-ui-api/custom-detail-components/custom-detail-component.md +36 -0
  313. package/docs/reference/admin-ui-api/custom-detail-components/index.md +5 -0
  314. package/docs/reference/admin-ui-api/custom-detail-components/register-custom-detail-component.md +69 -0
  315. package/docs/reference/admin-ui-api/custom-history-entry-components/customer-history-entry-component.md +32 -0
  316. package/docs/reference/admin-ui-api/custom-history-entry-components/history-entry-component.md +57 -0
  317. package/docs/reference/admin-ui-api/custom-history-entry-components/history-entry-config.md +35 -0
  318. package/docs/reference/admin-ui-api/custom-history-entry-components/index.md +5 -0
  319. package/docs/reference/admin-ui-api/custom-history-entry-components/order-history-entry-component.md +32 -0
  320. package/docs/reference/admin-ui-api/custom-history-entry-components/register-history-entry-component.md +79 -0
  321. package/docs/reference/admin-ui-api/custom-input-components/default-inputs.md +1034 -0
  322. package/docs/reference/admin-ui-api/custom-input-components/form-input-component.md +56 -0
  323. package/docs/reference/admin-ui-api/custom-input-components/index.md +5 -0
  324. package/docs/reference/admin-ui-api/custom-input-components/register-form-input-component.md +71 -0
  325. package/docs/reference/admin-ui-api/custom-table-components/custom-column-component.md +32 -0
  326. package/docs/reference/admin-ui-api/custom-table-components/data-table-component-config.md +48 -0
  327. package/docs/reference/admin-ui-api/custom-table-components/index.md +5 -0
  328. package/docs/reference/admin-ui-api/custom-table-components/register-data-table-component.md +55 -0
  329. package/docs/reference/admin-ui-api/dashboard-widgets/dashboard-widget-config.md +60 -0
  330. package/docs/reference/admin-ui-api/dashboard-widgets/index.md +5 -0
  331. package/docs/reference/admin-ui-api/dashboard-widgets/register-dashboard-widget.md +27 -0
  332. package/docs/reference/admin-ui-api/dashboard-widgets/set-dashboard-widget-layout.md +22 -0
  333. package/docs/reference/admin-ui-api/dashboard-widgets/widget-layout-definition.md +16 -0
  334. package/docs/reference/admin-ui-api/directives/if-multichannel-directive.md +41 -0
  335. package/docs/reference/admin-ui-api/directives/if-permissions-directive.md +43 -0
  336. package/docs/reference/admin-ui-api/directives/index.md +5 -0
  337. package/docs/reference/admin-ui-api/index.md +13 -0
  338. package/docs/reference/admin-ui-api/list-detail-views/base-detail-component.md +168 -0
  339. package/docs/reference/admin-ui-api/list-detail-views/base-entity-resolver.md +54 -0
  340. package/docs/reference/admin-ui-api/list-detail-views/base-list-component.md +155 -0
  341. package/docs/reference/admin-ui-api/list-detail-views/detail-component-with-resolver.md +52 -0
  342. package/docs/reference/admin-ui-api/list-detail-views/index.md +5 -0
  343. package/docs/reference/admin-ui-api/list-detail-views/typed-base-detail-component.md +51 -0
  344. package/docs/reference/admin-ui-api/list-detail-views/typed-base-list-component.md +125 -0
  345. package/docs/reference/admin-ui-api/nav-menu/add-nav-menu-item.md +52 -0
  346. package/docs/reference/admin-ui-api/nav-menu/add-nav-menu-section.md +47 -0
  347. package/docs/reference/admin-ui-api/nav-menu/index.md +5 -0
  348. package/docs/reference/admin-ui-api/nav-menu/nav-menu-item.md +66 -0
  349. package/docs/reference/admin-ui-api/nav-menu/nav-menu-section.md +83 -0
  350. package/docs/reference/admin-ui-api/nav-menu/navigation-types.md +38 -0
  351. package/docs/reference/admin-ui-api/pipes/asset-preview-pipe.md +41 -0
  352. package/docs/reference/admin-ui-api/pipes/duration-pipe.md +45 -0
  353. package/docs/reference/admin-ui-api/pipes/file-size-pipe.md +38 -0
  354. package/docs/reference/admin-ui-api/pipes/has-permission-pipe.md +51 -0
  355. package/docs/reference/admin-ui-api/pipes/index.md +5 -0
  356. package/docs/reference/admin-ui-api/pipes/locale-currency-name-pipe.md +47 -0
  357. package/docs/reference/admin-ui-api/pipes/locale-currency-pipe.md +54 -0
  358. package/docs/reference/admin-ui-api/pipes/locale-date-pipe.md +48 -0
  359. package/docs/reference/admin-ui-api/pipes/locale-language-name-pipe.md +47 -0
  360. package/docs/reference/admin-ui-api/pipes/locale-region-name-pipe.md +47 -0
  361. package/docs/reference/admin-ui-api/pipes/time-ago-pipe.md +44 -0
  362. package/docs/reference/admin-ui-api/react-components/action-bar.md +36 -0
  363. package/docs/reference/admin-ui-api/react-components/card.md +36 -0
  364. package/docs/reference/admin-ui-api/react-components/cds-icon.md +34 -0
  365. package/docs/reference/admin-ui-api/react-components/form-field.md +42 -0
  366. package/docs/reference/admin-ui-api/react-components/index.md +5 -0
  367. package/docs/reference/admin-ui-api/react-components/link.md +34 -0
  368. package/docs/reference/admin-ui-api/react-components/page-block.md +36 -0
  369. package/docs/reference/admin-ui-api/react-components/page-detail-layout.md +36 -0
  370. package/docs/reference/admin-ui-api/react-components/rich-text-editor.md +42 -0
  371. package/docs/reference/admin-ui-api/react-extensions/index.md +5 -0
  372. package/docs/reference/admin-ui-api/react-extensions/react-custom-detail-component-config.md +41 -0
  373. package/docs/reference/admin-ui-api/react-extensions/react-data-table-component-config.md +48 -0
  374. package/docs/reference/admin-ui-api/react-extensions/register-react-custom-detail-component.md +23 -0
  375. package/docs/reference/admin-ui-api/react-extensions/register-react-data-table-component.md +55 -0
  376. package/docs/reference/admin-ui-api/react-extensions/register-react-form-input-component.md +26 -0
  377. package/docs/reference/admin-ui-api/react-extensions/register-react-route-component-options.md +18 -0
  378. package/docs/reference/admin-ui-api/react-extensions/register-react-route-component.md +22 -0
  379. package/docs/reference/admin-ui-api/react-hooks/index.md +5 -0
  380. package/docs/reference/admin-ui-api/react-hooks/use-detail-component-data.md +39 -0
  381. package/docs/reference/admin-ui-api/react-hooks/use-form-control.md +36 -0
  382. package/docs/reference/admin-ui-api/react-hooks/use-injector.md +39 -0
  383. package/docs/reference/admin-ui-api/react-hooks/use-lazy-query.md +74 -0
  384. package/docs/reference/admin-ui-api/react-hooks/use-mutation.md +62 -0
  385. package/docs/reference/admin-ui-api/react-hooks/use-page-metadata.md +36 -0
  386. package/docs/reference/admin-ui-api/react-hooks/use-query.md +59 -0
  387. package/docs/reference/admin-ui-api/react-hooks/use-rich-text-editor.md +30 -0
  388. package/docs/reference/admin-ui-api/react-hooks/use-route-params.md +29 -0
  389. package/docs/reference/admin-ui-api/routes/index.md +5 -0
  390. package/docs/reference/admin-ui-api/routes/register-route-component-options.md +28 -0
  391. package/docs/reference/admin-ui-api/routes/register-route-component.md +57 -0
  392. package/docs/reference/admin-ui-api/services/data-service.md +142 -0
  393. package/docs/reference/admin-ui-api/services/index.md +5 -0
  394. package/docs/reference/admin-ui-api/services/modal-service.md +199 -0
  395. package/docs/reference/admin-ui-api/services/notification-service.md +126 -0
  396. package/docs/reference/admin-ui-api/tabs/index.md +5 -0
  397. package/docs/reference/admin-ui-api/tabs/page-tab-config.md +70 -0
  398. package/docs/reference/admin-ui-api/tabs/register-page-tab.md +38 -0
  399. package/docs/reference/admin-ui-api/ui-devkit/admin-ui-extension.md +417 -0
  400. package/docs/reference/admin-ui-api/ui-devkit/compile-ui-extensions.md +22 -0
  401. package/docs/reference/admin-ui-api/ui-devkit/helpers.md +39 -0
  402. package/docs/reference/admin-ui-api/ui-devkit/index.md +5 -0
  403. package/docs/reference/admin-ui-api/ui-devkit/ui-devkit-client.md +160 -0
  404. package/docs/reference/admin-ui-api/ui-devkit/ui-extension-build-command.md +16 -0
  405. package/docs/reference/admin-ui-api/ui-devkit/ui-extension-compiler-options.md +118 -0
  406. package/docs/reference/admin-ui-api/ui-devkit/ui-extension-compiler-process-argument.md +16 -0
  407. package/docs/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options.md +67 -0
  408. package/docs/reference/core-plugins/admin-ui-plugin/index.md +94 -0
  409. package/docs/reference/core-plugins/asset-server-plugin/asset-server-options.md +106 -0
  410. package/docs/reference/core-plugins/asset-server-plugin/cache-config.md +36 -0
  411. package/docs/reference/core-plugins/asset-server-plugin/hashed-asset-naming-strategy.md +47 -0
  412. package/docs/reference/core-plugins/asset-server-plugin/image-transform-mode.md +21 -0
  413. package/docs/reference/core-plugins/asset-server-plugin/image-transform-preset.md +57 -0
  414. package/docs/reference/core-plugins/asset-server-plugin/image-transform-strategy.md +144 -0
  415. package/docs/reference/core-plugins/asset-server-plugin/index.md +189 -0
  416. package/docs/reference/core-plugins/asset-server-plugin/local-asset-storage-strategy.md +74 -0
  417. package/docs/reference/core-plugins/asset-server-plugin/preset-only-strategy.md +118 -0
  418. package/docs/reference/core-plugins/asset-server-plugin/s3asset-storage-strategy.md +225 -0
  419. package/docs/reference/core-plugins/asset-server-plugin/sharp-asset-preview-strategy.md +118 -0
  420. package/docs/reference/core-plugins/dashboard-plugin/dashboard-plugin-options.md +43 -0
  421. package/docs/reference/core-plugins/dashboard-plugin/index.md +106 -0
  422. package/docs/reference/core-plugins/elasticsearch-plugin/elasticsearch-options.md +695 -0
  423. package/docs/reference/core-plugins/elasticsearch-plugin/index.md +193 -0
  424. package/docs/reference/core-plugins/email-plugin/email-event-handler-with-async-data.md +33 -0
  425. package/docs/reference/core-plugins/email-plugin/email-event-handler.md +299 -0
  426. package/docs/reference/core-plugins/email-plugin/email-event-listener.md +42 -0
  427. package/docs/reference/core-plugins/email-plugin/email-generator.md +78 -0
  428. package/docs/reference/core-plugins/email-plugin/email-plugin-options.md +154 -0
  429. package/docs/reference/core-plugins/email-plugin/email-plugin-types.md +276 -0
  430. package/docs/reference/core-plugins/email-plugin/email-send-event.md +34 -0
  431. package/docs/reference/core-plugins/email-plugin/email-sender.md +92 -0
  432. package/docs/reference/core-plugins/email-plugin/email-utils.md +54 -0
  433. package/docs/reference/core-plugins/email-plugin/index.md +309 -0
  434. package/docs/reference/core-plugins/email-plugin/template-loader.md +96 -0
  435. package/docs/reference/core-plugins/email-plugin/transport-options.md +241 -0
  436. package/docs/reference/core-plugins/graphiql-plugin/index.md +89 -0
  437. package/docs/reference/core-plugins/harden-plugin/default-vendure-complexity-estimator.md +30 -0
  438. package/docs/reference/core-plugins/harden-plugin/harden-plugin-options.md +106 -0
  439. package/docs/reference/core-plugins/harden-plugin/index.md +169 -0
  440. package/docs/reference/core-plugins/index.md +5 -0
  441. package/docs/reference/core-plugins/job-queue-plugin/bull-mqjob-queue-plugin.md +211 -0
  442. package/docs/reference/core-plugins/job-queue-plugin/bull-mqjob-queue-strategy.md +93 -0
  443. package/docs/reference/core-plugins/job-queue-plugin/bull-mqplugin-options.md +142 -0
  444. package/docs/reference/core-plugins/job-queue-plugin/index.md +5 -0
  445. package/docs/reference/core-plugins/job-queue-plugin/pub-sub-job-queue-strategy.md +65 -0
  446. package/docs/reference/core-plugins/job-queue-plugin/pub-sub-plugin.md +36 -0
  447. package/docs/reference/core-plugins/payments-plugin/braintree-plugin.md +350 -0
  448. package/docs/reference/core-plugins/payments-plugin/index.md +5 -0
  449. package/docs/reference/core-plugins/payments-plugin/mollie-plugin.md +209 -0
  450. package/docs/reference/core-plugins/payments-plugin/stripe-plugin.md +355 -0
  451. package/docs/reference/core-plugins/sentry-plugin/index.md +158 -0
  452. package/docs/reference/core-plugins/sentry-plugin/sentry-plugin-options.md +32 -0
  453. package/docs/reference/core-plugins/sentry-plugin/sentry-service.md +47 -0
  454. package/docs/reference/core-plugins/stellate-plugin/index.md +277 -0
  455. package/docs/reference/core-plugins/stellate-plugin/purge-rule.md +91 -0
  456. package/docs/reference/core-plugins/stellate-plugin/stellate-plugin-options.md +65 -0
  457. package/docs/reference/core-plugins/stellate-plugin/stellate-service.md +71 -0
  458. package/docs/reference/core-plugins/telemetry-plugin/get-sdk-configuration.md +92 -0
  459. package/docs/reference/core-plugins/telemetry-plugin/index.md +131 -0
  460. package/docs/reference/core-plugins/telemetry-plugin/otel-logger.md +102 -0
  461. package/docs/reference/core-plugins/telemetry-plugin/register-method-hooks.md +46 -0
  462. package/docs/reference/core-plugins/telemetry-plugin/telemetry-plugin-options.md +77 -0
  463. package/docs/reference/dashboard/components/asset-gallery.md +127 -0
  464. package/docs/reference/dashboard/components/asset-picker-dialog.md +76 -0
  465. package/docs/reference/dashboard/components/channel-chip.md +22 -0
  466. package/docs/reference/dashboard/components/detail-page-button.md +49 -0
  467. package/docs/reference/dashboard/components/facet-value-chip.md +22 -0
  468. package/docs/reference/dashboard/components/facet-value-selector.md +85 -0
  469. package/docs/reference/dashboard/components/index.md +5 -0
  470. package/docs/reference/dashboard/components/permission-guard.md +63 -0
  471. package/docs/reference/dashboard/components/vendure-image.md +199 -0
  472. package/docs/reference/dashboard/detail-views/detail-page.md +91 -0
  473. package/docs/reference/dashboard/detail-views/index.md +5 -0
  474. package/docs/reference/dashboard/detail-views/use-detail-page.md +234 -0
  475. package/docs/reference/dashboard/detail-views/use-generated-form.md +105 -0
  476. package/docs/reference/dashboard/extensions-api/action-bar.md +66 -0
  477. package/docs/reference/dashboard/extensions-api/alerts.md +78 -0
  478. package/docs/reference/dashboard/extensions-api/data-tables.md +55 -0
  479. package/docs/reference/dashboard/extensions-api/define-dashboard-extension.md +142 -0
  480. package/docs/reference/dashboard/extensions-api/detail-forms.md +81 -0
  481. package/docs/reference/dashboard/extensions-api/form-components.md +188 -0
  482. package/docs/reference/dashboard/extensions-api/history-entries.md +246 -0
  483. package/docs/reference/dashboard/extensions-api/index.md +5 -0
  484. package/docs/reference/dashboard/extensions-api/login.md +113 -0
  485. package/docs/reference/dashboard/extensions-api/navigation.md +128 -0
  486. package/docs/reference/dashboard/extensions-api/page-blocks.md +143 -0
  487. package/docs/reference/dashboard/extensions-api/routes.md +69 -0
  488. package/docs/reference/dashboard/extensions-api/widgets.md +61 -0
  489. package/docs/reference/dashboard/form-components/affixed-input.md +34 -0
  490. package/docs/reference/dashboard/form-components/boolean-input.md +22 -0
  491. package/docs/reference/dashboard/form-components/checkbox-input.md +22 -0
  492. package/docs/reference/dashboard/form-components/date-time-input.md +22 -0
  493. package/docs/reference/dashboard/form-components/form-field-wrapper.md +80 -0
  494. package/docs/reference/dashboard/form-components/index.md +5 -0
  495. package/docs/reference/dashboard/form-components/money-input.md +23 -0
  496. package/docs/reference/dashboard/form-components/number-input.md +22 -0
  497. package/docs/reference/dashboard/form-components/password-input.md +22 -0
  498. package/docs/reference/dashboard/form-components/rich-text-input.md +22 -0
  499. package/docs/reference/dashboard/form-components/slug-input.md +57 -0
  500. package/docs/reference/dashboard/form-components/text-input.md +13 -0
  501. package/docs/reference/dashboard/form-components/textarea-input.md +22 -0
  502. package/docs/reference/dashboard/form-components/translatable-form-field-wrapper.md +70 -0
  503. package/docs/reference/dashboard/hooks/index.md +5 -0
  504. package/docs/reference/dashboard/hooks/use-alerts.md +65 -0
  505. package/docs/reference/dashboard/hooks/use-auth.md +84 -0
  506. package/docs/reference/dashboard/hooks/use-channel.md +72 -0
  507. package/docs/reference/dashboard/hooks/use-custom-field-config.md +24 -0
  508. package/docs/reference/dashboard/hooks/use-display-locale.md +32 -0
  509. package/docs/reference/dashboard/hooks/use-drag-and-drop.md +22 -0
  510. package/docs/reference/dashboard/hooks/use-local-format.md +30 -0
  511. package/docs/reference/dashboard/hooks/use-paginated-list.md +29 -0
  512. package/docs/reference/dashboard/hooks/use-permissions.md +25 -0
  513. package/docs/reference/dashboard/hooks/use-sorted-languages.md +30 -0
  514. package/docs/reference/dashboard/hooks/use-ui-language-loader.md +18 -0
  515. package/docs/reference/dashboard/hooks/use-widget-filters.md +16 -0
  516. package/docs/reference/dashboard/list-views/bulk-actions.md +199 -0
  517. package/docs/reference/dashboard/list-views/data-table-cell-component.md +45 -0
  518. package/docs/reference/dashboard/list-views/data-table.md +209 -0
  519. package/docs/reference/dashboard/list-views/index.md +5 -0
  520. package/docs/reference/dashboard/list-views/list-page.md +493 -0
  521. package/docs/reference/dashboard/list-views/paginated-list-data-table.md +303 -0
  522. package/docs/reference/dashboard/page-layout/index.md +54 -0
  523. package/docs/reference/dashboard/page-layout/page-action-bar.md +62 -0
  524. package/docs/reference/dashboard/page-layout/page-block.md +137 -0
  525. package/docs/reference/dashboard/page-layout/page-title.md +22 -0
  526. package/docs/reference/dashboard/page-layout/page.md +100 -0
  527. package/docs/reference/dashboard/page-layout/use-page-block.md +32 -0
  528. package/docs/reference/dashboard/vite-plugin/index.md +5 -0
  529. package/docs/reference/dashboard/vite-plugin/vendure-dashboard-plugin.md +356 -0
  530. package/docs/reference/graphql-api/_index.md +16 -0
  531. package/docs/reference/graphql-api/admin/_index.md +13 -0
  532. package/docs/reference/graphql-api/admin/enums.md +1142 -0
  533. package/docs/reference/graphql-api/admin/input-types.md +4631 -0
  534. package/docs/reference/graphql-api/admin/mutations.md +1985 -0
  535. package/docs/reference/graphql-api/admin/object-types.md +4515 -0
  536. package/docs/reference/graphql-api/admin/queries.md +760 -0
  537. package/docs/reference/graphql-api/shop/_index.md +13 -0
  538. package/docs/reference/graphql-api/shop/enums.md +1072 -0
  539. package/docs/reference/graphql-api/shop/input-types.md +1192 -0
  540. package/docs/reference/graphql-api/shop/mutations.md +431 -0
  541. package/docs/reference/graphql-api/shop/object-types.md +3406 -0
  542. package/docs/reference/graphql-api/shop/queries.md +247 -0
  543. package/docs/reference/index.mdx +38 -0
  544. package/docs/reference/links.webp +0 -0
  545. package/docs/reference/typescript-api/_index.md +13 -0
  546. package/docs/reference/typescript-api/assets/asset-naming-strategy.md +56 -0
  547. package/docs/reference/typescript-api/assets/asset-options.md +58 -0
  548. package/docs/reference/typescript-api/assets/asset-preview-strategy.md +45 -0
  549. package/docs/reference/typescript-api/assets/asset-storage-strategy.md +84 -0
  550. package/docs/reference/typescript-api/assets/default-asset-naming-strategy.md +39 -0
  551. package/docs/reference/typescript-api/assets/index.md +5 -0
  552. package/docs/reference/typescript-api/auth/auth-options.md +165 -0
  553. package/docs/reference/typescript-api/auth/authentication-strategy.md +97 -0
  554. package/docs/reference/typescript-api/auth/bcrypt-password-hashing-strategy.md +38 -0
  555. package/docs/reference/typescript-api/auth/cookie-options.md +108 -0
  556. package/docs/reference/typescript-api/auth/default-password-validation-strategy.md +44 -0
  557. package/docs/reference/typescript-api/auth/default-session-cache-strategy.md +73 -0
  558. package/docs/reference/typescript-api/auth/default-verification-token-strategy.md +47 -0
  559. package/docs/reference/typescript-api/auth/external-authentication-service.md +98 -0
  560. package/docs/reference/typescript-api/auth/in-memory-session-cache-strategy.md +63 -0
  561. package/docs/reference/typescript-api/auth/index.md +5 -0
  562. package/docs/reference/typescript-api/auth/native-authentication-strategy.md +58 -0
  563. package/docs/reference/typescript-api/auth/noop-session-cache-strategy.md +51 -0
  564. package/docs/reference/typescript-api/auth/password-hashing-strategy.md +45 -0
  565. package/docs/reference/typescript-api/auth/password-validation-strategy.md +43 -0
  566. package/docs/reference/typescript-api/auth/permission-definition.md +269 -0
  567. package/docs/reference/typescript-api/auth/session-cache-strategy.md +275 -0
  568. package/docs/reference/typescript-api/auth/superadmin-credentials.md +36 -0
  569. package/docs/reference/typescript-api/auth/verification-token-strategy.md +45 -0
  570. package/docs/reference/typescript-api/cache/cache-config.md +44 -0
  571. package/docs/reference/typescript-api/cache/cache-service.md +76 -0
  572. package/docs/reference/typescript-api/cache/cache-strategy.md +103 -0
  573. package/docs/reference/typescript-api/cache/default-cache-plugin.md +73 -0
  574. package/docs/reference/typescript-api/cache/index.md +79 -0
  575. package/docs/reference/typescript-api/cache/redis-cache-plugin.md +85 -0
  576. package/docs/reference/typescript-api/cache/redis-cache-strategy.md +75 -0
  577. package/docs/reference/typescript-api/cache/request-context-cache-service.md +54 -0
  578. package/docs/reference/typescript-api/cache/self-refreshing-cache.md +152 -0
  579. package/docs/reference/typescript-api/cache/sql-cache-strategy.md +87 -0
  580. package/docs/reference/typescript-api/common/admin-ui/admin-ui-app-config.md +43 -0
  581. package/docs/reference/typescript-api/common/admin-ui/admin-ui-app-dev-mode-config.md +47 -0
  582. package/docs/reference/typescript-api/common/admin-ui/admin-ui-config.md +139 -0
  583. package/docs/reference/typescript-api/common/admin-ui/index.md +5 -0
  584. package/docs/reference/typescript-api/common/async-queue.md +38 -0
  585. package/docs/reference/typescript-api/common/bootstrap.md +129 -0
  586. package/docs/reference/typescript-api/common/currency-code.md +174 -0
  587. package/docs/reference/typescript-api/common/entity-relation-paths.md +34 -0
  588. package/docs/reference/typescript-api/common/i18n-service.md +74 -0
  589. package/docs/reference/typescript-api/common/id.md +17 -0
  590. package/docs/reference/typescript-api/common/index.md +5 -0
  591. package/docs/reference/typescript-api/common/injectable-strategy.md +48 -0
  592. package/docs/reference/typescript-api/common/injector.md +47 -0
  593. package/docs/reference/typescript-api/common/job-state.md +23 -0
  594. package/docs/reference/typescript-api/common/json-compatible.md +23 -0
  595. package/docs/reference/typescript-api/common/language-code.md +177 -0
  596. package/docs/reference/typescript-api/common/middleware.md +72 -0
  597. package/docs/reference/typescript-api/common/paginated-list.md +36 -0
  598. package/docs/reference/typescript-api/common/permission.md +136 -0
  599. package/docs/reference/typescript-api/common/price-calculation-result.md +36 -0
  600. package/docs/reference/typescript-api/common/process-context.md +55 -0
  601. package/docs/reference/typescript-api/common/vendure_version.md +22 -0
  602. package/docs/reference/typescript-api/configurable-operation-def/config-arg-type.md +22 -0
  603. package/docs/reference/typescript-api/configurable-operation-def/config-args.md +89 -0
  604. package/docs/reference/typescript-api/configurable-operation-def/configurable-operation-def-options.md +57 -0
  605. package/docs/reference/typescript-api/configurable-operation-def/default-form-component-id.md +34 -0
  606. package/docs/reference/typescript-api/configurable-operation-def/default-form-config-hash.md +137 -0
  607. package/docs/reference/typescript-api/configurable-operation-def/index.md +149 -0
  608. package/docs/reference/typescript-api/configurable-operation-def/localized-string-array.md +28 -0
  609. package/docs/reference/typescript-api/configuration/api-options.md +159 -0
  610. package/docs/reference/typescript-api/configuration/collection-filter.md +76 -0
  611. package/docs/reference/typescript-api/configuration/default-config.md +13 -0
  612. package/docs/reference/typescript-api/configuration/default-slug-strategy.md +46 -0
  613. package/docs/reference/typescript-api/configuration/entity-duplicator.md +195 -0
  614. package/docs/reference/typescript-api/configuration/entity-id-decorator.md +24 -0
  615. package/docs/reference/typescript-api/configuration/entity-id-strategy.md +168 -0
  616. package/docs/reference/typescript-api/configuration/entity-options.md +153 -0
  617. package/docs/reference/typescript-api/configuration/index.md +5 -0
  618. package/docs/reference/typescript-api/configuration/merge-config.md +49 -0
  619. package/docs/reference/typescript-api/configuration/product-variant-price-selection-strategy.md +71 -0
  620. package/docs/reference/typescript-api/configuration/product-variant-price-update-strategy.md +185 -0
  621. package/docs/reference/typescript-api/configuration/runtime-vendure-config.md +111 -0
  622. package/docs/reference/typescript-api/configuration/settings-store-fields.md +29 -0
  623. package/docs/reference/typescript-api/configuration/slug-strategy.md +47 -0
  624. package/docs/reference/typescript-api/configuration/system-options.md +50 -0
  625. package/docs/reference/typescript-api/configuration/trust-proxy-options.md +19 -0
  626. package/docs/reference/typescript-api/configuration/vendure-config.md +168 -0
  627. package/docs/reference/typescript-api/custom-fields/custom-field-config.md +25 -0
  628. package/docs/reference/typescript-api/custom-fields/custom-field-type.md +42 -0
  629. package/docs/reference/typescript-api/custom-fields/index.md +70 -0
  630. package/docs/reference/typescript-api/custom-fields/struct-custom-field-config.md +21 -0
  631. package/docs/reference/typescript-api/custom-fields/struct-field-config.md +41 -0
  632. package/docs/reference/typescript-api/custom-fields/typed-custom-single-field-config.md +24 -0
  633. package/docs/reference/typescript-api/data-access/calculated-property-subscriber.md +38 -0
  634. package/docs/reference/typescript-api/data-access/calculated.md +62 -0
  635. package/docs/reference/typescript-api/data-access/entity-hydrator.md +103 -0
  636. package/docs/reference/typescript-api/data-access/get-entity-or-throw-options.md +53 -0
  637. package/docs/reference/typescript-api/data-access/hydrate-options.md +40 -0
  638. package/docs/reference/typescript-api/data-access/index.md +5 -0
  639. package/docs/reference/typescript-api/data-access/list-query-builder.md +239 -0
  640. package/docs/reference/typescript-api/data-access/transactional-connection.md +173 -0
  641. package/docs/reference/typescript-api/default-search-plugin/default-search-plugin-init-options.md +126 -0
  642. package/docs/reference/typescript-api/default-search-plugin/index.md +64 -0
  643. package/docs/reference/typescript-api/default-search-plugin/mysql-search-strategy.md +56 -0
  644. package/docs/reference/typescript-api/default-search-plugin/postgres-search-strategy.md +56 -0
  645. package/docs/reference/typescript-api/default-search-plugin/search-strategy.md +58 -0
  646. package/docs/reference/typescript-api/default-search-plugin/sqlite-search-strategy.md +57 -0
  647. package/docs/reference/typescript-api/entities/address.md +124 -0
  648. package/docs/reference/typescript-api/entities/administrator.md +78 -0
  649. package/docs/reference/typescript-api/entities/anonymous-session.md +34 -0
  650. package/docs/reference/typescript-api/entities/asset.md +135 -0
  651. package/docs/reference/typescript-api/entities/authenticated-session.md +48 -0
  652. package/docs/reference/typescript-api/entities/authentication-method.md +156 -0
  653. package/docs/reference/typescript-api/entities/channel.md +233 -0
  654. package/docs/reference/typescript-api/entities/collection.md +152 -0
  655. package/docs/reference/typescript-api/entities/country.md +40 -0
  656. package/docs/reference/typescript-api/entities/customer-group.md +63 -0
  657. package/docs/reference/typescript-api/entities/customer-history-entry.md +40 -0
  658. package/docs/reference/typescript-api/entities/customer.md +122 -0
  659. package/docs/reference/typescript-api/entities/facet-value.md +98 -0
  660. package/docs/reference/typescript-api/entities/facet.md +89 -0
  661. package/docs/reference/typescript-api/entities/fulfillment.md +84 -0
  662. package/docs/reference/typescript-api/entities/global-settings.md +66 -0
  663. package/docs/reference/typescript-api/entities/history-entry.md +66 -0
  664. package/docs/reference/typescript-api/entities/index.md +5 -0
  665. package/docs/reference/typescript-api/entities/interfaces.md +125 -0
  666. package/docs/reference/typescript-api/entities/order-history-entry.md +40 -0
  667. package/docs/reference/typescript-api/entities/order-line-reference.md +174 -0
  668. package/docs/reference/typescript-api/entities/order-line.md +344 -0
  669. package/docs/reference/typescript-api/entities/order-modification.md +103 -0
  670. package/docs/reference/typescript-api/entities/order.md +284 -0
  671. package/docs/reference/typescript-api/entities/orderable-asset.md +61 -0
  672. package/docs/reference/typescript-api/entities/payment-method.md +94 -0
  673. package/docs/reference/typescript-api/entities/payment.md +96 -0
  674. package/docs/reference/typescript-api/entities/product-option-group.md +84 -0
  675. package/docs/reference/typescript-api/entities/product-option.md +90 -0
  676. package/docs/reference/typescript-api/entities/product-variant-price.md +70 -0
  677. package/docs/reference/typescript-api/entities/product-variant.md +251 -0
  678. package/docs/reference/typescript-api/entities/product.md +134 -0
  679. package/docs/reference/typescript-api/entities/promotion.md +190 -0
  680. package/docs/reference/typescript-api/entities/province.md +39 -0
  681. package/docs/reference/typescript-api/entities/refund.md +120 -0
  682. package/docs/reference/typescript-api/entities/region.md +87 -0
  683. package/docs/reference/typescript-api/entities/role.md +62 -0
  684. package/docs/reference/typescript-api/entities/seller.md +63 -0
  685. package/docs/reference/typescript-api/entities/session.md +87 -0
  686. package/docs/reference/typescript-api/entities/settings-store-entry.md +57 -0
  687. package/docs/reference/typescript-api/entities/shipping-line.md +150 -0
  688. package/docs/reference/typescript-api/entities/shipping-method.md +123 -0
  689. package/docs/reference/typescript-api/entities/stock-level.md +87 -0
  690. package/docs/reference/typescript-api/entities/stock-location.md +76 -0
  691. package/docs/reference/typescript-api/entities/stock-movement.md +270 -0
  692. package/docs/reference/typescript-api/entities/surcharge.md +102 -0
  693. package/docs/reference/typescript-api/entities/tag.md +40 -0
  694. package/docs/reference/typescript-api/entities/tax-category.md +68 -0
  695. package/docs/reference/typescript-api/entities/tax-rate.md +138 -0
  696. package/docs/reference/typescript-api/entities/user.md +111 -0
  697. package/docs/reference/typescript-api/entities/vendure-entity.md +49 -0
  698. package/docs/reference/typescript-api/entities/zone.md +78 -0
  699. package/docs/reference/typescript-api/errors/error-handler-strategy.md +88 -0
  700. package/docs/reference/typescript-api/errors/error-result-union.md +30 -0
  701. package/docs/reference/typescript-api/errors/error-types.md +197 -0
  702. package/docs/reference/typescript-api/errors/i18n-error.md +39 -0
  703. package/docs/reference/typescript-api/errors/index.md +5 -0
  704. package/docs/reference/typescript-api/errors/is-graph-ql-error-result.md +40 -0
  705. package/docs/reference/typescript-api/events/blocking-event-handler-options.md +57 -0
  706. package/docs/reference/typescript-api/events/event-bus.md +136 -0
  707. package/docs/reference/typescript-api/events/event-types.md +1689 -0
  708. package/docs/reference/typescript-api/events/index.md +5 -0
  709. package/docs/reference/typescript-api/events/vendure-entity-event.md +57 -0
  710. package/docs/reference/typescript-api/events/vendure-event.md +35 -0
  711. package/docs/reference/typescript-api/fulfillment/fulfillment-handler.md +173 -0
  712. package/docs/reference/typescript-api/fulfillment/fulfillment-process.md +71 -0
  713. package/docs/reference/typescript-api/fulfillment/fulfillment-state.md +21 -0
  714. package/docs/reference/typescript-api/fulfillment/fulfillment-states.md +18 -0
  715. package/docs/reference/typescript-api/fulfillment/fulfillment-transition-data.md +41 -0
  716. package/docs/reference/typescript-api/fulfillment/index.md +5 -0
  717. package/docs/reference/typescript-api/health-check/health-check-registry-service.md +70 -0
  718. package/docs/reference/typescript-api/health-check/health-check-strategy.md +70 -0
  719. package/docs/reference/typescript-api/health-check/http-health-check-strategy.md +61 -0
  720. package/docs/reference/typescript-api/health-check/index.md +5 -0
  721. package/docs/reference/typescript-api/health-check/type-ormhealth-check-strategy.md +64 -0
  722. package/docs/reference/typescript-api/import-export/asset-import-strategy.md +46 -0
  723. package/docs/reference/typescript-api/import-export/asset-importer.md +32 -0
  724. package/docs/reference/typescript-api/import-export/default-asset-import-strategy.md +48 -0
  725. package/docs/reference/typescript-api/import-export/fast-importer-service.md +67 -0
  726. package/docs/reference/typescript-api/import-export/import-export-options.md +36 -0
  727. package/docs/reference/typescript-api/import-export/import-parser.md +280 -0
  728. package/docs/reference/typescript-api/import-export/importer.md +54 -0
  729. package/docs/reference/typescript-api/import-export/index.md +5 -0
  730. package/docs/reference/typescript-api/import-export/initial-data.md +71 -0
  731. package/docs/reference/typescript-api/import-export/populate.md +71 -0
  732. package/docs/reference/typescript-api/import-export/populator.md +38 -0
  733. package/docs/reference/typescript-api/job-queue/default-job-queue-plugin.md +245 -0
  734. package/docs/reference/typescript-api/job-queue/in-memory-job-buffer-storage-strategy.md +55 -0
  735. package/docs/reference/typescript-api/job-queue/in-memory-job-queue-strategy.md +110 -0
  736. package/docs/reference/typescript-api/job-queue/index.md +84 -0
  737. package/docs/reference/typescript-api/job-queue/inspectable-job-queue-strategy.md +60 -0
  738. package/docs/reference/typescript-api/job-queue/job-buffer-storage-strategy.md +78 -0
  739. package/docs/reference/typescript-api/job-queue/job-buffer.md +119 -0
  740. package/docs/reference/typescript-api/job-queue/job-queue-options.md +56 -0
  741. package/docs/reference/typescript-api/job-queue/job-queue-service.md +128 -0
  742. package/docs/reference/typescript-api/job-queue/job-queue-strategy.md +59 -0
  743. package/docs/reference/typescript-api/job-queue/job.md +195 -0
  744. package/docs/reference/typescript-api/job-queue/polling-job-queue-strategy.md +122 -0
  745. package/docs/reference/typescript-api/job-queue/sql-job-queue-strategy.md +84 -0
  746. package/docs/reference/typescript-api/job-queue/subscribable-job.md +44 -0
  747. package/docs/reference/typescript-api/job-queue/types.md +199 -0
  748. package/docs/reference/typescript-api/logger/default-logger.md +81 -0
  749. package/docs/reference/typescript-api/logger/index.md +120 -0
  750. package/docs/reference/typescript-api/logger/log-level.md +30 -0
  751. package/docs/reference/typescript-api/logger/vendure-logger.md +60 -0
  752. package/docs/reference/typescript-api/migration/generate-migration.md +28 -0
  753. package/docs/reference/typescript-api/migration/index.md +5 -0
  754. package/docs/reference/typescript-api/migration/migration-options.md +36 -0
  755. package/docs/reference/typescript-api/migration/revert-last-migration.md +23 -0
  756. package/docs/reference/typescript-api/migration/run-migrations.md +23 -0
  757. package/docs/reference/typescript-api/money/big-int-money-strategy.md +68 -0
  758. package/docs/reference/typescript-api/money/default-money-strategy.md +47 -0
  759. package/docs/reference/typescript-api/money/index.md +5 -0
  760. package/docs/reference/typescript-api/money/money-decorator.md +23 -0
  761. package/docs/reference/typescript-api/money/money-strategy.md +116 -0
  762. package/docs/reference/typescript-api/money/round-money.md +26 -0
  763. package/docs/reference/typescript-api/orders/active-order-service.md +69 -0
  764. package/docs/reference/typescript-api/orders/active-order-strategy.md +203 -0
  765. package/docs/reference/typescript-api/orders/changed-price-handling-strategy.md +51 -0
  766. package/docs/reference/typescript-api/orders/custom-order-states.md +18 -0
  767. package/docs/reference/typescript-api/orders/default-active-order-strategy.md +52 -0
  768. package/docs/reference/typescript-api/orders/default-guest-checkout-strategy.md +93 -0
  769. package/docs/reference/typescript-api/orders/default-order-item-price-calculation-strategy.md +33 -0
  770. package/docs/reference/typescript-api/orders/default-order-placed-strategy.md +33 -0
  771. package/docs/reference/typescript-api/orders/default-stock-allocation-strategy.md +33 -0
  772. package/docs/reference/typescript-api/orders/guest-checkout-strategy.md +56 -0
  773. package/docs/reference/typescript-api/orders/index.md +5 -0
  774. package/docs/reference/typescript-api/orders/merge-strategies.md +114 -0
  775. package/docs/reference/typescript-api/orders/order-by-code-access-strategy.md +91 -0
  776. package/docs/reference/typescript-api/orders/order-code-strategy.md +88 -0
  777. package/docs/reference/typescript-api/orders/order-interceptor.md +250 -0
  778. package/docs/reference/typescript-api/orders/order-item-price-calculation-strategy.md +91 -0
  779. package/docs/reference/typescript-api/orders/order-merge-strategy.md +80 -0
  780. package/docs/reference/typescript-api/orders/order-options.md +145 -0
  781. package/docs/reference/typescript-api/orders/order-placed-strategy.md +54 -0
  782. package/docs/reference/typescript-api/orders/order-process.md +271 -0
  783. package/docs/reference/typescript-api/orders/order-seller-strategy.md +124 -0
  784. package/docs/reference/typescript-api/orders/stock-allocation-strategy.md +46 -0
  785. package/docs/reference/typescript-api/payment/default-payment-process.md +13 -0
  786. package/docs/reference/typescript-api/payment/default-refund-process.md +13 -0
  787. package/docs/reference/typescript-api/payment/dummy-payment-handler.md +31 -0
  788. package/docs/reference/typescript-api/payment/index.md +5 -0
  789. package/docs/reference/typescript-api/payment/payment-method-config-options.md +69 -0
  790. package/docs/reference/typescript-api/payment/payment-method-eligibility-checker.md +95 -0
  791. package/docs/reference/typescript-api/payment/payment-method-handler.md +83 -0
  792. package/docs/reference/typescript-api/payment/payment-method-types.md +386 -0
  793. package/docs/reference/typescript-api/payment/payment-options.md +57 -0
  794. package/docs/reference/typescript-api/payment/payment-process.md +62 -0
  795. package/docs/reference/typescript-api/payment/payment-state.md +20 -0
  796. package/docs/reference/typescript-api/payment/payment-states.md +18 -0
  797. package/docs/reference/typescript-api/payment/payment-transition-data.md +42 -0
  798. package/docs/reference/typescript-api/payment/refund-process.md +55 -0
  799. package/docs/reference/typescript-api/payment/refund-state.md +16 -0
  800. package/docs/reference/typescript-api/payment/refund-states.md +18 -0
  801. package/docs/reference/typescript-api/payment/refund-transition-data.md +41 -0
  802. package/docs/reference/typescript-api/plugin/index.md +5 -0
  803. package/docs/reference/typescript-api/plugin/plugin-common-module.md +28 -0
  804. package/docs/reference/typescript-api/plugin/plugin-utilities.md +96 -0
  805. package/docs/reference/typescript-api/plugin/vendure-plugin-metadata.md +147 -0
  806. package/docs/reference/typescript-api/plugin/vendure-plugin.md +52 -0
  807. package/docs/reference/typescript-api/products-stock/catalog-options.md +70 -0
  808. package/docs/reference/typescript-api/products-stock/default-product-variant-price-calculation-strategy.md +38 -0
  809. package/docs/reference/typescript-api/products-stock/default-stock-display-strategy.md +40 -0
  810. package/docs/reference/typescript-api/products-stock/default-stock-location-strategy.md +47 -0
  811. package/docs/reference/typescript-api/products-stock/index.md +5 -0
  812. package/docs/reference/typescript-api/products-stock/multi-channel-stock-location-strategy.md +47 -0
  813. package/docs/reference/typescript-api/products-stock/product-variant-price-calculation-strategy.md +95 -0
  814. package/docs/reference/typescript-api/products-stock/stock-display-strategy.md +47 -0
  815. package/docs/reference/typescript-api/products-stock/stock-location-strategy.md +157 -0
  816. package/docs/reference/typescript-api/promotions/facet-value-checker.md +78 -0
  817. package/docs/reference/typescript-api/promotions/index.md +5 -0
  818. package/docs/reference/typescript-api/promotions/promotion-action.md +454 -0
  819. package/docs/reference/typescript-api/promotions/promotion-condition.md +117 -0
  820. package/docs/reference/typescript-api/promotions/promotion-options.md +35 -0
  821. package/docs/reference/typescript-api/request/allow-decorator.md +53 -0
  822. package/docs/reference/typescript-api/request/api-decorator.md +28 -0
  823. package/docs/reference/typescript-api/request/api-type.md +16 -0
  824. package/docs/reference/typescript-api/request/ctx-decorator.md +23 -0
  825. package/docs/reference/typescript-api/request/index.md +5 -0
  826. package/docs/reference/typescript-api/request/relations-decorator.md +116 -0
  827. package/docs/reference/typescript-api/request/request-context-service.md +47 -0
  828. package/docs/reference/typescript-api/request/request-context.md +205 -0
  829. package/docs/reference/typescript-api/request/transaction-decorator.md +82 -0
  830. package/docs/reference/typescript-api/scheduled-tasks/clean-sessions-task.md +40 -0
  831. package/docs/reference/typescript-api/scheduled-tasks/default-scheduler-plugin.md +86 -0
  832. package/docs/reference/typescript-api/scheduled-tasks/default-scheduler-strategy.md +76 -0
  833. package/docs/reference/typescript-api/scheduled-tasks/index.md +5 -0
  834. package/docs/reference/typescript-api/scheduled-tasks/scheduled-task.md +196 -0
  835. package/docs/reference/typescript-api/scheduled-tasks/scheduler-options.md +47 -0
  836. package/docs/reference/typescript-api/scheduled-tasks/scheduler-service.md +62 -0
  837. package/docs/reference/typescript-api/scheduled-tasks/scheduler-strategy.md +141 -0
  838. package/docs/reference/typescript-api/service-helpers/entity-duplicator-service.md +43 -0
  839. package/docs/reference/typescript-api/service-helpers/index.md +5 -0
  840. package/docs/reference/typescript-api/service-helpers/order-calculator.md +54 -0
  841. package/docs/reference/typescript-api/service-helpers/order-modifier.md +91 -0
  842. package/docs/reference/typescript-api/service-helpers/product-price-applicator.md +62 -0
  843. package/docs/reference/typescript-api/service-helpers/slug-validator.md +86 -0
  844. package/docs/reference/typescript-api/service-helpers/translatable-saver.md +66 -0
  845. package/docs/reference/typescript-api/service-helpers/translator-service.md +63 -0
  846. package/docs/reference/typescript-api/services/administrator-service.md +71 -0
  847. package/docs/reference/typescript-api/services/asset-service.md +177 -0
  848. package/docs/reference/typescript-api/services/auth-service.md +54 -0
  849. package/docs/reference/typescript-api/services/channel-service.md +111 -0
  850. package/docs/reference/typescript-api/services/collection-service.md +186 -0
  851. package/docs/reference/typescript-api/services/country-service.md +71 -0
  852. package/docs/reference/typescript-api/services/customer-group-service.md +77 -0
  853. package/docs/reference/typescript-api/services/customer-service.md +203 -0
  854. package/docs/reference/typescript-api/services/entity-slug-service.md +37 -0
  855. package/docs/reference/typescript-api/services/facet-service.md +95 -0
  856. package/docs/reference/typescript-api/services/facet-value-service.md +104 -0
  857. package/docs/reference/typescript-api/services/fulfillment-service.md +69 -0
  858. package/docs/reference/typescript-api/services/global-settings-service.md +41 -0
  859. package/docs/reference/typescript-api/services/history-service.md +172 -0
  860. package/docs/reference/typescript-api/services/index.md +5 -0
  861. package/docs/reference/typescript-api/services/initializer-service.md +36 -0
  862. package/docs/reference/typescript-api/services/order-service.md +440 -0
  863. package/docs/reference/typescript-api/services/order-testing-service.md +44 -0
  864. package/docs/reference/typescript-api/services/payment-method-service.md +105 -0
  865. package/docs/reference/typescript-api/services/payment-service.md +105 -0
  866. package/docs/reference/typescript-api/services/product-option-group-service.md +67 -0
  867. package/docs/reference/typescript-api/services/product-option-service.md +64 -0
  868. package/docs/reference/typescript-api/services/product-service.md +111 -0
  869. package/docs/reference/typescript-api/services/product-variant-service.md +179 -0
  870. package/docs/reference/typescript-api/services/promotion-service.md +127 -0
  871. package/docs/reference/typescript-api/services/province-service.md +59 -0
  872. package/docs/reference/typescript-api/services/role-service.md +113 -0
  873. package/docs/reference/typescript-api/services/search-service.md +37 -0
  874. package/docs/reference/typescript-api/services/seller-service.md +65 -0
  875. package/docs/reference/typescript-api/services/session-service.md +105 -0
  876. package/docs/reference/typescript-api/services/settings-store-service.md +194 -0
  877. package/docs/reference/typescript-api/services/shipping-method-service.md +95 -0
  878. package/docs/reference/typescript-api/services/slug-service.md +35 -0
  879. package/docs/reference/typescript-api/services/stock-level-service.md +62 -0
  880. package/docs/reference/typescript-api/services/stock-location-service.md +115 -0
  881. package/docs/reference/typescript-api/services/stock-movement-service.md +95 -0
  882. package/docs/reference/typescript-api/services/tag-service.md +71 -0
  883. package/docs/reference/typescript-api/services/tax-category-service.md +59 -0
  884. package/docs/reference/typescript-api/services/tax-rate-service.md +66 -0
  885. package/docs/reference/typescript-api/services/user-service.md +132 -0
  886. package/docs/reference/typescript-api/services/zone-service.md +77 -0
  887. package/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-options.md +48 -0
  888. package/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-result.md +41 -0
  889. package/docs/reference/typescript-api/settings-store/index.md +38 -0
  890. package/docs/reference/typescript-api/settings-store/orphaned-settings-store-entry.md +48 -0
  891. package/docs/reference/typescript-api/settings-store/set-settings-store-value-result.md +42 -0
  892. package/docs/reference/typescript-api/settings-store/settings-store-field-config.md +92 -0
  893. package/docs/reference/typescript-api/settings-store/settings-store-registration.md +36 -0
  894. package/docs/reference/typescript-api/settings-store/settings-store-scope-function.md +35 -0
  895. package/docs/reference/typescript-api/settings-store/settings-store-scopes.md +36 -0
  896. package/docs/reference/typescript-api/shipping/check-shipping-eligibility-checker-fn.md +27 -0
  897. package/docs/reference/typescript-api/shipping/default-shipping-line-assignment-strategy.md +33 -0
  898. package/docs/reference/typescript-api/shipping/index.md +5 -0
  899. package/docs/reference/typescript-api/shipping/shipping-calculator.md +121 -0
  900. package/docs/reference/typescript-api/shipping/shipping-eligibility-checker-config.md +39 -0
  901. package/docs/reference/typescript-api/shipping/shipping-eligibility-checker.md +60 -0
  902. package/docs/reference/typescript-api/shipping/shipping-line-assignment-strategy.md +75 -0
  903. package/docs/reference/typescript-api/shipping/shipping-options.md +63 -0
  904. package/docs/reference/typescript-api/shipping/should-run-check-fn.md +44 -0
  905. package/docs/reference/typescript-api/state-machine/fsm.md +66 -0
  906. package/docs/reference/typescript-api/state-machine/index.md +5 -0
  907. package/docs/reference/typescript-api/state-machine/state-machine-config.md +103 -0
  908. package/docs/reference/typescript-api/state-machine/transitions.md +43 -0
  909. package/docs/reference/typescript-api/tax/address-based-tax-zone-strategy.md +57 -0
  910. package/docs/reference/typescript-api/tax/default-tax-line-calculation-strategy.md +33 -0
  911. package/docs/reference/typescript-api/tax/default-tax-zone-strategy.md +35 -0
  912. package/docs/reference/typescript-api/tax/index.md +5 -0
  913. package/docs/reference/typescript-api/tax/tax-line-calculation-strategy.md +90 -0
  914. package/docs/reference/typescript-api/tax/tax-options.md +35 -0
  915. package/docs/reference/typescript-api/tax/tax-zone-strategy.md +54 -0
  916. package/docs/reference/typescript-api/telemetry/index.md +5 -0
  917. package/docs/reference/typescript-api/telemetry/instrument.md +47 -0
  918. package/docs/reference/typescript-api/telemetry/instrumentation-strategy.md +35 -0
  919. package/docs/reference/typescript-api/telemetry/wrapped-method-args.md +56 -0
  920. package/docs/reference/typescript-api/testing/create-error-result-guard.md +33 -0
  921. package/docs/reference/typescript-api/testing/create-test-environment.md +47 -0
  922. package/docs/reference/typescript-api/testing/error-result-guard.md +73 -0
  923. package/docs/reference/typescript-api/testing/get-superadmin-context.md +23 -0
  924. package/docs/reference/typescript-api/testing/index.md +5 -0
  925. package/docs/reference/typescript-api/testing/register-initializer.md +27 -0
  926. package/docs/reference/typescript-api/testing/simple-graph-qlclient.md +123 -0
  927. package/docs/reference/typescript-api/testing/test-config.md +30 -0
  928. package/docs/reference/typescript-api/testing/test-db-initializer.md +60 -0
  929. package/docs/reference/typescript-api/testing/test-environment.md +42 -0
  930. package/docs/reference/typescript-api/testing/test-server-options.md +47 -0
  931. package/docs/reference/typescript-api/testing/test-server.md +60 -0
  932. package/docs/reference/typescript-api/testing/testing-logger.md +140 -0
  933. package/docs/reference/typescript-api/worker/bootstrap-worker.md +76 -0
  934. package/docs/reference/typescript-api/worker/index.md +5 -0
  935. package/docs/reference/typescript-api/worker/vendure-worker.md +50 -0
  936. package/docs/reference/typescript-api/worker/worker-health-check-config.md +41 -0
  937. package/docs/user-guide/catalog/collections.md +27 -0
  938. package/docs/user-guide/catalog/facets.md +34 -0
  939. package/docs/user-guide/catalog/product-variants.png +0 -0
  940. package/docs/user-guide/catalog/products.md +35 -0
  941. package/docs/user-guide/catalog/screen-facet-add.webp +0 -0
  942. package/docs/user-guide/catalog/screen-facet-list.webp +0 -0
  943. package/docs/user-guide/catalog/screen-inventory.webp +0 -0
  944. package/docs/user-guide/customers/index.md +30 -0
  945. package/docs/user-guide/customers/screen-customer-group.webp +0 -0
  946. package/docs/user-guide/index.md +7 -0
  947. package/docs/user-guide/localization/index.md +42 -0
  948. package/docs/user-guide/localization/screen-ui-language.webp +0 -0
  949. package/docs/user-guide/orders/draft-orders.md +28 -0
  950. package/docs/user-guide/orders/order-state-diagram-for-admin.png +0 -0
  951. package/docs/user-guide/orders/orders.md +65 -0
  952. package/docs/user-guide/orders/screen-fulfillment-shipped.webp +0 -0
  953. package/docs/user-guide/orders/screen-fulfillment.webp +0 -0
  954. package/docs/user-guide/orders/screen-modification.webp +0 -0
  955. package/docs/user-guide/orders/screen-modify-button.webp +0 -0
  956. package/docs/user-guide/orders/screen-refund-button.webp +0 -0
  957. package/docs/user-guide/orders/screen-settle-payment.webp +0 -0
  958. package/docs/user-guide/promotions/index.md +44 -0
  959. package/docs/user-guide/settings/administrators-roles.md +34 -0
  960. package/docs/user-guide/settings/channels.md +18 -0
  961. package/docs/user-guide/settings/countries-zones.md +12 -0
  962. package/docs/user-guide/settings/global-settings.md +12 -0
  963. package/docs/user-guide/settings/payment-methods.md +32 -0
  964. package/docs/user-guide/settings/screen-shipping-test.webp +0 -0
  965. package/docs/user-guide/settings/screen-translations.webp +0 -0
  966. package/docs/user-guide/settings/shipping-methods.md +55 -0
  967. package/docs/user-guide/settings/taxes.md +32 -0
  968. package/package.json +32 -0
@@ -0,0 +1,1423 @@
1
+ ---
2
+ title: 'Custom Fields'
3
+ sidebar_position: 3
4
+ ---
5
+
6
+ import Tabs from '@theme/Tabs';
7
+ import TabItem from '@theme/TabItem';
8
+ import CustomFieldProperty from '@site/src/components/CustomFieldProperty';
9
+
10
+ Custom fields allow you to add your own custom data properties to almost every Vendure entity. The entities which may have custom fields defined are listed in the [CustomFields interface documentation](/reference/typescript-api/custom-fields/).
11
+
12
+ Some use-cases for custom fields include:
13
+
14
+ * Storing the weight, dimensions or other product-specific data on the `ProductVariant` entity.
15
+ * Storing additional product codes on the `ProductVariant` entity such as ISBN or GTIN.
16
+ * Adding a `downloadable` flag to the `Product` entity to indicate whether the product is a digital download.
17
+ * Storing an external identifier (e.g. from a payment provider) on the `Customer` entity.
18
+ * Adding a longitude and latitude to the `StockLocation` for use in selecting the closest location to a customer.
19
+
20
+ :::note
21
+ Custom fields are not solely restricted to Vendure's native entities though, it's also possible to add support for custom fields to your own custom entities. See: [Supporting custom fields](/guides/developer-guide/database-entity/#supporting-custom-fields)
22
+ :::
23
+
24
+ ## Defining custom fields
25
+
26
+ Custom fields are specified in the VendureConfig:
27
+
28
+ ```ts
29
+ const config = {
30
+ // ...
31
+ customFields: {
32
+ Product: [
33
+ { name: 'infoUrl', type: 'string' },
34
+ { name: 'downloadable', type: 'boolean' },
35
+ { name: 'shortName', type: 'localeString' },
36
+ ],
37
+ User: [
38
+ { name: 'socialLoginToken', type: 'string', unique: true },
39
+ ],
40
+ },
41
+ };
42
+ ```
43
+
44
+ With the example config above, the following will occur:
45
+
46
+ 1. The database schema will be altered, and a column will be added for each custom field. **Note: changes to custom fields require a database migration**. See the [Migrations guide](/guides/developer-guide/migrations/).
47
+ 2. The GraphQL APIs will be modified to add the custom fields to the `Product` and `User` types respectively.
48
+ 3. If you are using the [AdminUiPlugin](/reference/core-plugins/admin-ui-plugin/), the Admin UI detail pages will now contain form inputs to allow the custom field data to be added or edited, and the list view data tables will allow custom field columns to be added, sorted and filtered.
49
+
50
+ ![custom-fields-data-table.webp](custom-fields-data-table.webp)
51
+
52
+ The values of the custom fields can then be set and queried via the GraphQL APIs:
53
+
54
+
55
+ <Tabs>
56
+ <TabItem value="Request" label="Request" default>
57
+
58
+ ```graphql
59
+ mutation {
60
+ updateProduct(input: {
61
+ id: 1
62
+ // highlight-start
63
+ customFields: {
64
+ infoUrl: "https://some-url.com",
65
+ downloadable: true,
66
+ }
67
+ // highlight-end
68
+ translations: [
69
+ // highlight-next-line
70
+ { languageCode: en, customFields: { shortName: "foo" } }
71
+ ]
72
+ }) {
73
+ id
74
+ name
75
+ // highlight-start
76
+ customFields {
77
+ infoUrl
78
+ downloadable
79
+ shortName
80
+ }
81
+ // highlight-end
82
+ }
83
+ }
84
+ ```
85
+
86
+ </TabItem>
87
+ <TabItem value="Response" label="Response">
88
+
89
+ ```json
90
+ {
91
+ "data": {
92
+ "product": {
93
+ "id": "1",
94
+ "name": "Laptop",
95
+ "customFields": {
96
+ "infoUrl": "https://some-url.com",
97
+ "downloadable": true,
98
+ "shortName": "foo"
99
+ }
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ </TabItem>
106
+ </Tabs>
107
+
108
+ The custom fields will also extend the filter and sort options available to the `products` list query:
109
+
110
+ ```graphql
111
+ query {
112
+ products(options: {
113
+ // highlight-start
114
+ filter: {
115
+ infoUrl: { contains: "new" },
116
+ downloadable: { eq: true }
117
+ },
118
+ sort: {
119
+ infoUrl: ASC
120
+ }
121
+ // highlight-end
122
+ }) {
123
+ items {
124
+ id
125
+ name
126
+ // highlight-start
127
+ customFields {
128
+ infoUrl
129
+ downloadable
130
+ shortName
131
+ }
132
+ // highlight-end
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ ## Available custom field types
139
+
140
+ The following types are available for custom fields:
141
+
142
+ | Type | Description | Example |
143
+ |----------------|------------------------------|----------------------------------------------------------|
144
+ | `string` | Short string data | url, label |
145
+ | `localeString` | Localized short strings | localized url |
146
+ | `text` | Long text data | extended product info, json config object |
147
+ | `localeText` | Localized long text | localized extended product info |
148
+ | `int` | Integer | product weight, customer loyalty points, monetary values |
149
+ | `float` | Floating point number | product review rating |
150
+ | `boolean` | Boolean | isDownloadable flag on product |
151
+ | `datetime` | A datetime | date that variant is back in stock |
152
+ | `struct` | Structured json-like data | Key-value attributes with additional data for products |
153
+ | `relation` | A relation to another entity | Asset used as a customer avatar, related Products |
154
+
155
+ To see the underlying DB data type and GraphQL type used for each, see the [CustomFieldType doc](/reference/typescript-api/custom-fields/custom-field-type).
156
+
157
+ #### Relations
158
+
159
+ It is possible to set up custom fields that hold references to other entities using the `'relation'` type:
160
+
161
+ ```ts
162
+ const config = {
163
+ // ...
164
+ customFields: {
165
+ Customer: [
166
+ {
167
+ name: 'avatar',
168
+ // highlight-start
169
+ type: 'relation',
170
+ entity: Asset,
171
+ // highlight-end
172
+ },
173
+ ],
174
+ },
175
+ };
176
+ ```
177
+
178
+ In this example, we set up a many-to-one relationship from Customer to Asset, allowing us to specify an avatar image for each Customer. Relation custom fields are unique in that the input and output names are not the same - the input will expect an ID and will be named `'<field name>Id'` or `'<field name>Ids'` for list types.
179
+
180
+ ```graphql
181
+ mutation {
182
+ updateCustomer(input: {
183
+ id: 1
184
+ customFields: {
185
+ avatarId: 42,
186
+ }
187
+ }) {
188
+ id
189
+ customFields {
190
+ avatar {
191
+ id
192
+ name
193
+ preview
194
+ }
195
+ }
196
+ }
197
+ }
198
+ ```
199
+
200
+ ## Accessing custom fields in TypeScript
201
+
202
+ As well as exposing custom fields via the GraphQL APIs, you can also access them directly in your TypeScript code. This is useful for plugins which need to access custom field data.
203
+
204
+ Given the following custom field configuration:
205
+
206
+ ```ts title="src/vendure-config.ts"
207
+ import { VendureConfig } from '@vendure/core';
208
+
209
+ const config: VendureConfig = {
210
+ // ...
211
+ customFields: {
212
+ Customer: [
213
+ { name: 'externalId', type: 'string' },
214
+ { name: 'avatar', type: 'relation', entity: Asset },
215
+ ],
216
+ },
217
+ };
218
+ ```
219
+
220
+ the `externalId` will be available whenever you access a `Customer` entity:
221
+
222
+ ```ts
223
+ const customer = await this.connection.getRepository(ctx, Customer).findOne({
224
+ where: { id: 1 },
225
+ });
226
+ console.log(customer.externalId);
227
+ ```
228
+
229
+ The `avatar` relation will require an explicit join to be performed in order to access the data, since it is not
230
+ eagerly loaded by default:
231
+
232
+ ```ts
233
+ const customer = await this.connection.getRepository(ctx, Customer).findOne({
234
+ where: { id: 1 },
235
+ relations: {
236
+ customFields: {
237
+ avatar: true,
238
+ }
239
+ }
240
+ });
241
+ console.log(customer.avatar);
242
+ ```
243
+
244
+ or if using the QueryBuilder API:
245
+
246
+ ```ts
247
+ const customer = await this.connection.getRepository(ctx, Customer).createQueryBuilder('customer')
248
+ .leftJoinAndSelect('customer.customFields.avatar', 'avatar')
249
+ .where('customer.id = :id', { id: 1 })
250
+ .getOne();
251
+ console.log(customer.avatar);
252
+ ```
253
+
254
+ or using the EntityHydrator:
255
+
256
+ ```ts
257
+ const customer = await this.customerService.findOne(ctx, 1);
258
+ await this.entityHydrator.hydrate(ctx, customer, { relations: ['customFields.avatar'] });
259
+ console.log(customer.avatar);
260
+ ```
261
+
262
+ ## Custom field config properties
263
+
264
+ ### Common properties
265
+
266
+ All custom fields share some common properties:
267
+
268
+ - [`name`](#name)
269
+ - [`type`](#type)
270
+ - [`list`](#list)
271
+ - [`label`](#label)
272
+ - [`description`](#description)
273
+ - [`public`](#public)
274
+ - [`readonly`](#readonly)
275
+ - [`internal`](#internal)
276
+ - [`defaultValue`](#defaultvalue)
277
+ - [`nullable`](#nullable)
278
+ - [`unique`](#unique)
279
+ - [`validate`](#validate)
280
+ - [`requiresPermission`](#requirespermission)
281
+ - [`deprecated`](#deprecated)
282
+
283
+ #### name
284
+
285
+ <CustomFieldProperty required={true} type="string"/>
286
+
287
+ The name of the field. This is used as the column name in the database, and as the GraphQL field name. The name should not contain spaces and by convention should be camelCased.
288
+
289
+ ```ts title="src/vendure-config.ts"
290
+ const config = {
291
+ // ...
292
+ customFields: {
293
+ Product: [
294
+ {
295
+ // highlight-next-line
296
+ name: 'infoUrl',
297
+ type: 'string'
298
+ },
299
+ ]
300
+ }
301
+ };
302
+ ```
303
+
304
+ #### type
305
+
306
+ <CustomFieldProperty required={true} type="CustomFieldType" typeLink="/reference/typescript-api/custom-fields/custom-field-type"/>
307
+
308
+ The type of data that will be stored in the field.
309
+
310
+ #### list
311
+
312
+ <CustomFieldProperty required={false} type="boolean" />
313
+
314
+ If set to `true`, then the field will be an array of the specified type. Defaults to `false`.
315
+
316
+ ```ts title="src/vendure-config.ts"
317
+ const config = {
318
+ // ...
319
+ customFields: {
320
+ Product: [
321
+ {
322
+ name: 'infoUrls',
323
+ type: 'string',
324
+ // highlight-next-line
325
+ list: true,
326
+ },
327
+ ]
328
+ }
329
+ };
330
+ ```
331
+
332
+ Setting a custom field to be a list has the following effects:
333
+
334
+ * The GraphQL type will be an array of the specified type.
335
+ * The Dashboard will display a list of inputs for the field.
336
+ * For lists of primitive types (anything except `relation`), the database type will be set to `simple-json` which serializes the data into a JSON string. For lists of `relation` types, a separate many-to-many table will be created.
337
+
338
+ #### label
339
+
340
+ <CustomFieldProperty required={false} type="LocalizedStringArray" typeLink="/reference/typescript-api/configurable-operation-def/localized-string-array"/>
341
+
342
+ An array of localized labels for the field. These are used in the Dashboard to label the field.
343
+
344
+ ```ts title="src/vendure-config.ts"
345
+ import { LanguageCode } from '@vendure/core';
346
+
347
+ const config = {
348
+ // ...
349
+ customFields: {
350
+ Product: [
351
+ {
352
+ name: 'infoUrl',
353
+ type: 'string',
354
+ // highlight-start
355
+ label: [
356
+ { languageCode: LanguageCode.en, value: 'Info URL' },
357
+ { languageCode: LanguageCode.de, value: 'Info-URL' },
358
+ { languageCode: LanguageCode.es, value: 'URL de información' },
359
+ ],
360
+ // highlight-end
361
+ },
362
+ ]
363
+ }
364
+ };
365
+ ```
366
+
367
+ #### description
368
+
369
+ <CustomFieldProperty required={false} type="LocalizedStringArray" typeLink="/reference/typescript-api/configurable-operation-def/localized-string-array"/>
370
+
371
+ An array of localized descriptions for the field. These are used in the Dashboard to describe the field.
372
+
373
+ ```ts title="src/vendure-config.ts"
374
+ import { LanguageCode } from '@vendure/core';
375
+
376
+ const config = {
377
+ // ...
378
+ customFields: {
379
+ Product: [
380
+ {
381
+ name: 'infoUrl',
382
+ type: 'string',
383
+ // highlight-start
384
+ description: [
385
+ { languageCode: LanguageCode.en, value: 'A URL to more information about the product' },
386
+ { languageCode: LanguageCode.de, value: 'Eine URL zu weiteren Informationen über das Produkt' },
387
+ { languageCode: LanguageCode.es, value: 'Una URL con más información sobre el producto' },
388
+ ],
389
+ // highlight-end
390
+ },
391
+ ]
392
+ }
393
+ };
394
+ ```
395
+
396
+ #### public
397
+
398
+ <CustomFieldProperty required={false} type="boolean" />
399
+
400
+ Whether the custom field is available via the Shop API. Defaults to `true`.
401
+
402
+ ```ts title="src/vendure-config.ts"
403
+ const config = {
404
+ // ...
405
+ customFields: {
406
+ Product: [
407
+ {
408
+ name: 'profitMargin',
409
+ type: 'int',
410
+ // highlight-next-line
411
+ public: false,
412
+ },
413
+ ]
414
+ }
415
+ };
416
+ ```
417
+
418
+ #### readonly
419
+
420
+ <CustomFieldProperty required={false} type="boolean" />
421
+
422
+ Whether the custom field can be updated via the GraphQL APIs. Defaults to `false`. If set to `true`, then the field
423
+ can only be updated via direct manipulation via TypeScript code in a plugin.
424
+
425
+ ```ts title="src/vendure-config.ts"
426
+ const config = {
427
+ // ...
428
+ customFields: {
429
+ Product: [
430
+ {
431
+ name: 'profitMargin',
432
+ type: 'int',
433
+ // highlight-next-line
434
+ readonly: true,
435
+ },
436
+ ]
437
+ }
438
+ };
439
+ ```
440
+
441
+ #### internal
442
+
443
+ <CustomFieldProperty required={false} type="boolean" />
444
+
445
+ Whether the custom field is exposed at all via the GraphQL APIs. Defaults to `false`. If set to `true`, then the field will not be available
446
+ via the GraphQL API, but can still be used in TypeScript code in a plugin. Internal fields are useful for storing data which is not intended
447
+ to be exposed to the outside world, but which can be used in plugin logic.
448
+
449
+ ```ts title="src/vendure-config.ts"
450
+ const config = {
451
+ // ...
452
+ customFields: {
453
+ OrderLine: [
454
+ {
455
+ name: 'referralId',
456
+ type: 'string',
457
+ // highlight-next-line
458
+ internal: true,
459
+ },
460
+ ]
461
+ }
462
+ };
463
+ ```
464
+
465
+ #### defaultValue
466
+
467
+ <CustomFieldProperty required={false} type="any" />
468
+
469
+ The default value when an Entity is created with this field. If not provided, then the default value will be `null`. Note that if you set `nullable: false`, then
470
+ you should also provide a `defaultValue` to avoid database errors when creating new entities.
471
+
472
+ ```ts title="src/vendure-config.ts"
473
+ const config = {
474
+ // ...
475
+ customFields: {
476
+ Product: [
477
+ {
478
+ name: 'reviewRating',
479
+ type: 'float',
480
+ // highlight-next-line
481
+ defaultValue: 0,
482
+ },
483
+ ]
484
+ }
485
+ };
486
+ ```
487
+
488
+ #### nullable
489
+
490
+ <CustomFieldProperty required={false} type="boolean" />
491
+
492
+ Whether the field is nullable in the database. If set to `false`, then a `defaultValue` should be provided.
493
+
494
+ ```ts title="src/vendure-config.ts"
495
+ const config = {
496
+ // ...
497
+ customFields: {
498
+ Product: [
499
+ {
500
+ name: 'reviewRating',
501
+ type: 'float',
502
+ // highlight-start
503
+ nullable: false,
504
+ defaultValue: 0,
505
+ // highlight-end
506
+ },
507
+ ]
508
+ }
509
+ };
510
+ ```
511
+
512
+ #### unique
513
+
514
+ <CustomFieldProperty required={false} type="boolean" />
515
+
516
+ Whether the value of the field should be unique. When set to `true`, a UNIQUE constraint is added to the column. Defaults
517
+ to `false`.
518
+
519
+ ```ts title="src/vendure-config.ts"
520
+ const config = {
521
+ // ...
522
+ customFields: {
523
+ Customer: [
524
+ {
525
+ name: 'externalId',
526
+ type: 'string',
527
+ // highlight-next-line
528
+ unique: true,
529
+ },
530
+ ]
531
+ }
532
+ };
533
+ ```
534
+
535
+ #### validate
536
+
537
+ <CustomFieldProperty required={false} type="(value: any, injector: Injector, ctx: RequestContext) => string | LocalizedString[] | void" />
538
+
539
+ A custom validation function. If the value is valid, then the function should not return a value. If a string or LocalizedString array is returned, this is interpreted as an error message.
540
+
541
+ Note that string, number and date fields also have some built-in validation options such as `min`, `max`, `pattern` which you can read about in the following sections.
542
+
543
+ ```ts title="src/vendure-config.ts"
544
+ import { LanguageCode } from '@vendure/core';
545
+
546
+ const config = {
547
+ // ...
548
+ customFields: {
549
+ Product: [
550
+ {
551
+ name: 'infoUrl',
552
+ type: 'string',
553
+ // highlight-start
554
+ validate: (value: any) => {
555
+ if (!value.startsWith('http')) {
556
+ // If a localized error message is not required, a simple string can be returned.
557
+ // return 'The URL must start with "http"';
558
+
559
+ // If a localized error message is required, return an array of LocalizedString objects.
560
+ return [
561
+ { languageCode: LanguageCode.en, value: 'The URL must start with "http"' },
562
+ { languageCode: LanguageCode.de, value: 'Die URL muss mit "http" beginnen' },
563
+ { languageCode: LanguageCode.es, value: 'La URL debe comenzar con "http"' },
564
+ ];
565
+ }
566
+ },
567
+ // highlight-end
568
+ },
569
+ ]
570
+ }
571
+ };
572
+ ```
573
+
574
+ This function can even be asynchronous and may use the [Injector](/reference/typescript-api/common/injector/) to access providers.
575
+
576
+ ```ts title="src/vendure-config.ts"
577
+ const config = {
578
+ // ...
579
+ customFields: {
580
+ ProductVariant: [
581
+ {
582
+ name: 'partCode',
583
+ type: 'string',
584
+ // highlight-start
585
+ validate: async (value, injector, ctx) => {
586
+ const partCodeService = injector.get(PartCodeService);
587
+ const isValid = await partCodeService.validateCode(value);
588
+ if (!isValid) {
589
+ return `Part code ${value} is not valid`;
590
+ }
591
+ },
592
+ // highlight-end
593
+ },
594
+ ]
595
+ }
596
+ };
597
+ ```
598
+
599
+ #### requiresPermission
600
+
601
+ <CustomFieldProperty required={false} type="Permission | Permission[] | string | string[]" />
602
+
603
+ Since v2.2.0, you can restrict access to custom field data by specifying a permission or permissions which are required to read and update the field.
604
+ For instance, you might want to add a particular custom field to the `Product` entity, but you do not want all administrators to be able
605
+ to view or update the field.
606
+
607
+ In the Dashboard, the custom field will not be displayed if the current administrator lacks the required permission.
608
+
609
+ In the GraphQL API, if the current user does not have the required permission, then the field will always return `null`.
610
+ Attempting to set the value of a field for which the user does not have the required permission will cause the mutation to fail
611
+ with an error.
612
+
613
+ ```ts title="src/vendure-config.ts"
614
+ import { Permission } from '@vendure/core';
615
+
616
+ const config = {
617
+ // ...
618
+ customFields: {
619
+ Product: [
620
+ {
621
+ name: 'internalNotes',
622
+ type: 'text',
623
+ // highlight-start
624
+ requiresPermission: Permission.SuperAdmin,
625
+ // highlight-end
626
+ },
627
+ {
628
+ name: 'shippingType',
629
+ type: 'string',
630
+ // highlight-start
631
+ // You can also use an array of permissions,
632
+ // and the user must have at least one of the permissions
633
+ // to access the field.
634
+ requiresPermission: [
635
+ Permission.SuperAdmin,
636
+ Permission.ReadShippingMethod,
637
+ ],
638
+ // highlight-end
639
+ },
640
+ ]
641
+ }
642
+ };
643
+ ```
644
+
645
+ :::note
646
+
647
+ The `requiresPermission` property only affects the _Admin API_. Access to a custom field via the _Shop API_ is controlled by the `public` property.
648
+
649
+ If you need special logic to control access to a custom field in the Shop API, you can set `public: false` and then implement
650
+ a custom [field resolver](/guides/developer-guide/extend-graphql-api/#add-fields-to-existing-types) which contains the necessary logic, and returns
651
+ the entity's custom field value if the current customer meets the requirements.
652
+
653
+ :::
654
+
655
+ #### deprecated
656
+
657
+ <CustomFieldProperty required={false} type="boolean | string" />
658
+
659
+ Marks the custom field as deprecated in the GraphQL schema. When set to `true`, the field will be marked with the `@deprecated` directive. When set to a string, that string will be used as the deprecation reason.
660
+
661
+ This is useful for API evolution - you can mark fields as deprecated to signal to API consumers that they should migrate to newer alternatives, while still maintaining backward compatibility.
662
+
663
+ ```ts title="src/vendure-config.ts"
664
+ const config = {
665
+ // ...
666
+ customFields: {
667
+ Product: [
668
+ {
669
+ name: 'oldField',
670
+ type: 'string',
671
+ // highlight-next-line
672
+ deprecated: true,
673
+ },
674
+ {
675
+ name: 'legacyUrl',
676
+ type: 'string',
677
+ // highlight-next-line
678
+ deprecated: 'Use the new infoUrl field instead',
679
+ },
680
+ ]
681
+ }
682
+ };
683
+ ```
684
+
685
+ When querying the GraphQL schema, deprecated fields will be marked accordingly:
686
+
687
+ ```graphql
688
+ type ProductCustomFields {
689
+ oldField: String @deprecated
690
+ legacyUrl: String @deprecated(reason: "Use the new infoUrl field instead")
691
+ infoUrl: String
692
+ }
693
+ ```
694
+
695
+ ### Properties for `string` fields
696
+
697
+ In addition to the common properties, the `string` custom fields have some type-specific properties:
698
+
699
+ - [`pattern`](#pattern)
700
+ - [`options`](#options)
701
+ - [`length`](#length)
702
+
703
+ #### pattern
704
+
705
+ <CustomFieldProperty required={false} type="string" />
706
+
707
+ A regex pattern which the field value must match. If the value does not match the pattern, then the validation will fail.
708
+
709
+ ```ts title="src/vendure-config.ts"
710
+ const config = {
711
+ // ...
712
+ customFields: {
713
+ ProductVariant: [
714
+ {
715
+ name: 'gtin',
716
+ type: 'string',
717
+ // highlight-next-line
718
+ pattern: '^\d{8}(?:\d{4,6})?$',
719
+ },
720
+ ]
721
+ }
722
+ };
723
+ ```
724
+
725
+ #### options
726
+
727
+ <CustomFieldProperty required={false} type="{ value: string; label?: LocalizedString[]; }[]" />
728
+
729
+ An array of pre-defined options for the field. This is useful for fields which should only have a limited set of values. The `value` property is the value which will be stored in the database, and the `label` property is an optional array of localized strings which will be displayed in the Dashboard.
730
+
731
+ ```ts title="src/vendure-config.ts"
732
+ import { LanguageCode } from '@vendure/core';
733
+
734
+ const config = {
735
+ // ...
736
+ customFields: {
737
+ ProductVariant: [
738
+ {
739
+ name: 'condition',
740
+ type: 'string',
741
+ // highlight-start
742
+ options: [
743
+ { value: 'new', label: [{ languageCode: LanguageCode.en, value: 'New' }] },
744
+ { value: 'used', label: [{ languageCode: LanguageCode.en, value: 'Used' }] },
745
+ ],
746
+ // highlight-end
747
+ },
748
+ ]
749
+ }
750
+ };
751
+ ```
752
+
753
+ Attempting to set the value of the field to a value which is not in the `options` array will cause the validation to fail.
754
+
755
+ #### length
756
+
757
+ <CustomFieldProperty required={false} type="number" />
758
+
759
+ The max length of the varchar created in the database. Defaults to 255. Maximum is 65,535.
760
+
761
+ ```ts title="src/vendure-config.ts"
762
+ const config = {
763
+ // ...
764
+ customFields: {
765
+ ProductVariant: [
766
+ {
767
+ name: 'partCode',
768
+ type: 'string',
769
+ // highlight-next-line
770
+ length: 20,
771
+ },
772
+ ]
773
+ }
774
+ };
775
+ ```
776
+
777
+ ### Properties for `localeString` fields
778
+
779
+ In addition to the common properties, the `localeString` custom fields have some type-specific properties:
780
+
781
+ - [`pattern`](#pattern-1)
782
+ - [`length`](#length-1)
783
+
784
+ #### pattern
785
+
786
+ <CustomFieldProperty required={false} type="string" />
787
+
788
+ Same as the `pattern` property for `string` fields.
789
+
790
+ #### length
791
+
792
+ <CustomFieldProperty required={false} type="number" />
793
+
794
+ Same as the `length` property for `string` fields.
795
+
796
+ ### Properties for `int` & `float` fields
797
+
798
+ In addition to the common properties, the `int` & `float` custom fields have some type-specific properties:
799
+
800
+ - [`min`](#min)
801
+ - [`max`](#max)
802
+ - [`step`](#step)
803
+
804
+ #### min
805
+
806
+ <CustomFieldProperty required={false} type="number" />
807
+
808
+ The minimum permitted value. If the value is less than this, then the validation will fail.
809
+
810
+ ```ts title="src/vendure-config.ts"
811
+ const config = {
812
+ // ...
813
+ customFields: {
814
+ ProductVariant: [
815
+ {
816
+ name: 'reviewRating',
817
+ type: 'int',
818
+ // highlight-next-line
819
+ min: 0,
820
+ },
821
+ ]
822
+ }
823
+ };
824
+ ```
825
+
826
+ #### max
827
+
828
+ <CustomFieldProperty required={false} type="number" />
829
+
830
+ The maximum permitted value. If the value is greater than this, then the validation will fail.
831
+
832
+ ```ts title="src/vendure-config.ts"
833
+ const config = {
834
+ // ...
835
+ customFields: {
836
+ ProductVariant: [
837
+ {
838
+ name: 'reviewRating',
839
+ type: 'int',
840
+ // highlight-next-line
841
+ max: 5,
842
+ },
843
+ ]
844
+ }
845
+ };
846
+ ```
847
+
848
+ #### step
849
+
850
+ <CustomFieldProperty required={false} type="number" />
851
+
852
+ The step value. This is used in the Dashboard to determine the increment/decrement value of the input field.
853
+
854
+ ```ts title="src/vendure-config.ts"
855
+ const config = {
856
+ // ...
857
+ customFields: {
858
+ ProductVariant: [
859
+ {
860
+ name: 'reviewRating',
861
+ type: 'int',
862
+ // highlight-next-line
863
+ step: 0.5,
864
+ },
865
+ ]
866
+ }
867
+ };
868
+ ```
869
+
870
+ ### Properties for `datetime` fields
871
+
872
+ In addition to the common properties, the `datetime` custom fields have some type-specific properties.
873
+ The min, max & step properties for datetime fields are intended to be used as described in
874
+ [the MDN datetime-local docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local#Additional_attributes)
875
+
876
+ - [`min`](#min-1)
877
+ - [`max`](#max-1)
878
+ - [`step`](#step-1)
879
+
880
+ #### min
881
+
882
+ <CustomFieldProperty required={false} type="string" />
883
+
884
+ The earliest permitted date. If the value is earlier than this, then the validation will fail.
885
+
886
+ ```ts title="src/vendure-config.ts"
887
+ const config = {
888
+ // ...
889
+ customFields: {
890
+ ProductVariant: [
891
+ {
892
+ name: 'releaseDate',
893
+ type: 'datetime',
894
+ // highlight-next-line
895
+ min: '2019-01-01T00:00:00.000Z',
896
+ },
897
+ ]
898
+ }
899
+ };
900
+ ```
901
+
902
+ #### max
903
+
904
+ <CustomFieldProperty required={false} type="string" />
905
+
906
+ The latest permitted date. If the value is later than this, then the validation will fail.
907
+
908
+ ```ts title="src/vendure-config.ts"
909
+ const config = {
910
+ // ...
911
+ customFields: {
912
+ ProductVariant: [
913
+ {
914
+ name: 'releaseDate',
915
+ type: 'datetime',
916
+ // highlight-next-line
917
+ max: '2019-12-31T23:59:59.999Z',
918
+ },
919
+ ]
920
+ }
921
+ };
922
+ ```
923
+
924
+ #### step
925
+
926
+ <CustomFieldProperty required={false} type="string" />
927
+
928
+ The step value. See [the MDN datetime-local docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local#step) to understand how this is used.
929
+
930
+ ### Properties for `struct` fields
931
+
932
+ :::info
933
+ The `struct` custom field type is available from Vendure v3.1.0.
934
+ :::
935
+
936
+ In addition to the common properties, the `struct` custom fields have some type-specific properties:
937
+
938
+ - [`fields`](#fields)
939
+
940
+ #### fields
941
+
942
+ <CustomFieldProperty required={true} type="StructFieldConfig[]" typeLink="/reference/typescript-api/custom-fields/struct-field-config" />
943
+
944
+ A `struct` is a data structure comprising a set of named fields, each with its own type. The `fields` property is an array of `StructFieldConfig` objects, each of which defines a field within the struct.
945
+
946
+ ```ts title="src/vendure-config.ts"
947
+ const config = {
948
+ // ...
949
+ customFields: {
950
+ Product: [
951
+ {
952
+ name: 'dimensions',
953
+ type: 'struct',
954
+ // highlight-start
955
+ fields: [
956
+ { name: 'length', type: 'int' },
957
+ { name: 'width', type: 'int' },
958
+ { name: 'height', type: 'int' },
959
+ ],
960
+ // highlight-end
961
+ },
962
+ ]
963
+ }
964
+ };
965
+ ```
966
+
967
+ When querying the `Product` entity, the `dimensions` field will be an object with the fields `length`, `width` and `height`:
968
+
969
+ ```graphql
970
+ query {
971
+ product(id: 1) {
972
+ customFields {
973
+ dimensions {
974
+ length
975
+ width
976
+ height
977
+ }
978
+ }
979
+ }
980
+ }
981
+ ```
982
+
983
+ Struct fields support many of the same properties as other custom fields, such as `list`, `label`, `description`, `validate`, `ui` and
984
+ type-specific properties such as `options` and `pattern` for string types.
985
+
986
+ :::note
987
+ The following properties are **not** supported for `struct` fields: `public`, `readonly`, `internal`, `defaultValue`, `nullable`, `unique`, `requiresPermission`.
988
+ :::
989
+
990
+ ```ts title="src/vendure-config.ts"
991
+ import { LanguageCode } from '@vendure/core';
992
+
993
+ const config = {
994
+ // ...
995
+ customFields: {
996
+ OrderLine: [
997
+ {
998
+ name: 'customizationOptions',
999
+ type: 'struct',
1000
+ fields: [
1001
+ {
1002
+ name: 'color',
1003
+ type: 'string',
1004
+ // highlight-start
1005
+ options: [
1006
+ { value: 'red', label: [{ languageCode: LanguageCode.en, value: 'Red' }] },
1007
+ { value: 'blue', label: [{ languageCode: LanguageCode.en, value: 'Blue' }] },
1008
+ ],
1009
+ // highlight-end
1010
+ },
1011
+ {
1012
+ name: 'engraving',
1013
+ type: 'string',
1014
+ // highlight-start
1015
+ validate: (value: any) => {
1016
+ if (value.length > 20) {
1017
+ return 'Engraving text must be 20 characters or fewer';
1018
+ }
1019
+ },
1020
+ },
1021
+ {
1022
+ name: 'notifyEmailAddresses',
1023
+ type: 'string',
1024
+ // highlight-start
1025
+ list: true,
1026
+ // highlight-end
1027
+ }
1028
+ ],
1029
+ },
1030
+ ]
1031
+ }
1032
+ };
1033
+ ```
1034
+
1035
+ ### Properties for `relation` fields
1036
+
1037
+ In addition to the common properties, the `relation` custom fields have some type-specific properties:
1038
+
1039
+ - [`entity`](#entity)
1040
+ - [`eager`](#eager)
1041
+ - [`graphQLType`](#graphqltype)
1042
+ - [`inverseSide`](#inverseside)
1043
+
1044
+ #### entity
1045
+
1046
+ <CustomFieldProperty required={true} type="VendureEntity" typeLink="/reference/typescript-api/entities/vendure-entity" />
1047
+
1048
+
1049
+ The entity which this custom field is referencing. This can be one of the built-in entities, or a custom entity. If the entity is a custom entity, it must extend the `VendureEntity` class.
1050
+
1051
+ ```ts title="src/vendure-config.ts"
1052
+ import { Product } from '\@vendure/core';
1053
+
1054
+ const config = {
1055
+ // ...
1056
+ customFields: {
1057
+ Product: [
1058
+ {
1059
+ name: 'relatedProducts',
1060
+ list: true,
1061
+ // highlight-next-line
1062
+ type: 'relation',
1063
+ // highlight-next-line
1064
+ entity: Product,
1065
+ },
1066
+ ]
1067
+ }
1068
+ };
1069
+ ```
1070
+
1071
+ #### eager
1072
+
1073
+ <CustomFieldProperty required={false} type="boolean" />
1074
+
1075
+ Whether to [eagerly load](https://typeorm.io/#/eager-and-lazy-relations) the relation. Defaults to false. Note that eager loading has performance implications, so should only be used when necessary.
1076
+
1077
+ ```ts title="src/vendure-config.ts"
1078
+ import { Product } from '\@vendure/core';
1079
+
1080
+ const config = {
1081
+ // ...
1082
+ customFields: {
1083
+ Product: [
1084
+ {
1085
+ name: 'relatedProducts',
1086
+ list: true,
1087
+ type: 'relation',
1088
+ entity: Product,
1089
+ // highlight-next-line
1090
+ eager: true,
1091
+ },
1092
+ ]
1093
+ }
1094
+ };
1095
+ ```
1096
+
1097
+ #### graphQLType
1098
+
1099
+ <CustomFieldProperty required={false} type="string" />
1100
+
1101
+ The name of the GraphQL type that corresponds to the entity. Can be omitted if the GraphQL type name is the same as the entity name, which is the case for all of the built-in entities.
1102
+
1103
+ ```ts title="src/vendure-config.ts"
1104
+ import { CmsArticle } from './entities/cms-article.entity';
1105
+
1106
+ const config = {
1107
+ // ...
1108
+ customFields: {
1109
+ Product: [
1110
+ {
1111
+ name: 'blogPosts',
1112
+ list: true,
1113
+ type: 'relation',
1114
+ entity: CmsArticle,
1115
+ // highlight-next-line
1116
+ graphQLType: 'BlogPost',
1117
+ },
1118
+ ]
1119
+ }
1120
+ };
1121
+ ```
1122
+
1123
+ In the above example, the `CmsArticle` entity is being used as a related entity. However, the GraphQL type name is `BlogPost`, so we must specify this in the `graphQLType` property, otherwise Vendure will try to extend the GraphQL schema with reference to a non-existent "CmsArticle" type.
1124
+
1125
+ #### inverseSide
1126
+
1127
+ <CustomFieldProperty required={false} type="string | ((object: VendureEntity) => any)" />
1128
+
1129
+ Allows you to specify the [inverse side of the relation](https://typeorm.io/#inverse-side-of-the-relationship). Let's say you are adding a relation from `Product`
1130
+ to a custom entity which refers back to the product. You can specify this inverse relation like so:
1131
+
1132
+ ```ts title="src/vendure-config.ts"
1133
+ import { Product } from '\@vendure/core';
1134
+ import { ProductReview } from './entities/product-review.entity';
1135
+
1136
+ const config = {
1137
+ // ...
1138
+ customFields: {
1139
+ Product: [
1140
+ {
1141
+ name: 'reviews',
1142
+ list: true,
1143
+ type: 'relation',
1144
+ entity: ProductReview,
1145
+ // highlight-start
1146
+ inverseSide: (review: ProductReview) => review.product,
1147
+ // highlight-end
1148
+ },
1149
+ ]
1150
+ }
1151
+ };
1152
+ ```
1153
+
1154
+ This then allows you to query the `ProductReview` entity and include the `product` relation:
1155
+
1156
+ ```ts
1157
+ const { productReviews } = await this.connection.getRepository(ProductReview).findOne({
1158
+ where: { id: 1 },
1159
+ relations: ['product'],
1160
+ });
1161
+ ```
1162
+
1163
+ ## Custom Field UI
1164
+
1165
+ In the Dashboard, an appropriate default form input component is used for each custom field type. The Dashboard comes with a set of ready-made form input components, but it is also possible to create custom form input components. The ready-made components are:
1166
+
1167
+ - `text-form-input`: A single-line text input
1168
+ - `password-form-input`: A single-line password input
1169
+ - `select-form-input`: A select input
1170
+ - `textarea-form-input`: A multi-line textarea input
1171
+ - `rich-text-form-input`: A rich text editor input that saves the content as HTML
1172
+ - `json-editor-form-input`: A simple JSON editor input
1173
+ - `html-editor-form-input`: A simple HTML text editor input
1174
+ - `number-form-input`: A number input
1175
+ - `currency-form-input`: A number input with currency formatting
1176
+ - `boolean-form-input`: A checkbox input
1177
+ - `date-form-input`: A date input
1178
+ - `relation-form-input`: A generic entity relation input which allows an ID to be manually specified
1179
+ - `customer-group-form-input`: A select input for selecting a CustomerGroup
1180
+ - `facet-value-form-input`: A select input for selecting a FacetValue
1181
+ - `product-selector-form-input`: A select input for selecting a Product from an autocomplete list
1182
+ - `product-multi-form-input`: A modal dialog for selecting multiple Products or ProductVariants
1183
+
1184
+ #### Default form inputs
1185
+
1186
+ This table shows the default form input component used for each custom field type:
1187
+
1188
+ | Type | Form input component |
1189
+ |--------------------------|----------------------------------------------------------------------------------------------|
1190
+ | `string`, `localeString` | `text-form-input` or, if options are defined, `select-form-input` |
1191
+ | `text`, `localeText` | `textarea-form-input` |
1192
+ | `int`, `float` | `number-form-input` |
1193
+ | `boolean` | `boolean-form-input` |
1194
+ | `datetime` | `date-form-input` |
1195
+ | `relation` | Depends on related entity, defaults to `relation-form-input` if no specific component exists |
1196
+
1197
+ :::info
1198
+ **UI for relation type**
1199
+
1200
+ The Dashboard app has built-in selection components for "relation" custom fields that reference certain common entity types, such as Asset, Product, ProductVariant and Customer. If you are relating to an entity not covered by the built-in selection components, you will see a generic relation component which allows you to manually enter the ID of the entity you wish to select.
1201
+
1202
+ If the generic selector is not suitable, or is you wish to replace one of the built-in selector components, you can create a UI extension that defines a custom field control for that custom field. You can read more about this in the [custom form input guide](/guides/extending-the-admin-ui/custom-form-inputs/)
1203
+ :::
1204
+
1205
+ ### Specifying the input component
1206
+
1207
+ The defaults listed above can be overridden by using the `ui` property of the custom field config object. For example, if we want a number to be displayed as a currency input:
1208
+
1209
+ ```ts title="src/vendure-config.ts"
1210
+ const config = {
1211
+ // ...
1212
+ customFields: {
1213
+ ProductVariant: [
1214
+ {
1215
+ name: 'rrp',
1216
+ type: 'int',
1217
+ // highlight-next-line
1218
+ ui: { component: 'currency-form-input' },
1219
+ },
1220
+ ]
1221
+ }
1222
+ }
1223
+ ```
1224
+
1225
+ Here's an example config demonstrating several ways to customize the UI controls for custom fields:
1226
+
1227
+ ```ts
1228
+ import { LanguageCode, VendureConfig } from '@vendure/core';
1229
+
1230
+ const config: VendureConfig = {
1231
+ // ...
1232
+ customFields: {
1233
+ Product: [
1234
+ // Rich text editor
1235
+ { name: 'additionalInfo', type: 'text', ui: { component: 'rich-text-form-input' } },
1236
+ // JSON editor
1237
+ { name: 'specs', type: 'text', ui: { component: 'json-editor-form-input' } },
1238
+ // Numeric with suffix
1239
+ {
1240
+ name: 'weight',
1241
+ type: 'int',
1242
+ ui: { component: 'number-form-input', suffix: 'g' },
1243
+ },
1244
+ // Currency input
1245
+ {
1246
+ name: 'RRP',
1247
+ type: 'int',
1248
+ ui: { component: 'currency-form-input' },
1249
+ },
1250
+ // Select with options
1251
+ {
1252
+ name: 'pageType',
1253
+ type: 'string',
1254
+ ui: {
1255
+ component: 'select-form-input',
1256
+ options: [
1257
+ { value: 'static', label: [{ languageCode: LanguageCode.en, value: 'Static' }] },
1258
+ { value: 'dynamic', label: [{ languageCode: LanguageCode.en, value: 'Dynamic' }] },
1259
+ ],
1260
+ },
1261
+ },
1262
+ // Text with prefix
1263
+ {
1264
+ name: 'link',
1265
+ type: 'string',
1266
+ ui: {
1267
+ component: 'text-form-input',
1268
+ prefix: 'https://',
1269
+ },
1270
+ },
1271
+ ],
1272
+ },
1273
+ };
1274
+ ```
1275
+
1276
+ and the resulting UI:
1277
+
1278
+ ![custom-fields-ui.webp](custom-fields-ui.webp)
1279
+
1280
+ :::info
1281
+
1282
+ The various configuration options for each of the built-in form input (e.g. `suffix`) is documented in the [`DefaultFormConfigHash` object](/reference/typescript-api/configurable-operation-def/default-form-config-hash/).
1283
+
1284
+ :::
1285
+
1286
+ ### Custom form input components
1287
+
1288
+ If none of the built-in form input components are suitable, you can create your own. This is a more advanced topic which is covered in detail in the [Custom Form Input Components](/guides/extending-the-admin-ui/custom-form-inputs/) guide.
1289
+
1290
+ ## Tabbed custom fields
1291
+
1292
+ With a large, complex project, it's common for lots of custom fields to be required. This can get visually noisy in the UI, so Vendure supports tabbed custom fields. Just specify the tab name in the `ui` object, and those fields with the same tab name will be grouped in the UI! The tab name can also be a translation token if you need to support multiple languages.
1293
+
1294
+ :::note
1295
+
1296
+ Tabs will only be displayed if there is more than one tab name used in the custom fields. A lack of a `tab` property is counted as a tab (the "general" tab).
1297
+
1298
+ :::
1299
+
1300
+ ```ts title="src/vendure-config.ts"
1301
+ const config = {
1302
+ // ...
1303
+ customFields: {
1304
+ Product: [
1305
+ { name: 'additionalInfo', type: 'text', ui: { component: 'rich-text-form-input' } },
1306
+ { name: 'specs', type: 'text', ui: { component: 'json-editor-form-input' } },
1307
+ { name: 'width', type: 'int', ui: { tab: 'Shipping' } },
1308
+ { name: 'height', type: 'int', ui: { tab: 'Shipping' } },
1309
+ { name: 'depth', type: 'int', ui: { tab: 'Shipping' } },
1310
+ { name: 'weight', type: 'int', ui: { tab: 'Shipping' } },
1311
+ ],
1312
+ },
1313
+ }
1314
+ ```
1315
+
1316
+ ## TypeScript Typings
1317
+
1318
+ Because custom fields are generated at run-time, TypeScript has no way of knowing about them based on your
1319
+ VendureConfig. Consider the example above - let's say we have a [plugin](/guides/developer-guide/plugins/) which needs to
1320
+ access the custom field values on a Product entity.
1321
+
1322
+ Attempting to access the custom field will result in a TS compiler error:
1323
+
1324
+ ```ts {hl_lines=[12,13]}
1325
+ import { RequestContext, TransactionalConnection, ID, Product } from '@vendure/core';
1326
+
1327
+ export class MyService {
1328
+ constructor(private connection: TransactionalConnection) {
1329
+ }
1330
+
1331
+ async getInfoUrl(ctx: RequestContext, productId: ID) {
1332
+ const product = await this.connection
1333
+ .getRepository(ctx, Product)
1334
+ .findOne(productId);
1335
+
1336
+ return product.customFields.infoUrl;
1337
+ } // ^ TS2339: Property 'infoUrl'
1338
+ } // does not exist on type 'CustomProductFields'.
1339
+ ```
1340
+
1341
+ The "easy" way to solve this is to assert the `customFields` object as `any`:
1342
+
1343
+ ```ts
1344
+ return (product.customFields as any).infoUrl;
1345
+ ```
1346
+
1347
+ However, this sacrifices type safety. To make our custom fields type-safe we can take advantage of a couple of more advanced TypeScript features - [declaration merging](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#merging-interfaces) and [ambient modules](https://www.typescriptlang.org/docs/handbook/modules.html#ambient-modules). This allows us to extend the built-in `CustomProductFields` interface to add our custom fields to it:
1348
+
1349
+ ```ts
1350
+ // types.ts
1351
+
1352
+ // Note: we are using a deep import here, rather than importing from `@vendure/core` due to
1353
+ // a possible bug in TypeScript (https://github.com/microsoft/TypeScript/issues/46617) which
1354
+ // causes issues when multiple plugins extend the same custom fields interface.
1355
+ import { CustomProductFields } from '@vendure/core/dist/entity/custom-entity-fields';
1356
+
1357
+ declare module '@vendure/core/dist/entity/custom-entity-fields' {
1358
+ interface CustomProductFields {
1359
+ infoUrl: string;
1360
+ downloadable: boolean;
1361
+ shortName: string;
1362
+ }
1363
+ }
1364
+ ```
1365
+
1366
+ When this file is then imported into our service file (either directly or indirectly), TypeScript will know about our custom fields, and we do not need to do any type assertions.
1367
+
1368
+ ```ts
1369
+ return product.customFields.infoUrl;
1370
+ // no error, plus TS autocomplete works.
1371
+ ```
1372
+
1373
+ :::caution
1374
+ Note that for the typings to work correctly, **order of imports matters**.
1375
+
1376
+ One way to ensure that your custom field typings always get imported first is to include them as the first item in the tsconfig "include" array.
1377
+ :::
1378
+
1379
+ :::tip
1380
+ For a working example of this setup, see the [real-world-vendure repo](https://github.com/vendurehq/real-world-vendure/blob/master/src/plugins/reviews/types.ts)
1381
+ :::
1382
+
1383
+ ## Special cases
1384
+
1385
+ Beyond adding custom fields to the corresponding GraphQL types, and updating paginated list sort & filter options, there are a few special cases where adding custom fields to certain entities will result in further API changes.
1386
+
1387
+ ### OrderLine custom fields
1388
+
1389
+ When you define custom fields on the `OrderLine` entity, the following API changes are also automatically provided by Vendure:
1390
+
1391
+ - Shop API: [addItemToOrder](/reference/graphql-api/shop/mutations#additemtoorder) will have a 3rd input argument, `customFields`, which allows custom field values to be set when adding an item to the order.
1392
+ - Shop API: [adjustOrderLine](/reference/graphql-api/shop/mutations#additemtoorder) will have a 3rd input argument, `customFields`, which allows custom field values to be updated.
1393
+ - Admin API: the equivalent mutations for manipulating draft orders and for modifying and order will also have inputs to allow custom field values to be set.
1394
+
1395
+ :::info
1396
+ To see an example of this in practice, see the [Configurable Product guide](/guides/how-to/configurable-products/)
1397
+ :::
1398
+
1399
+ ### Order custom fields
1400
+
1401
+ When you define custom fields on the `Order` entity, the following API changes are also automatically provided by Vendure:
1402
+
1403
+ - Admin API: [modifyOrder](/reference/graphql-api/admin/mutations#modifyorder) will have a `customFields` field on the input object.
1404
+
1405
+ ### ShippingMethod custom fields
1406
+
1407
+ When you define custom fields on the `ShippingMethod` entity, the following API changes are also automatically provided by Vendure:
1408
+
1409
+ - Shop API: [eligibleShippingMethods](/reference/graphql-api/shop/queries#eligibleshippingmethods) will have public custom fields available on the result.
1410
+
1411
+ ### PaymentMethod custom fields
1412
+
1413
+ When you define custom fields on the `PaymentMethod` entity, the following API changes are also automatically provided by Vendure:
1414
+
1415
+ - Shop API: [eligiblePaymentMethods](/reference/graphql-api/shop/queries#eligiblepaymentmethods) will have public custom fields available on the result.
1416
+
1417
+ ### Customer custom fields
1418
+
1419
+ When you define custom fields on the `Customer` entity, the following API changes are also automatically provided by Vendure:
1420
+
1421
+ - Shop API: [registerCustomerAccount](/reference/graphql-api/shop/mutations#registercustomeraccount) will have have a `customFields` field on the input
1422
+ object.
1423
+