@wilshop/dashboard 3.5.2

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 (697) hide show
  1. package/README.md +116 -0
  2. package/dist/plugin/api/api-extensions.d.ts +1 -0
  3. package/dist/plugin/api/api-extensions.js +35 -0
  4. package/dist/plugin/api/metrics.resolver.d.ts +8 -0
  5. package/dist/plugin/api/metrics.resolver.js +40 -0
  6. package/dist/plugin/config/metrics-strategies.d.ts +39 -0
  7. package/dist/plugin/config/metrics-strategies.js +74 -0
  8. package/dist/plugin/constants.d.ts +8 -0
  9. package/dist/plugin/constants.js +31 -0
  10. package/dist/plugin/dashboard.plugin.d.ts +115 -0
  11. package/dist/plugin/dashboard.plugin.js +339 -0
  12. package/dist/plugin/default-page.html +193 -0
  13. package/dist/plugin/index.d.ts +2 -0
  14. package/dist/plugin/index.js +18 -0
  15. package/dist/plugin/package.json +3 -0
  16. package/dist/plugin/service/metrics.service.d.ts +15 -0
  17. package/dist/plugin/service/metrics.service.js +129 -0
  18. package/dist/plugin/types.d.ts +20 -0
  19. package/dist/plugin/types.js +9 -0
  20. package/dist/vite/constants.d.ts +5 -0
  21. package/dist/vite/constants.js +278 -0
  22. package/dist/vite/index.d.ts +1 -0
  23. package/dist/vite/index.js +1 -0
  24. package/dist/vite/types.d.ts +79 -0
  25. package/dist/vite/types.js +1 -0
  26. package/dist/vite/utils/ast-utils.d.ts +5 -0
  27. package/dist/vite/utils/ast-utils.js +29 -0
  28. package/dist/vite/utils/ast-utils.spec.d.ts +1 -0
  29. package/dist/vite/utils/ast-utils.spec.js +45 -0
  30. package/dist/vite/utils/compiler.d.ts +23 -0
  31. package/dist/vite/utils/compiler.js +165 -0
  32. package/dist/vite/utils/get-dashboard-paths.d.ts +5 -0
  33. package/dist/vite/utils/get-dashboard-paths.js +20 -0
  34. package/dist/vite/utils/logger.d.ts +3 -0
  35. package/dist/vite/utils/logger.js +39 -0
  36. package/dist/vite/utils/plugin-discovery.d.ts +27 -0
  37. package/dist/vite/utils/plugin-discovery.js +398 -0
  38. package/dist/vite/utils/schema-generator.d.ts +10 -0
  39. package/dist/vite/utils/schema-generator.js +35 -0
  40. package/dist/vite/utils/tsconfig-utils.d.ts +9 -0
  41. package/dist/vite/utils/tsconfig-utils.js +51 -0
  42. package/dist/vite/utils/ui-config.d.ts +3 -0
  43. package/dist/vite/utils/ui-config.js +30 -0
  44. package/dist/vite/vite-plugin-admin-api-schema.d.ts +24 -0
  45. package/dist/vite/vite-plugin-admin-api-schema.js +82 -0
  46. package/dist/vite/vite-plugin-config-loader.d.ts +16 -0
  47. package/dist/vite/vite-plugin-config-loader.js +70 -0
  48. package/dist/vite/vite-plugin-config.d.ts +4 -0
  49. package/dist/vite/vite-plugin-config.js +60 -0
  50. package/dist/vite/vite-plugin-dashboard-metadata.d.ts +7 -0
  51. package/dist/vite/vite-plugin-dashboard-metadata.js +61 -0
  52. package/dist/vite/vite-plugin-gql-tada.d.ts +6 -0
  53. package/dist/vite/vite-plugin-gql-tada.js +51 -0
  54. package/dist/vite/vite-plugin-hmr.d.ts +8 -0
  55. package/dist/vite/vite-plugin-hmr.js +34 -0
  56. package/dist/vite/vite-plugin-lingui-babel.d.ts +27 -0
  57. package/dist/vite/vite-plugin-lingui-babel.js +86 -0
  58. package/dist/vite/vite-plugin-tailwind-source.d.ts +7 -0
  59. package/dist/vite/vite-plugin-tailwind-source.js +48 -0
  60. package/dist/vite/vite-plugin-theme.d.ts +55 -0
  61. package/dist/vite/vite-plugin-theme.js +130 -0
  62. package/dist/vite/vite-plugin-transform-index.d.ts +11 -0
  63. package/dist/vite/vite-plugin-transform-index.js +40 -0
  64. package/dist/vite/vite-plugin-translations.d.ts +31 -0
  65. package/dist/vite/vite-plugin-translations.js +177 -0
  66. package/dist/vite/vite-plugin-ui-config.d.ts +150 -0
  67. package/dist/vite/vite-plugin-ui-config.js +36 -0
  68. package/dist/vite/vite-plugin-vendure-dashboard.d.ts +142 -0
  69. package/dist/vite/vite-plugin-vendure-dashboard.js +170 -0
  70. package/index.html +14 -0
  71. package/lingui.config.js +37 -0
  72. package/package.json +178 -0
  73. package/src/app/app-providers.tsx +31 -0
  74. package/src/app/common/delete-bulk-action.tsx +149 -0
  75. package/src/app/common/duplicate-bulk-action.tsx +147 -0
  76. package/src/app/common/duplicate-entity-dialog.tsx +117 -0
  77. package/src/app/common/map-faceted-filter-fields.ts +21 -0
  78. package/src/app/common/set-document-direction.ts +7 -0
  79. package/src/app/common/use-page-title.test.ts +263 -0
  80. package/src/app/common/use-page-title.ts +86 -0
  81. package/src/app/main.tsx +134 -0
  82. package/src/app/routeTree.gen.ts +1284 -0
  83. package/src/app/routes/__root.tsx +23 -0
  84. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +88 -0
  85. package/src/app/routes/_authenticated/_administrators/administrators.tsx +104 -0
  86. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +160 -0
  87. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +15 -0
  88. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +133 -0
  89. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +76 -0
  90. package/src/app/routes/_authenticated/_assets/assets.tsx +48 -0
  91. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +181 -0
  92. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +47 -0
  93. package/src/app/routes/_authenticated/_assets/components/asset-tag-filter.tsx +206 -0
  94. package/src/app/routes/_authenticated/_assets/components/asset-tags-editor.tsx +226 -0
  95. package/src/app/routes/_authenticated/_assets/components/manage-tags-dialog.tsx +212 -0
  96. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +102 -0
  97. package/src/app/routes/_authenticated/_channels/channels.tsx +81 -0
  98. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +251 -0
  99. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +15 -0
  100. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +193 -0
  101. package/src/app/routes/_authenticated/_collections/collections.tsx +337 -0
  102. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +236 -0
  103. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +130 -0
  104. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +153 -0
  105. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +50 -0
  106. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +83 -0
  107. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +24 -0
  108. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +433 -0
  109. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +15 -0
  110. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +82 -0
  111. package/src/app/routes/_authenticated/_countries/countries.tsx +72 -0
  112. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +123 -0
  113. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +15 -0
  114. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +51 -0
  115. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +134 -0
  116. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +80 -0
  117. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +72 -0
  118. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +121 -0
  119. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +155 -0
  120. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +347 -0
  121. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +15 -0
  122. package/src/app/routes/_authenticated/_customers/components/customer-group-controls.tsx +4 -0
  123. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +78 -0
  124. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-types.ts +5 -0
  125. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-utils.tsx +124 -0
  126. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +113 -0
  127. package/src/app/routes/_authenticated/_customers/components/customer-history/default-customer-history-components.tsx +176 -0
  128. package/src/app/routes/_authenticated/_customers/components/customer-history/index.ts +4 -0
  129. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +169 -0
  130. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +90 -0
  131. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +33 -0
  132. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +218 -0
  133. package/src/app/routes/_authenticated/_customers/customers.tsx +104 -0
  134. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +280 -0
  135. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +99 -0
  136. package/src/app/routes/_authenticated/_facets/components/facet-value-bulk-actions.tsx +16 -0
  137. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +49 -0
  138. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +139 -0
  139. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +182 -0
  140. package/src/app/routes/_authenticated/_facets/facets.tsx +121 -0
  141. package/src/app/routes/_authenticated/_facets/facets_.$facetId.values_.$id.tsx +158 -0
  142. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +152 -0
  143. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +28 -0
  144. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +161 -0
  145. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +189 -0
  146. package/src/app/routes/_authenticated/_orders/components/add-surcharge-form.tsx +139 -0
  147. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +100 -0
  148. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +287 -0
  149. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +320 -0
  150. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +159 -0
  151. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +20 -0
  152. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +65 -0
  153. package/src/app/routes/_authenticated/_orders/components/order-detail-shared.tsx +307 -0
  154. package/src/app/routes/_authenticated/_orders/components/order-history/default-order-history-components.tsx +98 -0
  155. package/src/app/routes/_authenticated/_orders/components/order-history/index.ts +3 -0
  156. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +80 -0
  157. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-types.ts +5 -0
  158. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-utils.tsx +173 -0
  159. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +104 -0
  160. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +175 -0
  161. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +53 -0
  162. package/src/app/routes/_authenticated/_orders/components/order-modification-preview-dialog.tsx +365 -0
  163. package/src/app/routes/_authenticated/_orders/components/order-modification-summary.tsx +261 -0
  164. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +100 -0
  165. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +194 -0
  166. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +40 -0
  167. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +293 -0
  168. package/src/app/routes/_authenticated/_orders/components/seller-orders-card.tsx +63 -0
  169. package/src/app/routes/_authenticated/_orders/components/settle-refund-dialog.tsx +80 -0
  170. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +64 -0
  171. package/src/app/routes/_authenticated/_orders/components/state-transition-control.tsx +99 -0
  172. package/src/app/routes/_authenticated/_orders/components/use-transition-order-to-state.tsx +151 -0
  173. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +775 -0
  174. package/src/app/routes/_authenticated/_orders/orders.tsx +120 -0
  175. package/src/app/routes/_authenticated/_orders/orders_.$aggregateOrderId_.seller-orders.$sellerOrderId.tsx +50 -0
  176. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +30 -0
  177. package/src/app/routes/_authenticated/_orders/orders_.$id_.modify.tsx +298 -0
  178. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +495 -0
  179. package/src/app/routes/_authenticated/_orders/utils/order-detail-loaders.tsx +134 -0
  180. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +10 -0
  181. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +159 -0
  182. package/src/app/routes/_authenticated/_orders/utils/use-modify-order.ts +335 -0
  183. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +37 -0
  184. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +33 -0
  185. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +58 -0
  186. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +110 -0
  187. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +88 -0
  188. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +197 -0
  189. package/src/app/routes/_authenticated/_product-variants/components/add-currency-dropdown.tsx +49 -0
  190. package/src/app/routes/_authenticated/_product-variants/components/add-stock-location-dropdown.tsx +56 -0
  191. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +110 -0
  192. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +88 -0
  193. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +207 -0
  194. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +98 -0
  195. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +471 -0
  196. package/src/app/routes/_authenticated/_products/components/add-option-group-dialog.tsx +127 -0
  197. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +372 -0
  198. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +282 -0
  199. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +416 -0
  200. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +190 -0
  201. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +370 -0
  202. package/src/app/routes/_authenticated/_products/components/option-groups-editor.tsx +180 -0
  203. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +72 -0
  204. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +117 -0
  205. package/src/app/routes/_authenticated/_products/components/product-option-group-badge.tsx +19 -0
  206. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +111 -0
  207. package/src/app/routes/_authenticated/_products/components/product-options-table.tsx +114 -0
  208. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +120 -0
  209. package/src/app/routes/_authenticated/_products/product-option-groups.graphql.ts +103 -0
  210. package/src/app/routes/_authenticated/_products/products.graphql.ts +352 -0
  211. package/src/app/routes/_authenticated/_products/products.tsx +121 -0
  212. package/src/app/routes/_authenticated/_products/products_.$id.tsx +258 -0
  213. package/src/app/routes/_authenticated/_products/products_.$id_.variants.tsx +405 -0
  214. package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$id.tsx +177 -0
  215. package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$productOptionGroupId.options_.$id.tsx +204 -0
  216. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +23 -0
  217. package/src/app/routes/_authenticated/_profile/profile.tsx +119 -0
  218. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +35 -0
  219. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +72 -0
  220. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +35 -0
  221. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +121 -0
  222. package/src/app/routes/_authenticated/_promotions/promotions.tsx +94 -0
  223. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +245 -0
  224. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +54 -0
  225. package/src/app/routes/_authenticated/_roles/components/permissions-table-grid.tsx +251 -0
  226. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +15 -0
  227. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +76 -0
  228. package/src/app/routes/_authenticated/_roles/roles.tsx +99 -0
  229. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +146 -0
  230. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +15 -0
  231. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +70 -0
  232. package/src/app/routes/_authenticated/_sellers/sellers.tsx +56 -0
  233. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +112 -0
  234. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +56 -0
  235. package/src/app/routes/_authenticated/_shipping-methods/components/metadata-badges.tsx +15 -0
  236. package/src/app/routes/_authenticated/_shipping-methods/components/price-display.tsx +21 -0
  237. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +33 -0
  238. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +36 -0
  239. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +61 -0
  240. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-test-result-wrapper.tsx +87 -0
  241. package/src/app/routes/_authenticated/_shipping-methods/components/test-address-form.tsx +256 -0
  242. package/src/app/routes/_authenticated/_shipping-methods/components/test-order-builder.tsx +244 -0
  243. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-result.tsx +97 -0
  244. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-sheet.tsx +41 -0
  245. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods.tsx +74 -0
  246. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-method-result.tsx +90 -0
  247. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method-sheet.tsx +56 -0
  248. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method.tsx +82 -0
  249. package/src/app/routes/_authenticated/_shipping-methods/components/use-shipping-method-test-state.ts +67 -0
  250. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +137 -0
  251. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +76 -0
  252. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +197 -0
  253. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +58 -0
  254. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +87 -0
  255. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +65 -0
  256. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +126 -0
  257. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +41 -0
  258. package/src/app/routes/_authenticated/_system/healthchecks.tsx +99 -0
  259. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +54 -0
  260. package/src/app/routes/_authenticated/_system/job-queue.tsx +265 -0
  261. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +249 -0
  262. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +15 -0
  263. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +72 -0
  264. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +69 -0
  265. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +127 -0
  266. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +15 -0
  267. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +84 -0
  268. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +119 -0
  269. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +149 -0
  270. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +63 -0
  271. package/src/app/routes/_authenticated/_zones/components/zone-countries-add.tsx +0 -0
  272. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +34 -0
  273. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +94 -0
  274. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +105 -0
  275. package/src/app/routes/_authenticated/_zones/zones.tsx +64 -0
  276. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +110 -0
  277. package/src/app/routes/_authenticated/index.tsx +233 -0
  278. package/src/app/routes/_authenticated.tsx +35 -0
  279. package/src/app/routes/login.tsx +49 -0
  280. package/src/app/styles.css +100 -0
  281. package/src/app/tailwindcss-animate.css +275 -0
  282. package/src/i18n/common-strings.ts +111 -0
  283. package/src/i18n/locales/ar.po +4972 -0
  284. package/src/i18n/locales/bg.po +3436 -0
  285. package/src/i18n/locales/cs.po +4972 -0
  286. package/src/i18n/locales/de.po +4972 -0
  287. package/src/i18n/locales/en.po +4972 -0
  288. package/src/i18n/locales/es.po +4972 -0
  289. package/src/i18n/locales/fa.po +4972 -0
  290. package/src/i18n/locales/fr.po +4972 -0
  291. package/src/i18n/locales/he.po +4972 -0
  292. package/src/i18n/locales/hr.po +4972 -0
  293. package/src/i18n/locales/it.po +4972 -0
  294. package/src/i18n/locales/ja.po +4972 -0
  295. package/src/i18n/locales/ko.po +4628 -0
  296. package/src/i18n/locales/nb.po +4972 -0
  297. package/src/i18n/locales/ne.po +4972 -0
  298. package/src/i18n/locales/nl.po +4628 -0
  299. package/src/i18n/locales/pl.po +4972 -0
  300. package/src/i18n/locales/pt_BR.po +4972 -0
  301. package/src/i18n/locales/pt_PT.po +4972 -0
  302. package/src/i18n/locales/ru.po +4972 -0
  303. package/src/i18n/locales/sv.po +4972 -0
  304. package/src/i18n/locales/tr.po +4972 -0
  305. package/src/i18n/locales/uk.po +4972 -0
  306. package/src/i18n/locales/zh_Hans.po +4972 -0
  307. package/src/i18n/locales/zh_Hant.po +4972 -0
  308. package/src/lib/components/data-display/boolean.tsx +23 -0
  309. package/src/lib/components/data-display/date-time.tsx +19 -0
  310. package/src/lib/components/data-display/json.tsx +20 -0
  311. package/src/lib/components/data-display/money.tsx +14 -0
  312. package/src/lib/components/data-input/affixed-input.stories.tsx +93 -0
  313. package/src/lib/components/data-input/affixed-input.tsx +79 -0
  314. package/src/lib/components/data-input/boolean-input.stories.tsx +102 -0
  315. package/src/lib/components/data-input/boolean-input.tsx +16 -0
  316. package/src/lib/components/data-input/checkbox-input.stories.tsx +61 -0
  317. package/src/lib/components/data-input/checkbox-input.tsx +15 -0
  318. package/src/lib/components/data-input/combination-mode-input.tsx +61 -0
  319. package/src/lib/components/data-input/configurable-operation-list-input.tsx +58 -0
  320. package/src/lib/components/data-input/custom-field-list-input.tsx +294 -0
  321. package/src/lib/components/data-input/customer-group-input.tsx +61 -0
  322. package/src/lib/components/data-input/datetime-input.stories.tsx +62 -0
  323. package/src/lib/components/data-input/datetime-input.tsx +192 -0
  324. package/src/lib/components/data-input/default-relation-input.tsx +626 -0
  325. package/src/lib/components/data-input/facet-value-input.tsx +78 -0
  326. package/src/lib/components/data-input/index.ts +23 -0
  327. package/src/lib/components/data-input/money-input.stories.tsx +88 -0
  328. package/src/lib/components/data-input/money-input.tsx +122 -0
  329. package/src/lib/components/data-input/number-input.stories.tsx +103 -0
  330. package/src/lib/components/data-input/number-input.tsx +85 -0
  331. package/src/lib/components/data-input/password-form-input.stories.tsx +65 -0
  332. package/src/lib/components/data-input/password-form-input.tsx +23 -0
  333. package/src/lib/components/data-input/product-multi-selector-input.tsx +416 -0
  334. package/src/lib/components/data-input/relation-input.tsx +165 -0
  335. package/src/lib/components/data-input/relation-selector.tsx +476 -0
  336. package/src/lib/components/data-input/rich-text-input.stories.tsx +92 -0
  337. package/src/lib/components/data-input/rich-text-input.tsx +16 -0
  338. package/src/lib/components/data-input/select-with-options.tsx +96 -0
  339. package/src/lib/components/data-input/slug-input.stories.tsx +232 -0
  340. package/src/lib/components/data-input/slug-input.tsx +289 -0
  341. package/src/lib/components/data-input/string-list-input.tsx +268 -0
  342. package/src/lib/components/data-input/struct-form-input.tsx +320 -0
  343. package/src/lib/components/data-input/text-input.stories.tsx +52 -0
  344. package/src/lib/components/data-input/text-input.tsx +16 -0
  345. package/src/lib/components/data-input/textarea-input.stories.tsx +55 -0
  346. package/src/lib/components/data-input/textarea-input.tsx +23 -0
  347. package/src/lib/components/data-table/add-filter-menu.tsx +64 -0
  348. package/src/lib/components/data-table/column-header-wrapper.tsx +106 -0
  349. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +141 -0
  350. package/src/lib/components/data-table/data-table-bulk-actions.tsx +99 -0
  351. package/src/lib/components/data-table/data-table-column-header.tsx +50 -0
  352. package/src/lib/components/data-table/data-table-context.tsx +106 -0
  353. package/src/lib/components/data-table/data-table-faceted-filter.tsx +195 -0
  354. package/src/lib/components/data-table/data-table-filter-badge-editable.tsx +35 -0
  355. package/src/lib/components/data-table/data-table-filter-badge.tsx +101 -0
  356. package/src/lib/components/data-table/data-table-filter-dialog.tsx +92 -0
  357. package/src/lib/components/data-table/data-table-pagination.tsx +103 -0
  358. package/src/lib/components/data-table/data-table-utils.ts +291 -0
  359. package/src/lib/components/data-table/data-table-view-options.tsx +130 -0
  360. package/src/lib/components/data-table/data-table.stories.tsx +249 -0
  361. package/src/lib/components/data-table/data-table.tsx +508 -0
  362. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +60 -0
  363. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +159 -0
  364. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +63 -0
  365. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +123 -0
  366. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +79 -0
  367. package/src/lib/components/data-table/global-views-bar.tsx +97 -0
  368. package/src/lib/components/data-table/global-views-sheet.tsx +11 -0
  369. package/src/lib/components/data-table/human-readable-operator.tsx +65 -0
  370. package/src/lib/components/data-table/manage-global-views-button.tsx +26 -0
  371. package/src/lib/components/data-table/my-views-button.tsx +47 -0
  372. package/src/lib/components/data-table/refresh-button.tsx +49 -0
  373. package/src/lib/components/data-table/save-view-button.tsx +45 -0
  374. package/src/lib/components/data-table/save-view-dialog.tsx +134 -0
  375. package/src/lib/components/data-table/types.ts +40 -0
  376. package/src/lib/components/data-table/use-all-bulk-actions.ts +19 -0
  377. package/src/lib/components/data-table/use-generated-columns.tsx +411 -0
  378. package/src/lib/components/data-table/user-views-sheet.tsx +11 -0
  379. package/src/lib/components/data-table/views-sheet.tsx +305 -0
  380. package/src/lib/components/date-range-picker.tsx +186 -0
  381. package/src/lib/components/labeled-data.tsx +21 -0
  382. package/src/lib/components/layout/app-layout.tsx +35 -0
  383. package/src/lib/components/layout/app-sidebar.tsx +37 -0
  384. package/src/lib/components/layout/channel-switcher.tsx +229 -0
  385. package/src/lib/components/layout/content-language-selector.tsx +46 -0
  386. package/src/lib/components/layout/dev-mode-indicator.tsx +18 -0
  387. package/src/lib/components/layout/generated-breadcrumbs.tsx +136 -0
  388. package/src/lib/components/layout/language-dialog.tsx +133 -0
  389. package/src/lib/components/layout/manage-languages-dialog.tsx +386 -0
  390. package/src/lib/components/layout/nav-item-wrapper.tsx +107 -0
  391. package/src/lib/components/layout/nav-main.tsx +331 -0
  392. package/src/lib/components/layout/nav-projects.tsx +81 -0
  393. package/src/lib/components/layout/nav-user.tsx +180 -0
  394. package/src/lib/components/login/login-form.tsx +124 -0
  395. package/src/lib/components/shared/alerts.tsx +52 -0
  396. package/src/lib/components/shared/animated-number.tsx +49 -0
  397. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +109 -0
  398. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +103 -0
  399. package/src/lib/components/shared/asset/asset-gallery.stories.tsx +76 -0
  400. package/src/lib/components/shared/asset/asset-gallery.tsx +623 -0
  401. package/src/lib/components/shared/asset/asset-picker-dialog.stories.tsx +58 -0
  402. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +109 -0
  403. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +38 -0
  404. package/src/lib/components/shared/asset/asset-preview-selector.tsx +32 -0
  405. package/src/lib/components/shared/asset/asset-preview.tsx +114 -0
  406. package/src/lib/components/shared/asset/asset-properties.tsx +44 -0
  407. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +71 -0
  408. package/src/lib/components/shared/assign-to-channel-dialog.tsx +156 -0
  409. package/src/lib/components/shared/assigned-channels.tsx +108 -0
  410. package/src/lib/components/shared/assigned-facet-values.tsx +61 -0
  411. package/src/lib/components/shared/channel-chip.tsx +43 -0
  412. package/src/lib/components/shared/channel-code-label.tsx +6 -0
  413. package/src/lib/components/shared/channel-selector.tsx +51 -0
  414. package/src/lib/components/shared/configurable-operation-arg-input.tsx +29 -0
  415. package/src/lib/components/shared/configurable-operation-input.tsx +167 -0
  416. package/src/lib/components/shared/configurable-operation-multi-selector.tsx +263 -0
  417. package/src/lib/components/shared/configurable-operation-selector.tsx +156 -0
  418. package/src/lib/components/shared/confirmation-dialog.tsx +58 -0
  419. package/src/lib/components/shared/copyable-text.tsx +30 -0
  420. package/src/lib/components/shared/country-selector.tsx +108 -0
  421. package/src/lib/components/shared/currency-selector.tsx +33 -0
  422. package/src/lib/components/shared/custom-fields-form.tsx +296 -0
  423. package/src/lib/components/shared/customer-address-form.tsx +338 -0
  424. package/src/lib/components/shared/customer-group-chip.tsx +30 -0
  425. package/src/lib/components/shared/customer-group-selector.tsx +65 -0
  426. package/src/lib/components/shared/customer-selector.tsx +112 -0
  427. package/src/lib/components/shared/detail-page-button.stories.tsx +52 -0
  428. package/src/lib/components/shared/detail-page-button.tsx +59 -0
  429. package/src/lib/components/shared/entity-assets.tsx +411 -0
  430. package/src/lib/components/shared/error-page.tsx +31 -0
  431. package/src/lib/components/shared/facet-value-chip.tsx +59 -0
  432. package/src/lib/components/shared/facet-value-selector.stories.tsx +48 -0
  433. package/src/lib/components/shared/facet-value-selector.tsx +458 -0
  434. package/src/lib/components/shared/form-field-wrapper.tsx +111 -0
  435. package/src/lib/components/shared/history-timeline/history-entry-date.tsx +37 -0
  436. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +28 -0
  437. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +60 -0
  438. package/src/lib/components/shared/history-timeline/history-note-entry.tsx +65 -0
  439. package/src/lib/components/shared/history-timeline/history-note-input.tsx +39 -0
  440. package/src/lib/components/shared/history-timeline/history-timeline-with-grouping.tsx +141 -0
  441. package/src/lib/components/shared/history-timeline/history-timeline.tsx +16 -0
  442. package/src/lib/components/shared/history-timeline/use-history-note-editor.ts +26 -0
  443. package/src/lib/components/shared/icon-mark.tsx +18 -0
  444. package/src/lib/components/shared/language-selector.tsx +56 -0
  445. package/src/lib/components/shared/logo-mark.tsx +24 -0
  446. package/src/lib/components/shared/multi-select.tsx +159 -0
  447. package/src/lib/components/shared/navigation-confirmation.tsx +64 -0
  448. package/src/lib/components/shared/option-value-input.tsx +97 -0
  449. package/src/lib/components/shared/paginated-list-data-table.stories.tsx +212 -0
  450. package/src/lib/components/shared/paginated-list-data-table.tsx +523 -0
  451. package/src/lib/components/shared/permission-guard.stories.tsx +46 -0
  452. package/src/lib/components/shared/permission-guard.tsx +51 -0
  453. package/src/lib/components/shared/product-variant-selector.tsx +136 -0
  454. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +93 -0
  455. package/src/lib/components/shared/rich-text-editor/image-dialog.tsx +223 -0
  456. package/src/lib/components/shared/rich-text-editor/link-dialog.tsx +151 -0
  457. package/src/lib/components/shared/rich-text-editor/responsive-toolbar.tsx +443 -0
  458. package/src/lib/components/shared/rich-text-editor/rich-text-editor.tsx +339 -0
  459. package/src/lib/components/shared/rich-text-editor/table-delete-menu.tsx +104 -0
  460. package/src/lib/components/shared/rich-text-editor/table-edit-icons.tsx +225 -0
  461. package/src/lib/components/shared/role-code-label.tsx +12 -0
  462. package/src/lib/components/shared/role-selector.tsx +56 -0
  463. package/src/lib/components/shared/seller-selector.tsx +111 -0
  464. package/src/lib/components/shared/stock-level-label.tsx +22 -0
  465. package/src/lib/components/shared/table-cell/order-table-cell-components.tsx +80 -0
  466. package/src/lib/components/shared/tax-category-selector.tsx +65 -0
  467. package/src/lib/components/shared/translatable-form-field.tsx +149 -0
  468. package/src/lib/components/shared/vendure-image.stories.tsx +167 -0
  469. package/src/lib/components/shared/vendure-image.tsx +307 -0
  470. package/src/lib/components/shared/zone-selector.tsx +65 -0
  471. package/src/lib/components/ui/accordion.stories.tsx +33 -0
  472. package/src/lib/components/ui/accordion.tsx +59 -0
  473. package/src/lib/components/ui/alert-dialog.stories.tsx +48 -0
  474. package/src/lib/components/ui/alert-dialog.tsx +128 -0
  475. package/src/lib/components/ui/alert.stories.tsx +35 -0
  476. package/src/lib/components/ui/alert.tsx +60 -0
  477. package/src/lib/components/ui/aspect-ratio.stories.tsx +28 -0
  478. package/src/lib/components/ui/aspect-ratio.tsx +9 -0
  479. package/src/lib/components/ui/badge.stories.tsx +28 -0
  480. package/src/lib/components/ui/badge.tsx +38 -0
  481. package/src/lib/components/ui/breadcrumb.stories.tsx +41 -0
  482. package/src/lib/components/ui/breadcrumb.tsx +102 -0
  483. package/src/lib/components/ui/button.stories.tsx +38 -0
  484. package/src/lib/components/ui/button.tsx +58 -0
  485. package/src/lib/components/ui/calendar.stories.tsx +22 -0
  486. package/src/lib/components/ui/calendar.tsx +447 -0
  487. package/src/lib/components/ui/card.stories.tsx +28 -0
  488. package/src/lib/components/ui/card.tsx +47 -0
  489. package/src/lib/components/ui/carousel.stories.tsx +34 -0
  490. package/src/lib/components/ui/carousel.tsx +241 -0
  491. package/src/lib/components/ui/chart.tsx +351 -0
  492. package/src/lib/components/ui/checkbox.stories.tsx +31 -0
  493. package/src/lib/components/ui/checkbox.tsx +27 -0
  494. package/src/lib/components/ui/collapsible.stories.tsx +39 -0
  495. package/src/lib/components/ui/collapsible.tsx +33 -0
  496. package/src/lib/components/ui/command.stories.tsx +44 -0
  497. package/src/lib/components/ui/command.tsx +139 -0
  498. package/src/lib/components/ui/context-menu.stories.tsx +38 -0
  499. package/src/lib/components/ui/context-menu.tsx +252 -0
  500. package/src/lib/components/ui/dialog.stories.tsx +52 -0
  501. package/src/lib/components/ui/dialog.tsx +116 -0
  502. package/src/lib/components/ui/drawer.stories.tsx +50 -0
  503. package/src/lib/components/ui/drawer.tsx +133 -0
  504. package/src/lib/components/ui/dropdown-menu.stories.tsx +41 -0
  505. package/src/lib/components/ui/dropdown-menu.tsx +223 -0
  506. package/src/lib/components/ui/form.tsx +141 -0
  507. package/src/lib/components/ui/grid-layout.tsx +376 -0
  508. package/src/lib/components/ui/hover-card.stories.tsx +38 -0
  509. package/src/lib/components/ui/hover-card.tsx +36 -0
  510. package/src/lib/components/ui/input-group.tsx +149 -0
  511. package/src/lib/components/ui/input-otp.stories.tsx +30 -0
  512. package/src/lib/components/ui/input-otp.tsx +77 -0
  513. package/src/lib/components/ui/input.stories.tsx +38 -0
  514. package/src/lib/components/ui/input.tsx +19 -0
  515. package/src/lib/components/ui/label.stories.tsx +24 -0
  516. package/src/lib/components/ui/label.tsx +21 -0
  517. package/src/lib/components/ui/menubar.stories.tsx +53 -0
  518. package/src/lib/components/ui/menubar.tsx +274 -0
  519. package/src/lib/components/ui/navigation-menu.stories.tsx +54 -0
  520. package/src/lib/components/ui/navigation-menu.tsx +168 -0
  521. package/src/lib/components/ui/pagination.stories.tsx +51 -0
  522. package/src/lib/components/ui/pagination.tsx +106 -0
  523. package/src/lib/components/ui/password-input.stories.tsx +32 -0
  524. package/src/lib/components/ui/password-input.tsx +29 -0
  525. package/src/lib/components/ui/popover.stories.tsx +33 -0
  526. package/src/lib/components/ui/popover.tsx +40 -0
  527. package/src/lib/components/ui/progress.stories.tsx +27 -0
  528. package/src/lib/components/ui/progress.tsx +29 -0
  529. package/src/lib/components/ui/radio-group.stories.tsx +34 -0
  530. package/src/lib/components/ui/radio-group.tsx +45 -0
  531. package/src/lib/components/ui/resizable.stories.tsx +32 -0
  532. package/src/lib/components/ui/resizable.tsx +54 -0
  533. package/src/lib/components/ui/scroll-area.stories.tsx +31 -0
  534. package/src/lib/components/ui/scroll-area.tsx +50 -0
  535. package/src/lib/components/ui/select.stories.tsx +36 -0
  536. package/src/lib/components/ui/select.tsx +183 -0
  537. package/src/lib/components/ui/separator.stories.tsx +35 -0
  538. package/src/lib/components/ui/separator.tsx +26 -0
  539. package/src/lib/components/ui/sheet.stories.tsx +50 -0
  540. package/src/lib/components/ui/sheet.tsx +118 -0
  541. package/src/lib/components/ui/sidebar-context.ts +16 -0
  542. package/src/lib/components/ui/sidebar.tsx +686 -0
  543. package/src/lib/components/ui/skeleton.stories.tsx +26 -0
  544. package/src/lib/components/ui/skeleton.tsx +13 -0
  545. package/src/lib/components/ui/slider.stories.tsx +37 -0
  546. package/src/lib/components/ui/slider.tsx +63 -0
  547. package/src/lib/components/ui/sonner.tsx +27 -0
  548. package/src/lib/components/ui/switch.stories.tsx +31 -0
  549. package/src/lib/components/ui/switch.tsx +26 -0
  550. package/src/lib/components/ui/table.stories.tsx +52 -0
  551. package/src/lib/components/ui/table.tsx +82 -0
  552. package/src/lib/components/ui/tabs.stories.tsx +29 -0
  553. package/src/lib/components/ui/tabs.tsx +48 -0
  554. package/src/lib/components/ui/textarea.stories.tsx +32 -0
  555. package/src/lib/components/ui/textarea.tsx +18 -0
  556. package/src/lib/components/ui/toggle-group.stories.tsx +31 -0
  557. package/src/lib/components/ui/toggle-group.tsx +73 -0
  558. package/src/lib/components/ui/toggle.stories.tsx +39 -0
  559. package/src/lib/components/ui/toggle.tsx +45 -0
  560. package/src/lib/components/ui/tooltip.stories.tsx +30 -0
  561. package/src/lib/components/ui/tooltip.tsx +51 -0
  562. package/src/lib/constants.ts +336 -0
  563. package/src/lib/framework/alert/alert-extensions.tsx +19 -0
  564. package/src/lib/framework/alert/alert-item.tsx +44 -0
  565. package/src/lib/framework/alert/alerts-indicator.tsx +22 -0
  566. package/src/lib/framework/alert/search-index-buffer-alert/search-index-buffer-alert.ts +41 -0
  567. package/src/lib/framework/component-registry/component-registry.tsx +18 -0
  568. package/src/lib/framework/component-registry/display-component.tsx +28 -0
  569. package/src/lib/framework/dashboard-widget/base-widget.tsx +101 -0
  570. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +152 -0
  571. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +35 -0
  572. package/src/lib/framework/dashboard-widget/metrics-widget/chart.tsx +40 -0
  573. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +96 -0
  574. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +20 -0
  575. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +113 -0
  576. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +14 -0
  577. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +19 -0
  578. package/src/lib/framework/dashboard-widget/widget-filters-context.tsx +36 -0
  579. package/src/lib/framework/data-table/data-table-extensions.ts +35 -0
  580. package/src/lib/framework/defaults.ts +270 -0
  581. package/src/lib/framework/document-extension/extend-detail-form-query.ts +50 -0
  582. package/src/lib/framework/document-extension/extend-document.spec.ts +884 -0
  583. package/src/lib/framework/document-extension/extend-document.ts +159 -0
  584. package/src/lib/framework/document-introspection/add-custom-fields.spec.ts +1458 -0
  585. package/src/lib/framework/document-introspection/add-custom-fields.ts +452 -0
  586. package/src/lib/framework/document-introspection/get-document-structure.spec.ts +581 -0
  587. package/src/lib/framework/document-introspection/get-document-structure.ts +669 -0
  588. package/src/lib/framework/document-introspection/hooks.ts +13 -0
  589. package/src/lib/framework/document-introspection/include-only-selected-list-fields.spec.ts +1840 -0
  590. package/src/lib/framework/document-introspection/include-only-selected-list-fields.ts +940 -0
  591. package/src/lib/framework/document-introspection/testing-utils.ts +161 -0
  592. package/src/lib/framework/extension-api/define-dashboard-extension.ts +99 -0
  593. package/src/lib/framework/extension-api/display-component-extensions.tsx +58 -0
  594. package/src/lib/framework/extension-api/extension-api-types.ts +92 -0
  595. package/src/lib/framework/extension-api/input-component-extensions.tsx +96 -0
  596. package/src/lib/framework/extension-api/logic/alerts.ts +11 -0
  597. package/src/lib/framework/extension-api/logic/data-table.ts +37 -0
  598. package/src/lib/framework/extension-api/logic/detail-forms.ts +35 -0
  599. package/src/lib/framework/extension-api/logic/form-components.ts +14 -0
  600. package/src/lib/framework/extension-api/logic/history-entries.ts +24 -0
  601. package/src/lib/framework/extension-api/logic/index.ts +10 -0
  602. package/src/lib/framework/extension-api/logic/layout.ts +22 -0
  603. package/src/lib/framework/extension-api/logic/login.ts +17 -0
  604. package/src/lib/framework/extension-api/logic/navigation.ts +41 -0
  605. package/src/lib/framework/extension-api/logic/widgets.ts +10 -0
  606. package/src/lib/framework/extension-api/types/alerts.ts +59 -0
  607. package/src/lib/framework/extension-api/types/data-table.ts +159 -0
  608. package/src/lib/framework/extension-api/types/detail-forms.ts +58 -0
  609. package/src/lib/framework/extension-api/types/form-components.ts +41 -0
  610. package/src/lib/framework/extension-api/types/history-entries.ts +120 -0
  611. package/src/lib/framework/extension-api/types/index.ts +10 -0
  612. package/src/lib/framework/extension-api/types/layout.ts +141 -0
  613. package/src/lib/framework/extension-api/types/login.ts +76 -0
  614. package/src/lib/framework/extension-api/types/navigation.ts +105 -0
  615. package/src/lib/framework/extension-api/types/widgets.ts +101 -0
  616. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +27 -0
  617. package/src/lib/framework/extension-api/use-login-extensions.ts +26 -0
  618. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +15 -0
  619. package/src/lib/framework/form-engine/custom-form-component.tsx +16 -0
  620. package/src/lib/framework/form-engine/default-input-for-type.tsx +35 -0
  621. package/src/lib/framework/form-engine/form-control-adapter.tsx +193 -0
  622. package/src/lib/framework/form-engine/form-engine-types.ts +169 -0
  623. package/src/lib/framework/form-engine/form-schema-tools.spec.ts +610 -0
  624. package/src/lib/framework/form-engine/form-schema-tools.ts +417 -0
  625. package/src/lib/framework/form-engine/overridden-form-component.tsx +51 -0
  626. package/src/lib/framework/form-engine/use-generated-form.tsx +226 -0
  627. package/src/lib/framework/form-engine/utils.spec.ts +37 -0
  628. package/src/lib/framework/form-engine/utils.ts +356 -0
  629. package/src/lib/framework/form-engine/value-transformers.ts +150 -0
  630. package/src/lib/framework/history-entry/history-entry-extensions.ts +11 -0
  631. package/src/lib/framework/history-entry/history-entry.tsx +129 -0
  632. package/src/lib/framework/layout-engine/custom-form-page.stories.tsx +344 -0
  633. package/src/lib/framework/layout-engine/dev-mode-button.tsx +24 -0
  634. package/src/lib/framework/layout-engine/layout-extensions.ts +27 -0
  635. package/src/lib/framework/layout-engine/location-wrapper.tsx +122 -0
  636. package/src/lib/framework/layout-engine/page-block-provider.tsx +6 -0
  637. package/src/lib/framework/layout-engine/page-layout.spec.tsx +138 -0
  638. package/src/lib/framework/layout-engine/page-layout.tsx +700 -0
  639. package/src/lib/framework/layout-engine/page-provider.tsx +10 -0
  640. package/src/lib/framework/layout-engine/page.stories.tsx +275 -0
  641. package/src/lib/framework/nav-menu/nav-menu-extensions.ts +112 -0
  642. package/src/lib/framework/page/detail-page-route-loader.tsx +67 -0
  643. package/src/lib/framework/page/detail-page.stories.tsx +151 -0
  644. package/src/lib/framework/page/detail-page.tsx +255 -0
  645. package/src/lib/framework/page/list-page.stories.tsx +217 -0
  646. package/src/lib/framework/page/list-page.tsx +613 -0
  647. package/src/lib/framework/page/page-api.ts +9 -0
  648. package/src/lib/framework/page/page-types.ts +51 -0
  649. package/src/lib/framework/page/use-detail-page.ts +341 -0
  650. package/src/lib/framework/page/use-extended-router.tsx +139 -0
  651. package/src/lib/framework/registry/global-registry.ts +50 -0
  652. package/src/lib/framework/registry/registry-types.ts +32 -0
  653. package/src/lib/graphql/api.ts +123 -0
  654. package/src/lib/graphql/common-operations.ts +37 -0
  655. package/src/lib/graphql/fragments.ts +71 -0
  656. package/src/lib/graphql/graphql-env.d.ts +523 -0
  657. package/src/lib/graphql/graphql.ts +15 -0
  658. package/src/lib/graphql/settings-store-operations.ts +17 -0
  659. package/src/lib/hooks/use-alerts.ts +84 -0
  660. package/src/lib/hooks/use-auth.tsx +21 -0
  661. package/src/lib/hooks/use-channel.ts +27 -0
  662. package/src/lib/hooks/use-custom-field-config.ts +27 -0
  663. package/src/lib/hooks/use-display-locale.ts +40 -0
  664. package/src/lib/hooks/use-drag-and-drop.ts +86 -0
  665. package/src/lib/hooks/use-dynamic-translations.ts +46 -0
  666. package/src/lib/hooks/use-extended-detail-query.ts +37 -0
  667. package/src/lib/hooks/use-extended-list-query.ts +80 -0
  668. package/src/lib/hooks/use-floating-bulk-actions.ts +83 -0
  669. package/src/lib/hooks/use-grouped-permissions.ts +55 -0
  670. package/src/lib/hooks/use-local-format.ts +186 -0
  671. package/src/lib/hooks/use-mobile.ts +19 -0
  672. package/src/lib/hooks/use-page-block.tsx +27 -0
  673. package/src/lib/hooks/use-page.tsx +10 -0
  674. package/src/lib/hooks/use-permissions.ts +40 -0
  675. package/src/lib/hooks/use-saved-views.ts +238 -0
  676. package/src/lib/hooks/use-server-config.ts +4 -0
  677. package/src/lib/hooks/use-sorted-languages.ts +41 -0
  678. package/src/lib/hooks/use-theme.ts +10 -0
  679. package/src/lib/hooks/use-ui-language-loader.ts +30 -0
  680. package/src/lib/hooks/use-user-settings.tsx +12 -0
  681. package/src/lib/index.ts +293 -0
  682. package/src/lib/lib/load-i18n-messages.ts +20 -0
  683. package/src/lib/lib/trans.tsx +20 -0
  684. package/src/lib/lib/utils.ts +111 -0
  685. package/src/lib/providers/alerts-provider.tsx +60 -0
  686. package/src/lib/providers/auth.tsx +232 -0
  687. package/src/lib/providers/channel-provider.tsx +245 -0
  688. package/src/lib/providers/i18n-provider.tsx +21 -0
  689. package/src/lib/providers/server-config.tsx +289 -0
  690. package/src/lib/providers/theme-provider.tsx +56 -0
  691. package/src/lib/providers/user-settings.tsx +244 -0
  692. package/src/lib/types/saved-views.ts +42 -0
  693. package/src/lib/utils/config-utils.ts +19 -0
  694. package/src/lib/utils/global-languages.ts +268 -0
  695. package/src/lib/utils/saved-views-utils.ts +40 -0
  696. package/src/lib/virtual.d.ts +39 -0
  697. package/src/vite-env.d.ts +2 -0
@@ -0,0 +1,165 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import tsConfigPaths from 'tsconfig-paths';
4
+ import * as ts from 'typescript';
5
+ import { pathToFileURL } from 'url';
6
+ import { findConfigExport } from './ast-utils.js';
7
+ import { noopLogger } from './logger.js';
8
+ import { discoverPlugins } from './plugin-discovery.js';
9
+ import { findTsConfigPaths } from './tsconfig-utils.js';
10
+ const defaultPathAdapter = {
11
+ getCompiledConfigPath: ({ outputPath, configFileName }) => path.join(outputPath, configFileName),
12
+ transformTsConfigPathMappings: ({ patterns }) => patterns,
13
+ };
14
+ /**
15
+ * Compiles TypeScript files and discovers Vendure plugins in both the compiled output
16
+ * and in node_modules.
17
+ */
18
+ export async function compile(options) {
19
+ var _a, _b, _c;
20
+ const { vendureConfigPath, outputPath, pathAdapter, logger = noopLogger, pluginPackageScanner } = options;
21
+ const getCompiledConfigPath = (_a = pathAdapter === null || pathAdapter === void 0 ? void 0 : pathAdapter.getCompiledConfigPath) !== null && _a !== void 0 ? _a : defaultPathAdapter.getCompiledConfigPath;
22
+ const transformTsConfigPathMappings = (_b = pathAdapter === null || pathAdapter === void 0 ? void 0 : pathAdapter.transformTsConfigPathMappings) !== null && _b !== void 0 ? _b : defaultPathAdapter.transformTsConfigPathMappings;
23
+ // 0. Clear the outputPath
24
+ fs.removeSync(outputPath);
25
+ // 1. Compile TypeScript files
26
+ const compileStart = Date.now();
27
+ await compileTypeScript({
28
+ inputPath: vendureConfigPath,
29
+ outputPath,
30
+ logger,
31
+ transformTsConfigPathMappings,
32
+ module: (_c = options.module) !== null && _c !== void 0 ? _c : 'commonjs',
33
+ });
34
+ logger.info(`TypeScript compilation completed in ${Date.now() - compileStart}ms`);
35
+ // 2. Discover plugins
36
+ const analyzePluginsStart = Date.now();
37
+ const plugins = await discoverPlugins({
38
+ vendureConfigPath,
39
+ transformTsConfigPathMappings,
40
+ logger,
41
+ outputPath,
42
+ pluginPackageScanner,
43
+ });
44
+ logger.info(`Analyzed plugins and found ${plugins.length} dashboard extensions in ${Date.now() - analyzePluginsStart}ms`);
45
+ // 3. Load the compiled config
46
+ const configFileName = path.basename(vendureConfigPath);
47
+ const compiledConfigFilePath = pathToFileURL(getCompiledConfigPath({
48
+ inputRootDir: path.dirname(vendureConfigPath),
49
+ outputPath,
50
+ configFileName,
51
+ })).href.replace(/.ts$/, '.js');
52
+ // Create package.json with type commonjs
53
+ await fs.writeFile(path.join(outputPath, 'package.json'), JSON.stringify({ type: options.module === 'esm' ? 'module' : 'commonjs', private: true }, null, 2));
54
+ // Find the exported config symbol
55
+ const sourceFile = ts.createSourceFile(vendureConfigPath, await fs.readFile(vendureConfigPath, 'utf-8'), ts.ScriptTarget.Latest, true);
56
+ const exportedSymbolName = findConfigExport(sourceFile);
57
+ if (!exportedSymbolName) {
58
+ throw new Error(`Could not find a variable exported as VendureConfig. Please specify the name of the exported variable.`);
59
+ }
60
+ const loadConfigStart = Date.now();
61
+ await registerTsConfigPaths({
62
+ outputPath,
63
+ configPath: vendureConfigPath,
64
+ logger,
65
+ phase: 'loading',
66
+ transformTsConfigPathMappings,
67
+ });
68
+ let config;
69
+ try {
70
+ config = await import(compiledConfigFilePath).then(m => m[exportedSymbolName]);
71
+ }
72
+ catch (e) {
73
+ logger.error(`Error loading config: ${e instanceof Error ? e.message : String(e)}`);
74
+ }
75
+ if (!config) {
76
+ throw new Error(`Could not find a variable exported as VendureConfig with the name "${exportedSymbolName}".`);
77
+ }
78
+ logger.debug(`Loaded config in ${Date.now() - loadConfigStart}ms`);
79
+ return { vendureConfig: config, exportedSymbolName, pluginInfo: plugins };
80
+ }
81
+ /**
82
+ * Compiles TypeScript files to JavaScript
83
+ */
84
+ async function compileTypeScript({ inputPath, outputPath, logger, transformTsConfigPathMappings, module, }) {
85
+ var _a;
86
+ await fs.ensureDir(outputPath);
87
+ // Find tsconfig paths first
88
+ const tsConfigInfo = await findTsConfigPaths(inputPath, logger, 'compiling', transformTsConfigPathMappings);
89
+ const compilerOptions = {
90
+ target: ts.ScriptTarget.ES2020,
91
+ module: module === 'esm' ? ts.ModuleKind.ESNext : ts.ModuleKind.CommonJS,
92
+ moduleResolution: ts.ModuleResolutionKind.Node10, // More explicit CJS resolution
93
+ experimentalDecorators: true,
94
+ emitDecoratorMetadata: true,
95
+ esModuleInterop: true,
96
+ skipLibCheck: true,
97
+ noEmit: false,
98
+ // Speed optimizations
99
+ noEmitOnError: false, // Emit output even if there are errors
100
+ noImplicitAny: false, // Don't require implicit any
101
+ noUnusedLocals: false, // Don't check for unused locals
102
+ noUnusedParameters: false, // Don't check for unused parameters
103
+ allowJs: true,
104
+ checkJs: false, // Don't type check JS files
105
+ skipDefaultLibCheck: true, // Skip checking .d.ts files
106
+ isolatedModules: false, // Need to check cross-file references to compile dependencies
107
+ incremental: false, // Don't use incremental compilation (faster for one-off builds)
108
+ resolveJsonModule: true,
109
+ preserveSymlinks: false,
110
+ outDir: outputPath,
111
+ };
112
+ logger.debug(`Compiling ${inputPath} to ${outputPath} using TypeScript...`);
113
+ // Add path mappings if found
114
+ if (tsConfigInfo) {
115
+ // We need to set baseUrl and paths for TypeScript to resolve the imports
116
+ compilerOptions.baseUrl = tsConfigInfo.baseUrl;
117
+ compilerOptions.paths = tsConfigInfo.paths;
118
+ // This is critical - it tells TypeScript to preserve the paths in the output
119
+ // compilerOptions.rootDir = tsConfigInfo.baseUrl;
120
+ }
121
+ logger.debug(`tsConfig paths: ${JSON.stringify(tsConfigInfo === null || tsConfigInfo === void 0 ? void 0 : tsConfigInfo.paths, null, 2)}`);
122
+ logger.debug(`tsConfig baseUrl: ${(_a = tsConfigInfo === null || tsConfigInfo === void 0 ? void 0 : tsConfigInfo.baseUrl) !== null && _a !== void 0 ? _a : 'UNKNOWN'}`);
123
+ // Create a custom transformer to rewrite the output paths
124
+ const customTransformers = {
125
+ after: [
126
+ context => {
127
+ return sourceFile => {
128
+ // Only transform files that are not the entry point
129
+ if (sourceFile.fileName === inputPath) {
130
+ return sourceFile;
131
+ }
132
+ sourceFile.fileName = path.join(outputPath, path.basename(sourceFile.fileName));
133
+ return sourceFile;
134
+ };
135
+ },
136
+ ],
137
+ };
138
+ const program = ts.createProgram([inputPath], compilerOptions);
139
+ const emitResult = program.emit(undefined, undefined, undefined, undefined, customTransformers);
140
+ // Only log actual emit errors, not type errors
141
+ if (emitResult.emitSkipped) {
142
+ for (const diagnostic of emitResult.diagnostics) {
143
+ if (diagnostic.file && diagnostic.start !== undefined) {
144
+ const { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
145
+ const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
146
+ logger.warn(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
147
+ }
148
+ else {
149
+ logger.warn(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
150
+ }
151
+ }
152
+ }
153
+ }
154
+ async function registerTsConfigPaths(options) {
155
+ const { outputPath, configPath, logger, phase, transformTsConfigPathMappings } = options;
156
+ const tsConfigInfo = await findTsConfigPaths(configPath, logger, phase, transformTsConfigPathMappings);
157
+ if (tsConfigInfo) {
158
+ const params = {
159
+ baseUrl: outputPath,
160
+ paths: tsConfigInfo.paths,
161
+ };
162
+ logger.debug(`Registering tsconfig paths: ${JSON.stringify(params, null, 2)}`);
163
+ tsConfigPaths.register(params);
164
+ }
165
+ }
@@ -0,0 +1,5 @@
1
+ import { PluginInfo } from '../types.js';
2
+ /**
3
+ * Returns an array of the paths to plugins, based on the info provided by the ConfigLoaderApi.
4
+ */
5
+ export declare function getDashboardPaths(pluginInfo: PluginInfo[]): string[];
@@ -0,0 +1,20 @@
1
+ import path from 'path';
2
+ /**
3
+ * Returns an array of the paths to plugins, based on the info provided by the ConfigLoaderApi.
4
+ */
5
+ export function getDashboardPaths(pluginInfo) {
6
+ var _a;
7
+ return ((_a = pluginInfo === null || pluginInfo === void 0 ? void 0 : pluginInfo.flatMap(({ dashboardEntryPath, sourcePluginPath, pluginPath }) => {
8
+ if (!dashboardEntryPath) {
9
+ return [];
10
+ }
11
+ const sourcePaths = [];
12
+ if (sourcePluginPath) {
13
+ sourcePaths.push(path.join(path.dirname(sourcePluginPath), path.dirname(dashboardEntryPath)));
14
+ }
15
+ if (pluginPath) {
16
+ sourcePaths.push(path.join(path.dirname(pluginPath), path.dirname(dashboardEntryPath)));
17
+ }
18
+ return sourcePaths;
19
+ }).filter(x => x != null)) !== null && _a !== void 0 ? _a : []);
20
+ }
@@ -0,0 +1,3 @@
1
+ import { Logger } from '../types.js';
2
+ export declare const debugLogger: Logger;
3
+ export declare const noopLogger: Logger;
@@ -0,0 +1,39 @@
1
+ // ANSI color codes
2
+ const colors = {
3
+ grey: '\x1b[90m',
4
+ red: '\x1b[31m',
5
+ yellow: '\x1b[33m',
6
+ reset: '\x1b[0m',
7
+ };
8
+ export const debugLogger = {
9
+ info: (message) => {
10
+ // eslint-disable-next-line no-console
11
+ console.log(`[INFO] ${message}`);
12
+ },
13
+ warn: (message) => {
14
+ // eslint-disable-next-line no-console
15
+ console.warn(`${colors.yellow}[WARN] ${message}${colors.reset}`);
16
+ },
17
+ debug: (message) => {
18
+ // eslint-disable-next-line no-console
19
+ console.debug(`${colors.grey}[DEBUG] ${message}${colors.reset}`);
20
+ },
21
+ error: (message) => {
22
+ // eslint-disable-next-line no-console
23
+ console.error(`${colors.red}[ERROR] ${message}${colors.reset}`);
24
+ },
25
+ };
26
+ export const noopLogger = {
27
+ info: () => {
28
+ /* noop */
29
+ },
30
+ warn: () => {
31
+ /* noop */
32
+ },
33
+ debug: () => {
34
+ /* noop */
35
+ },
36
+ error: () => {
37
+ /* noop */
38
+ },
39
+ };
@@ -0,0 +1,27 @@
1
+ import { Logger, PluginInfo, TransformTsConfigPathMappingsFn } from '../types.js';
2
+ import { PackageScannerConfig } from './compiler.js';
3
+ export declare function discoverPlugins({ vendureConfigPath, transformTsConfigPathMappings, logger, outputPath, pluginPackageScanner, }: {
4
+ vendureConfigPath: string;
5
+ transformTsConfigPathMappings: TransformTsConfigPathMappingsFn;
6
+ logger: Logger;
7
+ outputPath: string;
8
+ pluginPackageScanner?: PackageScannerConfig;
9
+ }): Promise<PluginInfo[]>;
10
+ /**
11
+ * Analyzes TypeScript source files starting from the config file to discover:
12
+ * 1. Local Vendure plugins
13
+ * 2. All non-local package imports that could contain plugins
14
+ */
15
+ export declare function analyzeSourceFiles(vendureConfigPath: string, nodeModulesRoot: string, logger: Logger, transformTsConfigPathMappings: TransformTsConfigPathMappingsFn): Promise<{
16
+ localPluginLocations: Map<string, string>;
17
+ packageImports: string[];
18
+ }>;
19
+ interface FindPluginFilesOptions {
20
+ outputPath: string;
21
+ vendureConfigPath: string;
22
+ logger: Logger;
23
+ packageGlobs: string[];
24
+ nodeModulesRoot?: string;
25
+ }
26
+ export declare function findVendurePluginFiles({ outputPath, vendureConfigPath, logger, nodeModulesRoot: providedNodeModulesRoot, packageGlobs, }: FindPluginFilesOptions): Promise<string[]>;
27
+ export {};
@@ -0,0 +1,398 @@
1
+ import { parse } from 'acorn';
2
+ import { simple as walkSimple } from 'acorn-walk';
3
+ import glob from 'fast-glob';
4
+ import fs from 'fs-extra';
5
+ import { open } from 'fs/promises';
6
+ import path from 'path';
7
+ import * as ts from 'typescript';
8
+ import { fileURLToPath } from 'url';
9
+ import { findTsConfigPaths } from './tsconfig-utils.js';
10
+ export async function discoverPlugins({ vendureConfigPath, transformTsConfigPathMappings, logger, outputPath, pluginPackageScanner, }) {
11
+ var _a;
12
+ const plugins = [];
13
+ // Analyze source files to find local plugins and package imports
14
+ const { localPluginLocations, packageImports } = await analyzeSourceFiles(vendureConfigPath, (_a = pluginPackageScanner === null || pluginPackageScanner === void 0 ? void 0 : pluginPackageScanner.nodeModulesRoot) !== null && _a !== void 0 ? _a : guessNodeModulesRoot(vendureConfigPath, logger), logger, transformTsConfigPathMappings);
15
+ logger.debug(`[discoverPlugins] Found ${localPluginLocations.size} local plugins: ${JSON.stringify([...localPluginLocations.entries()], null, 2)}`);
16
+ logger.debug(`[discoverPlugins] Found ${packageImports.length} package imports: ${JSON.stringify(packageImports, null, 2)}`);
17
+ const filePaths = await findVendurePluginFiles({
18
+ logger,
19
+ nodeModulesRoot: pluginPackageScanner === null || pluginPackageScanner === void 0 ? void 0 : pluginPackageScanner.nodeModulesRoot,
20
+ packageGlobs: packageImports.map(pkg => pkg + '/**/*.js'),
21
+ outputPath,
22
+ vendureConfigPath,
23
+ });
24
+ for (const filePath of filePaths) {
25
+ const content = await fs.readFile(filePath, 'utf-8');
26
+ logger.debug(`[discoverPlugins] Checking file ${filePath}`);
27
+ // First check if this file imports from @vendure/core
28
+ if (!content.includes('@vendure/core')) {
29
+ continue;
30
+ }
31
+ try {
32
+ const ast = parse(content, {
33
+ ecmaVersion: 'latest',
34
+ sourceType: 'module',
35
+ });
36
+ let hasVendurePlugin = false;
37
+ let pluginName;
38
+ let dashboardPath;
39
+ // Walk the AST to find the plugin class and its decorator
40
+ walkSimple(ast, {
41
+ CallExpression(node) {
42
+ var _a;
43
+ // Look for __decorate calls
44
+ const calleeName = node.callee.name;
45
+ const nodeArgs = node.arguments;
46
+ const isDecoratorWithArgs = calleeName === '__decorate' && nodeArgs.length >= 2;
47
+ if (isDecoratorWithArgs) {
48
+ // Check the decorators array (first argument)
49
+ const decorators = nodeArgs[0];
50
+ if (decorators.type === 'ArrayExpression') {
51
+ for (const decorator of decorators.elements) {
52
+ const props = getDecoratorObjectProps(decorator);
53
+ for (const prop of props) {
54
+ if (prop.key.name === 'dashboard') {
55
+ if (prop.value.type === 'Literal') {
56
+ // Handle string format: dashboard: './path/to/dashboard'
57
+ dashboardPath = prop.value.value;
58
+ hasVendurePlugin = true;
59
+ }
60
+ else if (prop.value.type === 'ObjectExpression') {
61
+ // Handle object format: dashboard: { location: './path/to/dashboard' }
62
+ const locationProp = (_a = prop.value.properties) === null || _a === void 0 ? void 0 : _a.find((p) => { var _a; return ((_a = p.key) === null || _a === void 0 ? void 0 : _a.name) === 'location'; });
63
+ if (locationProp && locationProp.value.type === 'Literal') {
64
+ dashboardPath = locationProp.value.value;
65
+ hasVendurePlugin = true;
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // Get the plugin class name (second argument)
73
+ const targetClass = nodeArgs[1];
74
+ if (targetClass.type === 'Identifier') {
75
+ pluginName = targetClass.name;
76
+ }
77
+ }
78
+ },
79
+ });
80
+ if (hasVendurePlugin && pluginName && dashboardPath) {
81
+ logger.debug(`[discoverPlugins] Found plugin "${pluginName}" in file: ${filePath}`);
82
+ // Keep the dashboard path relative to the plugin file
83
+ const resolvedDashboardPath = dashboardPath.startsWith('.')
84
+ ? dashboardPath // Keep the relative path as-is
85
+ : './' + path.relative(path.dirname(filePath), dashboardPath); // Make absolute path relative
86
+ // Check if this is a local plugin we found earlier
87
+ const sourcePluginPath = localPluginLocations.get(pluginName);
88
+ plugins.push(Object.assign({ name: pluginName, pluginPath: filePath, dashboardEntryPath: resolvedDashboardPath }, (sourcePluginPath && { sourcePluginPath })));
89
+ }
90
+ }
91
+ catch (e) {
92
+ logger.error(`Failed to parse ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
93
+ }
94
+ }
95
+ return plugins;
96
+ }
97
+ function getDecoratorObjectProps(decorator) {
98
+ var _a;
99
+ if (decorator.type === 'CallExpression' &&
100
+ decorator.arguments.length === 1 &&
101
+ decorator.arguments[0].type === 'ObjectExpression') {
102
+ // Look for the dashboard property in the decorator config
103
+ return (_a = decorator.arguments[0].properties) !== null && _a !== void 0 ? _a : [];
104
+ }
105
+ return [];
106
+ }
107
+ async function isSymlinkedLocalPackage(packageName, nodeModulesRoot) {
108
+ try {
109
+ const packagePath = path.join(nodeModulesRoot, packageName);
110
+ const stats = await fs.lstat(packagePath);
111
+ if (stats.isSymbolicLink()) {
112
+ // Get the real path that the symlink points to
113
+ const realPath = await fs.realpath(packagePath);
114
+ // If the real path is within the project directory (i.e. not in some other node_modules),
115
+ // then it's a local package
116
+ if (!realPath.includes('node_modules')) {
117
+ return realPath;
118
+ }
119
+ }
120
+ }
121
+ catch (e) {
122
+ // Package doesn't exist or other error - not a local package
123
+ return undefined;
124
+ }
125
+ return undefined;
126
+ }
127
+ /**
128
+ * Analyzes TypeScript source files starting from the config file to discover:
129
+ * 1. Local Vendure plugins
130
+ * 2. All non-local package imports that could contain plugins
131
+ */
132
+ export async function analyzeSourceFiles(vendureConfigPath, nodeModulesRoot, logger, transformTsConfigPathMappings) {
133
+ const localPluginLocations = new Map();
134
+ const visitedFiles = new Set();
135
+ const packageImportsSet = new Set();
136
+ // Get tsconfig paths for resolving aliases
137
+ const tsConfigInfo = await findTsConfigPaths(vendureConfigPath, logger, 'compiling', transformTsConfigPathMappings);
138
+ async function processFile(filePath) {
139
+ if (visitedFiles.has(filePath)) {
140
+ return;
141
+ }
142
+ visitedFiles.add(filePath);
143
+ try {
144
+ // First check if this is a directory
145
+ const stat = await fs.stat(filePath);
146
+ if (stat.isDirectory()) {
147
+ // If it's a directory, try to find the plugin file
148
+ const indexFilePath = path.join(filePath, 'index.ts');
149
+ if (await fs.pathExists(indexFilePath)) {
150
+ await processFile(indexFilePath);
151
+ }
152
+ return;
153
+ }
154
+ const content = await fs.readFile(filePath, 'utf-8');
155
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
156
+ // Track imports to follow
157
+ const importsToFollow = [];
158
+ async function visit(node) {
159
+ // Look for VendurePlugin decorator
160
+ const vendurePluginClassName = getVendurePluginClassName(node);
161
+ if (vendurePluginClassName) {
162
+ localPluginLocations.set(vendurePluginClassName, filePath);
163
+ logger.debug(`Found plugin "${vendurePluginClassName}" at ${filePath}`);
164
+ }
165
+ // Handle both imports and exports
166
+ const isImportOrExport = ts.isImportDeclaration(node) || ts.isExportDeclaration(node);
167
+ if (isImportOrExport) {
168
+ const moduleSpecifier = node.moduleSpecifier;
169
+ if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {
170
+ const importPath = moduleSpecifier.text;
171
+ // Track non-local imports (packages)
172
+ const npmPackageName = getNpmPackageNameFromImport(importPath);
173
+ if (npmPackageName) {
174
+ // Check if this is actually a symlinked local package
175
+ const localPackagePath = await isSymlinkedLocalPackage(npmPackageName, nodeModulesRoot);
176
+ if (localPackagePath) {
177
+ // If it is local, follow it like a local import
178
+ importsToFollow.push(localPackagePath);
179
+ logger.debug(`Found symlinked local package "${npmPackageName}" at ${localPackagePath}`);
180
+ }
181
+ else {
182
+ packageImportsSet.add(npmPackageName);
183
+ }
184
+ }
185
+ // Handle path aliases and local imports
186
+ const pathAliasImports = getPotentialPathAliasImportPaths(importPath, tsConfigInfo);
187
+ if (pathAliasImports.length) {
188
+ importsToFollow.push(...pathAliasImports);
189
+ }
190
+ // Also handle local imports
191
+ if (importPath.startsWith('.')) {
192
+ const resolvedPath = path.resolve(path.dirname(filePath), importPath);
193
+ importsToFollow.push(resolvedPath);
194
+ }
195
+ }
196
+ }
197
+ // Visit children
198
+ const promises = [];
199
+ ts.forEachChild(node, child => {
200
+ promises.push(visit(child));
201
+ });
202
+ await Promise.all(promises);
203
+ }
204
+ await visit(sourceFile);
205
+ // Follow imports
206
+ for (const importPath of importsToFollow) {
207
+ // Try all possible file paths
208
+ const possiblePaths = [
209
+ importPath + '.ts',
210
+ importPath + '.js',
211
+ path.join(importPath, 'index.ts'),
212
+ path.join(importPath, 'index.js'),
213
+ importPath,
214
+ ];
215
+ if (importPath.endsWith('.js')) {
216
+ possiblePaths.push(importPath.replace(/.js$/, '.ts'));
217
+ }
218
+ // Try each possible path
219
+ let found = false;
220
+ for (const possiblePath of possiblePaths) {
221
+ const possiblePathExists = await fs.pathExists(possiblePath);
222
+ if (possiblePathExists) {
223
+ await processFile(possiblePath);
224
+ found = true;
225
+ break;
226
+ }
227
+ }
228
+ // If none of the file paths worked, try the raw import path
229
+ // (it might be a directory)
230
+ const tryRawPath = !found && (await fs.pathExists(importPath));
231
+ if (tryRawPath) {
232
+ await processFile(importPath);
233
+ }
234
+ }
235
+ }
236
+ catch (e) {
237
+ const message = e instanceof Error ? e.message : String(e);
238
+ logger.error(`Failed to process ${filePath}: ${message}`);
239
+ }
240
+ }
241
+ await processFile(vendureConfigPath);
242
+ return {
243
+ localPluginLocations,
244
+ packageImports: Array.from(packageImportsSet),
245
+ };
246
+ }
247
+ /**
248
+ * If this is a class declaration that is decorated with the `VendurePlugin` decorator,
249
+ * we want to return that class name, as we have found a local Vendure plugin.
250
+ */
251
+ function getVendurePluginClassName(node) {
252
+ var _a;
253
+ if (ts.isClassDeclaration(node)) {
254
+ const decorators = ts.canHaveDecorators(node) ? ts.getDecorators(node) : undefined;
255
+ if (decorators === null || decorators === void 0 ? void 0 : decorators.length) {
256
+ for (const decorator of decorators) {
257
+ const decoratorName = getDecoratorName(decorator);
258
+ if (decoratorName === 'VendurePlugin') {
259
+ const className = (_a = node.name) === null || _a === void 0 ? void 0 : _a.text;
260
+ if (className) {
261
+ return className;
262
+ }
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ function getNpmPackageNameFromImport(importPath) {
269
+ if (!importPath.startsWith('.') && !importPath.startsWith('/')) {
270
+ // Get the root package name (e.g. '@scope/package/subpath' -> '@scope/package')
271
+ const packageName = importPath.startsWith('@')
272
+ ? importPath.split('/').slice(0, 2).join('/')
273
+ : importPath.split('/')[0];
274
+ return packageName;
275
+ }
276
+ }
277
+ function getPotentialPathAliasImportPaths(importPath, tsConfigInfo) {
278
+ const importsToFollow = [];
279
+ if (!tsConfigInfo) {
280
+ return importsToFollow;
281
+ }
282
+ for (const [alias, patterns] of Object.entries(tsConfigInfo.paths)) {
283
+ const aliasPattern = alias.replace(/\*$/, '');
284
+ if (importPath.startsWith(aliasPattern)) {
285
+ const relativePart = importPath.slice(aliasPattern.length);
286
+ // Try each pattern
287
+ for (const pattern of patterns) {
288
+ const resolvedPattern = pattern.replace(/\*$/, '');
289
+ const resolvedPath = path.resolve(tsConfigInfo.baseUrl, resolvedPattern, relativePart);
290
+ importsToFollow.push(resolvedPath);
291
+ }
292
+ }
293
+ }
294
+ return importsToFollow;
295
+ }
296
+ function getDecoratorName(decorator) {
297
+ if (ts.isCallExpression(decorator.expression)) {
298
+ const expression = decorator.expression.expression;
299
+ // Handle both direct usage and imported usage
300
+ if (ts.isIdentifier(expression)) {
301
+ return expression.text;
302
+ }
303
+ // Handle property access like `Decorators.VendurePlugin`
304
+ if (ts.isPropertyAccessExpression(expression)) {
305
+ return expression.name.text;
306
+ }
307
+ }
308
+ return undefined;
309
+ }
310
+ export async function findVendurePluginFiles({ outputPath, vendureConfigPath, logger, nodeModulesRoot: providedNodeModulesRoot, packageGlobs, }) {
311
+ let nodeModulesRoot = providedNodeModulesRoot;
312
+ const readStart = Date.now();
313
+ if (!nodeModulesRoot) {
314
+ nodeModulesRoot = guessNodeModulesRoot(vendureConfigPath, logger);
315
+ }
316
+ const patterns = [
317
+ // Local compiled plugins in temp dir
318
+ path.join(outputPath, '**/*.js'),
319
+ // Node modules patterns
320
+ ...packageGlobs.map(pattern => path.join(nodeModulesRoot, pattern)),
321
+ ].map(p => p.replace(/\\/g, '/'));
322
+ logger.debug(`Finding Vendure plugins using patterns: ${patterns.join('\n')}`);
323
+ const globStart = Date.now();
324
+ const files = await glob(patterns, {
325
+ ignore: [
326
+ // Standard test & doc files
327
+ '**/node_modules/**/node_modules/**',
328
+ '**/*.spec.js',
329
+ '**/*.test.js',
330
+ ],
331
+ onlyFiles: true,
332
+ absolute: true,
333
+ followSymbolicLinks: false,
334
+ stats: false,
335
+ });
336
+ logger.debug(`Glob found ${files.length} files in ${Date.now() - globStart}ms`);
337
+ // Read files in larger parallel batches
338
+ const batchSize = 100; // Increased batch size
339
+ const potentialPluginFiles = [];
340
+ for (let i = 0; i < files.length; i += batchSize) {
341
+ const batch = files.slice(i, i + batchSize);
342
+ const results = await Promise.all(batch.map(async (file) => {
343
+ try {
344
+ // Try reading just first 3000 bytes first - most imports are at the top
345
+ const fileHandle = await open(file, 'r');
346
+ try {
347
+ const buffer = Buffer.alloc(3000);
348
+ const { bytesRead } = await fileHandle.read(buffer, 0, 3000, 0);
349
+ let content = buffer.toString('utf8', 0, bytesRead);
350
+ // Quick check for common indicators
351
+ if (content.includes('@vendure/core')) {
352
+ return file;
353
+ }
354
+ // If we find a promising indicator but no definitive match,
355
+ // read more of the file
356
+ if (content.includes('@vendure') || content.includes('VendurePlugin')) {
357
+ const largerBuffer = Buffer.alloc(5000);
358
+ const { bytesRead: moreBytes } = await fileHandle.read(largerBuffer, 0, 5000, 0);
359
+ content = largerBuffer.toString('utf8', 0, moreBytes);
360
+ if (content.includes('@vendure/core')) {
361
+ return file;
362
+ }
363
+ }
364
+ }
365
+ finally {
366
+ await fileHandle.close();
367
+ }
368
+ }
369
+ catch (e) {
370
+ logger.warn(`Failed to read file ${file}: ${e instanceof Error ? e.message : String(e)}`);
371
+ }
372
+ return null;
373
+ }));
374
+ const validResults = results.filter((f) => f !== null);
375
+ potentialPluginFiles.push(...validResults);
376
+ }
377
+ logger.info(`Found ${potentialPluginFiles.length} potential plugin files in ${Date.now() - readStart}ms ` +
378
+ `(scanned ${files.length} files)`);
379
+ return potentialPluginFiles;
380
+ }
381
+ function guessNodeModulesRoot(vendureConfigPath, logger) {
382
+ let nodeModulesRoot;
383
+ // If the node_modules root path has not been explicitly
384
+ // specified, we will try to guess it by resolving the
385
+ // `@vendure/core` package.
386
+ try {
387
+ const coreUrl = import.meta.resolve('@vendure/core');
388
+ logger.debug(`Found core URL: ${coreUrl}`);
389
+ const corePath = fileURLToPath(coreUrl);
390
+ logger.debug(`Found core path: ${corePath}`);
391
+ nodeModulesRoot = path.join(path.dirname(corePath), '..', '..', '..');
392
+ }
393
+ catch (e) {
394
+ logger.warn(`Failed to resolve @vendure/core: ${e instanceof Error ? e.message : String(e)}`);
395
+ nodeModulesRoot = path.dirname(vendureConfigPath);
396
+ }
397
+ return nodeModulesRoot;
398
+ }
@@ -0,0 +1,10 @@
1
+ import { VendureConfig } from '@vendure/core';
2
+ import { GraphQLSchema } from 'graphql';
3
+ /**
4
+ * @description
5
+ * This function generates a GraphQL schema from the Vendure config.
6
+ * It is used to generate the schema for the dashboard.
7
+ */
8
+ export declare function generateSchema({ vendureConfig, }: {
9
+ vendureConfig: VendureConfig;
10
+ }): Promise<GraphQLSchema>;