@websolutespa/bom-next 3.0.0 → 3.0.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 (313) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/_virtual/_rolldown/runtime.js +24 -0
  3. package/dist/client/client.d.ts +9 -0
  4. package/dist/client/client.d.ts.map +1 -0
  5. package/dist/client/client.js +18 -0
  6. package/dist/client/client.js.map +1 -0
  7. package/dist/client/extra.d.ts +17 -0
  8. package/dist/client/extra.d.ts.map +1 -0
  9. package/dist/client/extra.js +13 -0
  10. package/dist/client/extra.js.map +1 -0
  11. package/dist/client/label.d.ts +15 -0
  12. package/dist/client/label.d.ts.map +1 -0
  13. package/dist/client/label.js +20 -0
  14. package/dist/client/label.js.map +1 -0
  15. package/dist/client/layout.d.ts +18 -0
  16. package/dist/client/layout.d.ts.map +1 -0
  17. package/dist/client/layout.js +13 -0
  18. package/dist/client/layout.js.map +1 -0
  19. package/dist/client/local.collection.d.ts +32 -0
  20. package/dist/client/local.collection.d.ts.map +1 -0
  21. package/dist/client/local.collection.js +49 -0
  22. package/dist/client/local.collection.js.map +1 -0
  23. package/dist/client/metadata.d.ts +43 -0
  24. package/dist/client/metadata.d.ts.map +1 -0
  25. package/dist/client/metadata.js +146 -0
  26. package/dist/client/metadata.js.map +1 -0
  27. package/dist/client/page.d.ts +404 -0
  28. package/dist/client/page.d.ts.map +1 -0
  29. package/dist/client/page.js +13 -0
  30. package/dist/client/page.js.map +1 -0
  31. package/dist/client/useApi.d.ts +21 -0
  32. package/dist/client/useApi.d.ts.map +1 -0
  33. package/dist/client/useApi.js +65 -0
  34. package/dist/client/useApi.js.map +1 -0
  35. package/dist/client/useCollectionApi.d.ts +21 -0
  36. package/dist/client/useCollectionApi.d.ts.map +1 -0
  37. package/dist/client/useCollectionApi.js +65 -0
  38. package/dist/client/useCollectionApi.js.map +1 -0
  39. package/dist/client/useExtra.d.ts +9 -0
  40. package/dist/client/useExtra.d.ts.map +1 -0
  41. package/dist/client/useExtra.js +13 -0
  42. package/dist/client/useExtra.js.map +1 -0
  43. package/dist/client/useHttp.d.ts +15 -0
  44. package/dist/client/useHttp.d.ts.map +1 -0
  45. package/dist/client/useHttp.js +70 -0
  46. package/dist/client/useHttp.js.map +1 -0
  47. package/dist/client/useLabel.d.ts +9 -0
  48. package/dist/client/useLabel.d.ts.map +1 -0
  49. package/dist/client/useLabel.js +13 -0
  50. package/dist/client/useLabel.js.map +1 -0
  51. package/dist/client/useLayout.d.ts +9 -0
  52. package/dist/client/useLayout.d.ts.map +1 -0
  53. package/dist/client/useLayout.js +13 -0
  54. package/dist/client/useLayout.js.map +1 -0
  55. package/dist/client/useLink.d.ts +7 -0
  56. package/dist/client/useLink.d.ts.map +1 -0
  57. package/dist/client/useLink.js +15 -0
  58. package/dist/client/useLink.js.map +1 -0
  59. package/dist/client/useMetaData.d.ts +9 -0
  60. package/dist/client/useMetaData.d.ts.map +1 -0
  61. package/dist/client/useMetaData.js +13 -0
  62. package/dist/client/useMetaData.js.map +1 -0
  63. package/dist/client/usePage.d.ts +394 -0
  64. package/dist/client/usePage.d.ts.map +1 -0
  65. package/dist/client/usePage.js +13 -0
  66. package/dist/client/usePage.js.map +1 -0
  67. package/dist/client/useUser.d.ts +9 -0
  68. package/dist/client/useUser.d.ts.map +1 -0
  69. package/dist/client/useUser.js +13 -0
  70. package/dist/client/useUser.js.map +1 -0
  71. package/dist/client/user.d.ts +20 -0
  72. package/dist/client/user.d.ts.map +1 -0
  73. package/dist/client/user.js +33 -0
  74. package/dist/client/user.js.map +1 -0
  75. package/dist/exports/client.d.ts +20 -0
  76. package/dist/exports/client.js +19 -5734
  77. package/dist/exports/instrumentation.d.ts +2 -0
  78. package/dist/exports/instrumentation.js +1 -24
  79. package/dist/exports/proxy.d.ts +5 -0
  80. package/dist/exports/proxy.js +4 -253
  81. package/dist/exports/server.d.ts +19 -0
  82. package/dist/exports/server.js +18 -1973
  83. package/dist/index.d.ts +18 -0
  84. package/dist/index.js +10 -200
  85. package/dist/instrumentation/client.d.ts +8 -0
  86. package/dist/instrumentation/client.d.ts.map +1 -0
  87. package/dist/instrumentation/client.js +15 -0
  88. package/dist/instrumentation/client.js.map +1 -0
  89. package/dist/instrumentation/sentry/capture.requestError.js +10 -0
  90. package/dist/instrumentation/sentry/capture.requestError.js.map +1 -0
  91. package/dist/instrumentation/sentry/capture.routerTransitionStart.js +7 -0
  92. package/dist/instrumentation/sentry/capture.routerTransitionStart.js.map +1 -0
  93. package/dist/{exports/instrumentation-DBO6QH4d.d.ts → instrumentation/server.d.ts} +2 -2
  94. package/dist/instrumentation/server.d.ts.map +1 -0
  95. package/dist/instrumentation/server.js +19 -0
  96. package/dist/instrumentation/server.js.map +1 -0
  97. package/dist/{types-BatUTdbZ.d.ts → instrumentation/types.d.ts} +2 -2
  98. package/dist/instrumentation/types.d.ts.map +1 -0
  99. package/dist/lib/breadcrumb.d.ts +15 -0
  100. package/dist/lib/breadcrumb.d.ts.map +1 -0
  101. package/dist/lib/breadcrumb.js +20 -0
  102. package/dist/lib/breadcrumb.js.map +1 -0
  103. package/dist/lib/const.d.ts +9 -0
  104. package/dist/lib/const.d.ts.map +1 -0
  105. package/dist/lib/const.js +9 -0
  106. package/dist/lib/const.js.map +1 -0
  107. package/dist/lib/http.d.ts +36 -0
  108. package/dist/lib/http.d.ts.map +1 -0
  109. package/dist/{http-_2M-UFRx.js → lib/http.js} +2 -2
  110. package/dist/lib/http.js.map +1 -0
  111. package/dist/lib/label.d.ts +16 -0
  112. package/dist/lib/label.d.ts.map +1 -0
  113. package/dist/lib/label.js +33 -0
  114. package/dist/lib/label.js.map +1 -0
  115. package/dist/lib/layout.defaults.d.ts +9 -0
  116. package/dist/lib/layout.defaults.d.ts.map +1 -0
  117. package/dist/lib/layout.defaults.js +161 -0
  118. package/dist/lib/layout.defaults.js.map +1 -0
  119. package/dist/lib/link.d.ts +9 -0
  120. package/dist/lib/link.d.ts.map +1 -0
  121. package/dist/lib/link.js +16 -0
  122. package/dist/lib/link.js.map +1 -0
  123. package/dist/lib/meta-data.d.ts +56 -0
  124. package/dist/lib/meta-data.d.ts.map +1 -0
  125. package/dist/lib/open-graph.d.ts +143 -0
  126. package/dist/lib/open-graph.d.ts.map +1 -0
  127. package/dist/lib/pagination.d.ts +27 -0
  128. package/dist/lib/pagination.d.ts.map +1 -0
  129. package/dist/lib/pagination.js +39 -0
  130. package/dist/lib/pagination.js.map +1 -0
  131. package/dist/lib/route.d.ts +17 -0
  132. package/dist/lib/route.d.ts.map +1 -0
  133. package/dist/{route-DzFwERQP.js → lib/route.js} +2 -2
  134. package/dist/lib/route.js.map +1 -0
  135. package/dist/lib/store.d.ts +27 -0
  136. package/dist/lib/store.d.ts.map +1 -0
  137. package/dist/{store-CJzqrHsl.js → lib/store.js} +2 -25
  138. package/dist/lib/store.js.map +1 -0
  139. package/dist/lib/structured-data.d.ts +9 -0
  140. package/dist/lib/structured-data.d.ts.map +1 -0
  141. package/dist/lib/twitter-card.d.ts +43 -0
  142. package/dist/lib/twitter-card.d.ts.map +1 -0
  143. package/dist/lib/utils.d.ts +13 -0
  144. package/dist/lib/utils.d.ts.map +1 -0
  145. package/dist/lib/utils.js +35 -0
  146. package/dist/lib/utils.js.map +1 -0
  147. package/dist/mock.d.ts +127 -0
  148. package/dist/mock.d.ts.map +1 -0
  149. package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js +75 -0
  150. package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js.map +1 -0
  151. package/dist/node_modules/deepmerge/dist/cjs.js +86 -0
  152. package/dist/node_modules/deepmerge/dist/cjs.js.map +1 -0
  153. package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js +105 -0
  154. package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js.map +1 -0
  155. package/dist/node_modules/dom-serializer/lib/esm/index.js +146 -0
  156. package/dist/node_modules/dom-serializer/lib/esm/index.js.map +1 -0
  157. package/dist/node_modules/domelementtype/lib/esm/index.js +53 -0
  158. package/dist/node_modules/domelementtype/lib/esm/index.js.map +1 -0
  159. package/dist/node_modules/domhandler/lib/esm/index.js +130 -0
  160. package/dist/node_modules/domhandler/lib/esm/index.js.map +1 -0
  161. package/dist/node_modules/domhandler/lib/esm/node.js +307 -0
  162. package/dist/node_modules/domhandler/lib/esm/node.js.map +1 -0
  163. package/dist/node_modules/entities/lib/esm/decode.js +363 -0
  164. package/dist/node_modules/entities/lib/esm/decode.js.map +1 -0
  165. package/dist/node_modules/entities/lib/esm/decode_codepoint.js +59 -0
  166. package/dist/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -0
  167. package/dist/node_modules/entities/lib/esm/escape.js +85 -0
  168. package/dist/node_modules/entities/lib/esm/escape.js.map +1 -0
  169. package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js +6 -0
  170. package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -0
  171. package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js +6 -0
  172. package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -0
  173. package/dist/node_modules/html-to-text/lib/html-to-text.js +1816 -0
  174. package/dist/node_modules/html-to-text/lib/html-to-text.js.map +1 -0
  175. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js +435 -0
  176. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js.map +1 -0
  177. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js +736 -0
  178. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js.map +1 -0
  179. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js +19 -0
  180. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js.map +1 -0
  181. package/dist/node_modules/leac/lib/leac.js +101 -0
  182. package/dist/node_modules/leac/lib/leac.js.map +1 -0
  183. package/dist/node_modules/parseley/lib/parseley.js +310 -0
  184. package/dist/node_modules/parseley/lib/parseley.js.map +1 -0
  185. package/dist/node_modules/peberminta/lib/core.js +149 -0
  186. package/dist/node_modules/peberminta/lib/core.js.map +1 -0
  187. package/dist/node_modules/selderee/lib/selderee.js +319 -0
  188. package/dist/node_modules/selderee/lib/selderee.js.map +1 -0
  189. package/dist/proxy/protected-route.d.ts +9 -0
  190. package/dist/proxy/protected-route.d.ts.map +1 -0
  191. package/dist/proxy/protected-route.js +40 -0
  192. package/dist/proxy/protected-route.js.map +1 -0
  193. package/dist/proxy/proxy.d.ts +31 -0
  194. package/dist/proxy/proxy.d.ts.map +1 -0
  195. package/dist/proxy/proxy.js +49 -0
  196. package/dist/proxy/proxy.js.map +1 -0
  197. package/dist/proxy/route-auto-detection.d.ts +12 -0
  198. package/dist/proxy/route-auto-detection.d.ts.map +1 -0
  199. package/dist/proxy/route-auto-detection.js +82 -0
  200. package/dist/proxy/route-auto-detection.js.map +1 -0
  201. package/dist/proxy/route-proxy.d.ts +36 -0
  202. package/dist/proxy/route-proxy.d.ts.map +1 -0
  203. package/dist/proxy/route-proxy.js +103 -0
  204. package/dist/proxy/route-proxy.js.map +1 -0
  205. package/dist/server/context.d.ts +30 -0
  206. package/dist/server/context.d.ts.map +1 -0
  207. package/dist/server/context.js +106 -0
  208. package/dist/server/context.js.map +1 -0
  209. package/dist/server/handlers/auth.handler.d.ts +10 -0
  210. package/dist/server/handlers/auth.handler.d.ts.map +1 -0
  211. package/dist/server/handlers/auth.handler.js +29 -0
  212. package/dist/server/handlers/auth.handler.js.map +1 -0
  213. package/dist/server/handlers/captions.handler.d.ts +10 -0
  214. package/dist/server/handlers/captions.handler.d.ts.map +1 -0
  215. package/dist/server/handlers/captions.handler.js +33 -0
  216. package/dist/server/handlers/captions.handler.js.map +1 -0
  217. package/dist/server/handlers/collection.handler.d.ts +36 -0
  218. package/dist/server/handlers/collection.handler.d.ts.map +1 -0
  219. package/dist/server/handlers/collection.handler.js +166 -0
  220. package/dist/server/handlers/collection.handler.js.map +1 -0
  221. package/dist/server/handlers/error-response.js +24 -0
  222. package/dist/server/handlers/error-response.js.map +1 -0
  223. package/dist/server/handlers/index.handler.d.ts +9 -0
  224. package/dist/server/handlers/index.handler.d.ts.map +1 -0
  225. package/dist/server/handlers/index.handler.js +145 -0
  226. package/dist/server/handlers/index.handler.js.map +1 -0
  227. package/dist/server/handlers/preview.handler.d.ts +9 -0
  228. package/dist/server/handlers/preview.handler.d.ts.map +1 -0
  229. package/dist/server/handlers/preview.handler.js +15 -0
  230. package/dist/server/handlers/preview.handler.js.map +1 -0
  231. package/dist/server/handlers/registry.handler.d.ts +16 -0
  232. package/dist/server/handlers/registry.handler.d.ts.map +1 -0
  233. package/dist/server/handlers/registry.handler.js +260 -0
  234. package/dist/server/handlers/registry.handler.js.map +1 -0
  235. package/dist/server/handlers/route.handler.d.ts +20 -0
  236. package/dist/server/handlers/route.handler.d.ts.map +1 -0
  237. package/dist/server/handlers/route.handler.js +122 -0
  238. package/dist/server/handlers/route.handler.js.map +1 -0
  239. package/dist/server/handlers/sitemap.handler.d.ts +30 -0
  240. package/dist/server/handlers/sitemap.handler.d.ts.map +1 -0
  241. package/dist/server/handlers/sitemap.handler.js +338 -0
  242. package/dist/server/handlers/sitemap.handler.js.map +1 -0
  243. package/dist/server/handlers/static-params.handler.d.ts +24 -0
  244. package/dist/server/handlers/static-params.handler.d.ts.map +1 -0
  245. package/dist/server/handlers/static-params.handler.js +56 -0
  246. package/dist/server/handlers/static-params.handler.js.map +1 -0
  247. package/dist/server/handlers/vars.handler.d.ts +10 -0
  248. package/dist/server/handlers/vars.handler.d.ts.map +1 -0
  249. package/dist/server/handlers/vars.handler.js +159 -0
  250. package/dist/server/handlers/vars.handler.js.map +1 -0
  251. package/dist/server/layout.js +88 -0
  252. package/dist/server/layout.js.map +1 -0
  253. package/dist/server/lazy.d.ts +11 -0
  254. package/dist/server/lazy.d.ts.map +1 -0
  255. package/dist/server/lazy.js +33 -0
  256. package/dist/server/lazy.js.map +1 -0
  257. package/dist/server/local-api.d.ts +9 -0
  258. package/dist/server/local-api.d.ts.map +1 -0
  259. package/dist/server/local-api.js +60 -0
  260. package/dist/server/local-api.js.map +1 -0
  261. package/dist/server/metadata.d.ts +21 -0
  262. package/dist/server/metadata.d.ts.map +1 -0
  263. package/dist/server/metadata.js +20 -0
  264. package/dist/server/metadata.js.map +1 -0
  265. package/dist/server/mixer-payload.d.ts +63 -0
  266. package/dist/server/mixer-payload.d.ts.map +1 -0
  267. package/dist/server/mixer.d.ts +214 -0
  268. package/dist/server/mixer.d.ts.map +1 -0
  269. package/dist/server/mixer.js +355 -0
  270. package/dist/server/mixer.js.map +1 -0
  271. package/dist/server/page.d.ts +22 -0
  272. package/dist/server/page.d.ts.map +1 -0
  273. package/dist/server/page.js +57 -0
  274. package/dist/server/page.js.map +1 -0
  275. package/dist/server/utils.d.ts +12 -0
  276. package/dist/server/utils.d.ts.map +1 -0
  277. package/dist/{utils-YwteTbk7.js → server/utils.js} +3 -3
  278. package/dist/server/utils.js.map +1 -0
  279. package/dist/server/utmz.d.ts +9 -0
  280. package/dist/server/utmz.d.ts.map +1 -0
  281. package/dist/server/utmz.js +14 -0
  282. package/dist/server/utmz.js.map +1 -0
  283. package/dist/types.d.ts +136 -0
  284. package/dist/types.d.ts.map +1 -0
  285. package/package.json +1 -1
  286. package/src/index.ts +0 -1
  287. package/dist/exports/client-xcFJNcG7.d.ts +0 -979
  288. package/dist/exports/client-xcFJNcG7.d.ts.map +0 -1
  289. package/dist/exports/client.js.map +0 -1
  290. package/dist/exports/instrumentation-DBO6QH4d.d.ts.map +0 -1
  291. package/dist/exports/instrumentation.js.map +0 -1
  292. package/dist/exports/proxy-Cv7QFVci.d.ts +0 -71
  293. package/dist/exports/proxy-Cv7QFVci.d.ts.map +0 -1
  294. package/dist/exports/proxy.js.map +0 -1
  295. package/dist/exports/server-BHObJHJ6.d.ts +0 -402
  296. package/dist/exports/server-BHObJHJ6.d.ts.map +0 -1
  297. package/dist/exports/server.js.map +0 -1
  298. package/dist/http-_2M-UFRx.js.map +0 -1
  299. package/dist/index-CdYcvudT.d.ts +0 -4
  300. package/dist/index-CtfAJ0y7.d.ts +0 -499
  301. package/dist/index-CtfAJ0y7.d.ts.map +0 -1
  302. package/dist/index.js.map +0 -1
  303. package/dist/route-DzFwERQP.js.map +0 -1
  304. package/dist/store-CJzqrHsl.js.map +0 -1
  305. package/dist/types-BatUTdbZ.d.ts.map +0 -1
  306. package/dist/types-D29_snYY.d.ts +0 -191
  307. package/dist/types-D29_snYY.d.ts.map +0 -1
  308. package/dist/utils-Ca7xh5mm.js +0 -78
  309. package/dist/utils-Ca7xh5mm.js.map +0 -1
  310. package/dist/utils-YwteTbk7.js.map +0 -1
  311. /package/dist/{config.client-B8As5DY0.js → instrumentation/sentry/config.client.js} +0 -0
  312. /package/dist/{config.edge-B8As5DY0.js → instrumentation/sentry/config.edge.js} +0 -0
  313. /package/dist/{config.server-B8As5DY0.js → instrumentation/sentry/config.server.js} +0 -0
@@ -0,0 +1,355 @@
1
+ import { guest } from "../lib/const.js";
2
+ import { collectRoutes, defaultLocale, defaultMarket, isObject } from "@websolutespa/bom-core";
3
+ import { cache } from "react";
4
+ import { InMemoryCache } from "@websolutespa/payload-plugin-bowl";
5
+ import { getPayload } from "payload";
6
+ //#region src/server/mixer.ts
7
+ const USE_CACHE = true;
8
+ const getRouteCache = () => {
9
+ let cache = globalThis._route;
10
+ if (!cache) {
11
+ cache = new InMemoryCache();
12
+ globalThis._route = cache;
13
+ }
14
+ return cache;
15
+ };
16
+ const getMixerCache = () => {
17
+ let cache = globalThis._mixer;
18
+ if (!cache) {
19
+ cache = new InMemoryCache();
20
+ globalThis._mixer = cache;
21
+ }
22
+ return cache;
23
+ };
24
+ function getCacheKey({ market = "all", locale = "all", user = guest, draft = "false" }) {
25
+ const roles = user?.roles || ["guest"];
26
+ const tenants = "tenants" in user && Array.isArray(user.tenants) ? user.tenants.map((x) => isObject(x) ? x.id : x) : [];
27
+ roles.sort();
28
+ tenants.sort();
29
+ return `context-${[
30
+ market,
31
+ locale,
32
+ draft === "false" ? "published" : "draft",
33
+ ...roles,
34
+ ...tenants
35
+ ].join("-")}`;
36
+ }
37
+ async function getContext() {
38
+ let context = globalThis._context;
39
+ if (!context) {
40
+ context = {
41
+ payload: void 0,
42
+ context: void 0
43
+ };
44
+ globalThis._context = context;
45
+ }
46
+ return context;
47
+ }
48
+ async function setContext(data) {
49
+ const context = await getContext();
50
+ if (data.payload) context.payload = data.payload;
51
+ if (data.context) context.context = data.context;
52
+ }
53
+ function getSearchParams(request) {
54
+ const searchParams = request.nextUrl.searchParams;
55
+ const params = Object.fromEntries(searchParams.entries());
56
+ return {
57
+ market: params.market || defaultMarket,
58
+ locale: params.locale || defaultLocale,
59
+ defaultMarket,
60
+ defaultLocale,
61
+ params,
62
+ searchParams: request.nextUrl.searchParams
63
+ };
64
+ }
65
+ const getPayloadInstance = cache(async (props) => await getPayload(props));
66
+ function getOptions({ locale = "all", user = guest, draft = false }) {
67
+ return {
68
+ localized: {
69
+ locale,
70
+ fallbackLocale: defaultLocale,
71
+ draft,
72
+ depth: 0,
73
+ pagination: false,
74
+ limit: 1e4,
75
+ user,
76
+ overrideAccess: false
77
+ },
78
+ unlocalized: {
79
+ locale: "all",
80
+ fallbackLocale: defaultLocale,
81
+ draft,
82
+ depth: 0,
83
+ pagination: false,
84
+ limit: 1e4,
85
+ user,
86
+ overrideAccess: false
87
+ }
88
+ };
89
+ }
90
+ async function getRoutes$1({ payload, market = "all", locale = "all", user = guest, draft = false }) {
91
+ const cacheKey = getCacheKey({
92
+ market,
93
+ locale,
94
+ user,
95
+ draft: draft ? "true" : "false"
96
+ });
97
+ const routeCache = getRouteCache();
98
+ if (routeCache.has(cacheKey)) {
99
+ console.log("getRoutes from cache", cacheKey);
100
+ return routeCache.get(cacheKey);
101
+ }
102
+ let routes = [];
103
+ if (!user) return routes;
104
+ const { localized, unlocalized } = getOptions({
105
+ locale,
106
+ user,
107
+ draft
108
+ });
109
+ const markets = (await payload.find({
110
+ ...localized,
111
+ collection: "market",
112
+ where: { isActive: { equals: true } }
113
+ })).docs;
114
+ const locales = (await payload.findGlobal({
115
+ ...localized,
116
+ slug: "locale"
117
+ })).items.filter((x) => x.isActive);
118
+ if (locales.length > 0 && markets.length > 0) {
119
+ const keys = payload.config.collections.filter((x) => {
120
+ return x.fields.find((x) => "name" in x && x.name === "slug");
121
+ }).map((x) => x.slug);
122
+ const pages = Object.fromEntries(keys.map((x) => [x, []]));
123
+ for (const key of keys) pages[key] = (await payload.find({
124
+ ...unlocalized,
125
+ collection: key
126
+ })).docs;
127
+ const categories = (await payload.find({
128
+ ...unlocalized,
129
+ collection: "category",
130
+ depth: 1
131
+ })).docs;
132
+ const medias = (await payload.find({
133
+ ...unlocalized,
134
+ collection: "media",
135
+ depth: 1
136
+ })).docs;
137
+ routes = collectRoutes(pages, categories, markets, locales, medias);
138
+ }
139
+ routeCache.set(cacheKey, routes);
140
+ return routes;
141
+ }
142
+ async function getMixerContext({ payload, market, locale, user = guest, draft = false }) {
143
+ const cacheKey = getCacheKey({
144
+ market,
145
+ locale,
146
+ user,
147
+ draft: draft ? "true" : "false"
148
+ });
149
+ const mixerCache = getMixerCache();
150
+ if (mixerCache.has(cacheKey) && USE_CACHE) {
151
+ console.log("getContext from cache", cacheKey);
152
+ return mixerCache.get(cacheKey);
153
+ }
154
+ const { localized } = getOptions({
155
+ locale,
156
+ user,
157
+ draft
158
+ });
159
+ const locales = (await payload.findGlobal({
160
+ ...localized,
161
+ slug: "locale"
162
+ })).items.filter((x) => x.isActive);
163
+ const localeIds = locales.map((x) => x.id);
164
+ const markets = (await payload.find({
165
+ ...localized,
166
+ collection: "market"
167
+ })).docs.filter((x) => x.isActive);
168
+ const marketIds = markets.map((x) => x.id);
169
+ const categories = (await payload.find({
170
+ ...localized,
171
+ collection: "category",
172
+ depth: 2
173
+ })).docs;
174
+ const routes = await getRoutes$1({
175
+ payload,
176
+ market,
177
+ locale,
178
+ user,
179
+ draft
180
+ });
181
+ const context = {
182
+ locale,
183
+ localeIds,
184
+ locales,
185
+ market,
186
+ marketIds,
187
+ markets,
188
+ routes,
189
+ currentRoutes: filterRoutes(routes, market, locale),
190
+ categories,
191
+ richText: false
192
+ };
193
+ mixerCache.set(cacheKey, context);
194
+ await setContext({ context });
195
+ return context;
196
+ }
197
+ /**
198
+ * Runtime (request-time) payload accessor.
199
+ *
200
+ * By default, operates as the guest user for static generation. For auth:
201
+ * call getHeaders() directly in your page/route/layout, then pass it here.
202
+ *
203
+ * Example:
204
+ * const headers = await getHeaders();
205
+ * const { payload, user, getContext } = await getPayload({ config, headers });
206
+ */
207
+ async function getPayload$1({ config, headers }) {
208
+ const payload = await getPayload({ config });
209
+ await setContext({ payload });
210
+ let user = guest;
211
+ if (headers) try {
212
+ const auth = await payload.auth({
213
+ headers,
214
+ canSetHeaders: false
215
+ });
216
+ if (auth.user) user = auth.user;
217
+ } catch (error) {
218
+ console.log("getPayload.error", error);
219
+ }
220
+ const draft = false;
221
+ return {
222
+ payload,
223
+ user,
224
+ getContext: (market, locale) => getMixerContext({
225
+ payload,
226
+ market,
227
+ locale,
228
+ user,
229
+ draft
230
+ })
231
+ };
232
+ }
233
+ function filterRoutes(routes, market, locale) {
234
+ market = market === "all" ? defaultMarket : market;
235
+ locale = locale === "all" ? defaultLocale : locale;
236
+ return routes.filter((x) => x.market === market && x.locale === locale);
237
+ }
238
+ function getAuthHeaders(token) {
239
+ if (token) return new Headers({ Authorization: `JWT ${token.value}` });
240
+ else return new Headers({ Authorization: `users API-Key ${process.env.STORE_API_KEY}` });
241
+ }
242
+ /**
243
+ * Produces the common option block shared across all payload.find / payload.findGlobal calls.
244
+ * For payload.find, add pagination: false and limit: 10000 at the call site.
245
+ * For payload.findByID, spread directly — extra find-only fields are ignored.
246
+ */
247
+ function buildBaseOptions(user, locale, draft) {
248
+ return {
249
+ locale,
250
+ fallbackLocale: defaultLocale,
251
+ draft: draft ?? false,
252
+ depth: 0,
253
+ user,
254
+ overrideAccess: false
255
+ };
256
+ }
257
+ /**
258
+ * Payload proxy example
259
+ *
260
+ *
261
+ * import type { Payload, PayloadRequest } from '../types/index.js'
262
+
263
+ import { commitTransaction } from './commitTransaction.js'
264
+ import { initTransaction } from './initTransaction.js'
265
+ import { killTransaction } from './killTransaction.js'
266
+
267
+ const localOperations = [
268
+ 'count',
269
+ 'countGlobalVersions',
270
+ 'countVersions',
271
+ 'create',
272
+ 'delete',
273
+ 'duplicate',
274
+ 'find',
275
+ 'findByID',
276
+ 'delete',
277
+ 'duplicate',
278
+ 'find',
279
+ 'findByID',
280
+ 'findGlobal',
281
+ 'findGlobalVersionByID',
282
+ 'findGlobalVersions',
283
+ 'findVersionByID',
284
+ 'findVersionByID',
285
+ 'login',
286
+ 'update',
287
+ 'updateGlobal',
288
+ 'restoreVersion',
289
+ 'restoreGlobalVersion',
290
+ ] satisfies (keyof Payload)[]
291
+
292
+ type LocalOperation = (typeof localOperations)[number]
293
+
294
+ const isLocalOperation = (key: string): key is LocalOperation => {
295
+ return localOperations.includes(key as LocalOperation)
296
+ }
297
+
298
+ export const withTransaction = async <T>(
299
+ payload: Payload,
300
+ callback: (transaction: Payload) => Promise<T>,
301
+ ) => {
302
+ const transactionReq = { payload } as PayloadRequest
303
+ await initTransaction(transactionReq)
304
+
305
+ const proxy = new Proxy(payload, {
306
+ get(target, property: keyof Payload, receiver) {
307
+ if (isLocalOperation(property)) {
308
+ const operation = Reflect.get(target, property, receiver)
309
+
310
+ return function (options) {
311
+ let req: Partial<PayloadRequest> = options.req
312
+
313
+ if (!req) {
314
+ req = {}
315
+ }
316
+
317
+ if (!req.transactionID) {
318
+ req = { ...req, transactionID: transactionReq.transactionID }
319
+ }
320
+
321
+ return (operation as (...args: unknown[]) => void)({
322
+ ...options,
323
+ req,
324
+ })
325
+ }
326
+ }
327
+
328
+ return Reflect.get(target, property, receiver)
329
+ },
330
+ })
331
+
332
+ try {
333
+ const result = await callback(proxy)
334
+ await commitTransaction(transactionReq)
335
+ return result
336
+ } catch (e) {
337
+ await killTransaction(transactionReq)
338
+ throw e
339
+ }
340
+ }
341
+
342
+ // -----------------
343
+
344
+ const { one, two } = await withTransaction(payload, async (transaction) => {
345
+ const one = await transaction.create({ collection: 'posts', data: { title: 'one' } })
346
+ const two = await transaction.create({ collection: 'posts', data: { title: 'two' } })
347
+
348
+ return { one, two }
349
+ })
350
+
351
+ */
352
+ //#endregion
353
+ export { buildBaseOptions, filterRoutes, getAuthHeaders, getCacheKey, getContext, getMixerContext, getOptions, getPayload$1 as getPayload, getPayloadInstance, getRoutes$1 as getRoutes, getSearchParams, setContext };
354
+
355
+ //# sourceMappingURL=mixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixer.js","names":["getPayload_","getRoutes","getPayload"],"sources":["../../src/server/mixer.ts"],"sourcesContent":["import { collectRoutes, defaultLocale, defaultMarket, ICategory, ILocale, IMarket, IMedia, IRoute, isDevelopment, isObject } from '@websolutespa/bom-core';\r\nimport type { Config, User } from '@websolutespa/payload-plugin-bowl';\r\nimport { InMemoryCache } from '@websolutespa/payload-plugin-bowl';\r\nimport { NextRequest } from 'next/server';\r\nimport { BasePayload, getPayload as getPayload_, SanitizedConfig, TypedFallbackLocale, TypedLocale } from 'payload';\r\nimport { cache } from 'react';\r\nimport { guest } from '../lib/const';\r\nimport type { BaseOptions, IContext, MixerContext, ReadonlyHeaders } from '../types';\r\nimport type { MixerPayload } from './mixer-payload';\r\n\r\n// !!! todo check when to use in memory cache\r\n\r\nconst USE_CACHE = true || !(isDevelopment);\r\n\r\nconst getRouteCache = (): InMemoryCache<IRoute[]> => {\r\n let cache: InMemoryCache<IRoute[]> | undefined = (globalThis as any)._route;\r\n if (!cache) {\r\n cache = new InMemoryCache<IRoute[]>();\r\n (globalThis as any)._route = cache;\r\n }\r\n return cache;\r\n};\r\n\r\nconst getMixerCache = (): InMemoryCache<MixerContext> => {\r\n let cache: InMemoryCache<MixerContext> | undefined = (globalThis as any)._mixer;\r\n if (!cache) {\r\n cache = new InMemoryCache<MixerContext>();\r\n (globalThis as any)._mixer = cache;\r\n }\r\n return cache;\r\n};\r\n\r\nexport function getCacheKey({\r\n market = 'all',\r\n locale = 'all',\r\n user = guest,\r\n draft = 'false',\r\n}: {\r\n market?: string;\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: string;\r\n}) {\r\n const roles = (user?.roles || ['guest']) as string[];\r\n const tenants = ('tenants' in user && Array.isArray(user.tenants) ?\r\n user.tenants.map((x: any) => isObject(x) ? x.id : x) :\r\n []\r\n ) as string[];\r\n roles.sort();\r\n tenants.sort();\r\n const keys = [market, locale, draft === 'false' ? 'published' : 'draft', ...roles, ...tenants];\r\n const key = `context-${keys.join('-')}`;\r\n return key;\r\n}\r\n\r\nexport async function getContext() {\r\n let context: IContext | undefined = (globalThis as any)._context;\r\n if (!context) {\r\n context = {\r\n payload: undefined,\r\n context: undefined,\r\n } as unknown as IContext;\r\n (globalThis as any)._context = context;\r\n }\r\n return context;\r\n}\r\n\r\nexport async function setContext(data: Partial<IContext>) {\r\n const context = await getContext();\r\n if (data.payload) {\r\n context.payload = data.payload;\r\n }\r\n if (data.context) {\r\n context.context = data.context;\r\n }\r\n}\r\n\r\nexport function getSearchParams(request: NextRequest) {\r\n const searchParams = request.nextUrl.searchParams;\r\n const params = Object.fromEntries(searchParams.entries());\r\n return {\r\n market: params.market || defaultMarket,\r\n locale: params.locale || defaultLocale,\r\n defaultMarket,\r\n defaultLocale,\r\n params,\r\n searchParams: request.nextUrl.searchParams,\r\n };\r\n}\r\n\r\nexport const getPayloadInstance = cache(\r\n async (props: { config: SanitizedConfig | Promise<SanitizedConfig> }) => await getPayload_(props)\r\n);\r\n\r\nexport function getOptions({\r\n locale = 'all',\r\n user = guest,\r\n draft = false,\r\n}: {\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}) {\r\n const localized: BaseOptions = {\r\n locale: locale as TypedLocale,\r\n fallbackLocale: defaultLocale as TypedLocale,\r\n draft,\r\n depth: 0,\r\n pagination: false,\r\n limit: 10000,\r\n user,\r\n overrideAccess: false,\r\n };\r\n const unlocalized: BaseOptions = {\r\n locale: 'all',\r\n fallbackLocale: defaultLocale as TypedLocale,\r\n draft,\r\n depth: 0,\r\n pagination: false,\r\n limit: 10000,\r\n user,\r\n overrideAccess: false,\r\n };\r\n return { localized, unlocalized };\r\n}\r\n\r\nexport async function getRoutes({\r\n payload,\r\n market = 'all',\r\n locale = 'all',\r\n user = guest,\r\n draft = false,\r\n}: {\r\n payload: BasePayload;\r\n market?: string;\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}): Promise<IRoute[]> {\r\n const cacheKey = getCacheKey({ market, locale, user, draft: draft ? 'true' : 'false' });\r\n\r\n const routeCache = getRouteCache();\r\n if (USE_CACHE && routeCache.has(cacheKey)) {\r\n console.log('getRoutes from cache', cacheKey);\r\n return routeCache.get(cacheKey);\r\n }\r\n\r\n let routes: IRoute[] = [];\r\n if (!user) {\r\n return routes;\r\n }\r\n\r\n const { localized, unlocalized } = getOptions({ locale, user, draft });\r\n\r\n const marketRequest = await payload.find({\r\n ...localized,\r\n collection: 'market',\r\n where: { isActive: { equals: true } },\r\n });\r\n const markets = marketRequest.docs;\r\n\r\n const localeResult = await payload.findGlobal({\r\n ...localized,\r\n slug: 'locale',\r\n }) as { items: ILocale[] };\r\n const locales = localeResult.items.filter(x => x.isActive);\r\n\r\n if (locales.length > 0 && markets.length > 0) {\r\n const pageCollections = payload.config.collections.filter(x => {\r\n return x.fields.find(x => 'name' in x && x.name === 'slug');\r\n });\r\n const keys = pageCollections.map(x => x.slug);\r\n // console.log(payload.config.collections.find(x => x.slug === 'homepage'));\r\n // const keys = Object.keys(store.pages) as CollectionSlug[];\r\n const pages: Record<string, any[]> = Object.fromEntries(keys.map(x => [x, []]));\r\n for (const key of keys) {\r\n const pageResult = await payload.find({ ...unlocalized, collection: key });\r\n pages[key] = pageResult.docs;\r\n }\r\n const categoryRequest = await payload.find({\r\n ...unlocalized,\r\n collection: 'category',\r\n depth: 1,\r\n });\r\n const categories = categoryRequest.docs;\r\n const mediaRequest = await payload.find({\r\n ...unlocalized,\r\n collection: 'media',\r\n depth: 1,\r\n });\r\n const medias = mediaRequest.docs;\r\n routes = collectRoutes(\r\n pages,\r\n categories as unknown as ICategory[],\r\n markets as unknown as IMarket[],\r\n locales,\r\n medias as unknown as IMedia[]\r\n );\r\n }\r\n routeCache.set(cacheKey, routes);\r\n return routes;\r\n}\r\n\r\nexport async function getMixerContext({\r\n payload,\r\n market,\r\n locale,\r\n user = guest,\r\n draft = false,\r\n}: {\r\n payload: BasePayload;\r\n market: string;\r\n locale: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}): Promise<MixerContext> {\r\n const cacheKey = getCacheKey({ market, locale, user, draft: draft ? 'true' : 'false' });\r\n\r\n const mixerCache = getMixerCache();\r\n if (mixerCache.has(cacheKey) && USE_CACHE) {\r\n console.log('getContext from cache', cacheKey);\r\n return mixerCache.get(cacheKey);\r\n }\r\n\r\n const { localized } = getOptions({ locale, user, draft });\r\n const localeResult = await payload.findGlobal({\r\n ...localized,\r\n slug: 'locale',\r\n }) as { items: ILocale[] };\r\n const locales = localeResult.items.filter(x => x.isActive) as unknown as ILocale[];\r\n const localeIds = locales.map(x => x.id) as string[];\r\n\r\n const marketRequest = await payload.find({\r\n ...localized,\r\n collection: 'market',\r\n });\r\n const marketItems = marketRequest.docs;\r\n const markets = marketItems.filter(x => x.isActive) as unknown as IMarket[];\r\n const marketIds = markets.map(x => x.id);\r\n\r\n const categoryRequest = await payload.find({\r\n ...localized,\r\n collection: 'category',\r\n depth: 2,\r\n });\r\n const categories = categoryRequest.docs;\r\n\r\n const routes = await getRoutes({ payload, market, locale, user, draft });\r\n const currentRoutes = filterRoutes(routes, market, locale);\r\n\r\n const richText = false;\r\n\r\n const context: MixerContext = {\r\n locale,\r\n localeIds,\r\n locales,\r\n market,\r\n marketIds,\r\n markets,\r\n routes,\r\n currentRoutes,\r\n categories: categories as unknown as MixerContext['categories'],\r\n richText,\r\n };\r\n\r\n mixerCache.set(cacheKey, context);\r\n await setContext({ context });\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Runtime (request-time) payload accessor.\r\n *\r\n * By default, operates as the guest user for static generation. For auth:\r\n * call getHeaders() directly in your page/route/layout, then pass it here.\r\n *\r\n * Example:\r\n * const headers = await getHeaders();\r\n * const { payload, user, getContext } = await getPayload({ config, headers });\r\n */\r\nexport async function getPayload({\r\n config,\r\n headers,\r\n}: {\r\n config: Promise<SanitizedConfig>;\r\n headers?: ReadonlyHeaders;\r\n}) {\r\n const payload = await getPayload_({ config });\r\n await setContext({ payload: payload as MixerPayload });\r\n\r\n let user: User & Config['user'] = guest;\r\n if (headers) {\r\n try {\r\n const auth = await payload.auth({ headers, canSetHeaders: false });\r\n if (auth.user) {\r\n user = auth.user as typeof user;\r\n }\r\n // console.log('getPayload', user, token);\r\n } catch (error) {\r\n console.log('getPayload.error', error);\r\n }\r\n }\r\n\r\n const draft = false;\r\n\r\n return {\r\n payload: payload as MixerPayload,\r\n user,\r\n getContext: (market: string, locale: string) => getMixerContext({ payload, market, locale, user, draft }),\r\n };\r\n}\r\n\r\nexport function filterRoutes(routes: IRoute[], market: string, locale: string): IRoute[] {\r\n market = market === 'all' ? defaultMarket : market;\r\n locale = locale === 'all' ? defaultLocale : locale;\r\n return routes.filter(x => x.market === market && x.locale === locale);\r\n}\r\n\r\nexport function getAuthHeaders(token: { value: string } | undefined): Headers {\r\n if (token) {\r\n return new Headers({ Authorization: `JWT ${token.value}` });\r\n } else {\r\n return new Headers({ Authorization: `users API-Key ${process.env.STORE_API_KEY}` });\r\n }\r\n}\r\n\r\n/**\r\n * Produces the common option block shared across all payload.find / payload.findGlobal calls.\r\n * For payload.find, add pagination: false and limit: 10000 at the call site.\r\n * For payload.findByID, spread directly — extra find-only fields are ignored.\r\n */\r\nexport function buildBaseOptions(user: any, locale: string, draft?: boolean) {\r\n return {\r\n locale: locale as TypedLocale,\r\n fallbackLocale: defaultLocale as TypedFallbackLocale,\r\n draft: draft ?? false,\r\n depth: 0,\r\n user,\r\n overrideAccess: false,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Payload proxy example\r\n *\r\n *\r\n * import type { Payload, PayloadRequest } from '../types/index.js'\r\n\r\nimport { commitTransaction } from './commitTransaction.js'\r\nimport { initTransaction } from './initTransaction.js'\r\nimport { killTransaction } from './killTransaction.js'\r\n\r\nconst localOperations = [\r\n 'count',\r\n 'countGlobalVersions',\r\n 'countVersions',\r\n 'create',\r\n 'delete',\r\n 'duplicate',\r\n 'find',\r\n 'findByID',\r\n 'delete',\r\n 'duplicate',\r\n 'find',\r\n 'findByID',\r\n 'findGlobal',\r\n 'findGlobalVersionByID',\r\n 'findGlobalVersions',\r\n 'findVersionByID',\r\n 'findVersionByID',\r\n 'login',\r\n 'update',\r\n 'updateGlobal',\r\n 'restoreVersion',\r\n 'restoreGlobalVersion',\r\n] satisfies (keyof Payload)[]\r\n\r\ntype LocalOperation = (typeof localOperations)[number]\r\n\r\nconst isLocalOperation = (key: string): key is LocalOperation => {\r\n return localOperations.includes(key as LocalOperation)\r\n}\r\n\r\nexport const withTransaction = async <T>(\r\n payload: Payload,\r\n callback: (transaction: Payload) => Promise<T>,\r\n) => {\r\n const transactionReq = { payload } as PayloadRequest\r\n await initTransaction(transactionReq)\r\n\r\n const proxy = new Proxy(payload, {\r\n get(target, property: keyof Payload, receiver) {\r\n if (isLocalOperation(property)) {\r\n const operation = Reflect.get(target, property, receiver)\r\n\r\n return function (options) {\r\n let req: Partial<PayloadRequest> = options.req\r\n\r\n if (!req) {\r\n req = {}\r\n }\r\n\r\n if (!req.transactionID) {\r\n req = { ...req, transactionID: transactionReq.transactionID }\r\n }\r\n\r\n return (operation as (...args: unknown[]) => void)({\r\n ...options,\r\n req,\r\n })\r\n }\r\n }\r\n\r\n return Reflect.get(target, property, receiver)\r\n },\r\n })\r\n\r\n try {\r\n const result = await callback(proxy)\r\n await commitTransaction(transactionReq)\r\n return result\r\n } catch (e) {\r\n await killTransaction(transactionReq)\r\n throw e\r\n }\r\n}\r\n\r\n// -----------------\r\n\r\nconst { one, two } = await withTransaction(payload, async (transaction) => {\r\n const one = await transaction.create({ collection: 'posts', data: { title: 'one' } })\r\n const two = await transaction.create({ collection: 'posts', data: { title: 'two' } })\r\n\r\n return { one, two }\r\n})\r\n\r\n */\r\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { MixerPayload } from "./mixer-payload.js";
2
+ import { MixerContext, TypedPage } from "../types.js";
3
+ import { User } from "@websolutespa/payload-plugin-bowl";
4
+ import { CollectionSlug } from "payload";
5
+
6
+ //#region src/server/page.d.ts
7
+
8
+ /**
9
+ * Fetches a single page document by ID using Payload local API and assembles
10
+ * the IPage envelope (routes, alternates, breadcrumb, parentRoute).
11
+ *
12
+ * All data required for the envelope comes from mixerContext — no store calls.
13
+ * - routes/alternates : mixerContext.routes filtered by schema+id
14
+ * - segments : getCategorySegments() from bom-core (pure)
15
+ * - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes
16
+ */
17
+ declare function getPage<TSlug extends CollectionSlug>(slug: TSlug, id: string, market: string, locale: string, payload: MixerPayload, user: User, mixerContext: MixerContext, draftMode?: boolean): Promise<TypedPage<TSlug> | undefined>;
18
+ //# sourceMappingURL=page.d.ts.map
19
+
20
+ //#endregion
21
+ export { getPage };
22
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","names":[],"sources":["../../src/server/page.ts"],"mappings":";;;;;;;;;AAmBA;AAA6B;AAAe;AACpC;AAIG;AACH;AACQ;AAEK,iBATC,OASD,CAAA,cATuB,cASvB,CAAA,CAAA,IAAA,EARb,KAQa,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAJV,YAIU,EAAA,IAAA,EAHb,IAGa,EAAA,YAAA,EAFL,YAEK,EAAA,SAAA,CAAA,EAAA,OAAA,CAAA,EAAlB,OAAkB,CAAV,SAAU,CAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAAV"}
@@ -0,0 +1,57 @@
1
+ "use server";
2
+ import { buildBreadcrumb } from "../lib/breadcrumb.js";
3
+ import { buildBaseOptions } from "./mixer.js";
4
+ import { getCategorySegments } from "@websolutespa/bom-core";
5
+ //#region src/server/page.ts
6
+ /**
7
+ * Fetches a single page document by ID using Payload local API and assembles
8
+ * the IPage envelope (routes, alternates, breadcrumb, parentRoute).
9
+ *
10
+ * All data required for the envelope comes from mixerContext — no store calls.
11
+ * - routes/alternates : mixerContext.routes filtered by schema+id
12
+ * - segments : getCategorySegments() from bom-core (pure)
13
+ * - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes
14
+ */
15
+ async function getPage(slug, id, market, locale, payload, user, mixerContext, draftMode) {
16
+ try {
17
+ const base = buildBaseOptions(user, locale, draftMode);
18
+ const page = await payload.findByID({
19
+ collection: slug,
20
+ id,
21
+ locale: base.locale,
22
+ fallbackLocale: base.fallbackLocale,
23
+ draft: base.draft,
24
+ depth: base.depth,
25
+ user: base.user,
26
+ overrideAccess: base.overrideAccess,
27
+ disableErrors: true,
28
+ context: mixerContext
29
+ });
30
+ if (page) {
31
+ const routes = mixerContext.routes.filter((r) => r.schema === slug && String(r.page) === String(id));
32
+ const currentRoute = routes.find((r) => r.market === market && r.locale === locale);
33
+ const alternates = routes;
34
+ const categories = mixerContext.categories;
35
+ const segments = getCategorySegments(categories, page);
36
+ const currentRoutes = mixerContext.currentRoutes;
37
+ const breadcrumb = currentRoute ? buildBreadcrumb(segments, currentRoute, currentRoutes) : [];
38
+ const parentRoute = breadcrumb.length > 1 ? breadcrumb[breadcrumb.length - 2] : void 0;
39
+ return {
40
+ ...page,
41
+ href: currentRoute?.id,
42
+ alternates,
43
+ breadcrumb,
44
+ parentRoute
45
+ };
46
+ } else {
47
+ console.log("PageService.getPage.notfound", slug, id, locale);
48
+ return;
49
+ }
50
+ } catch {
51
+ return;
52
+ }
53
+ }
54
+ //#endregion
55
+ export { getPage };
56
+
57
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","names":[],"sources":["../../src/server/page.ts"],"sourcesContent":["'use server';\r\n\r\nimport { getCategorySegments, ICategorized, ICategory, IRoute, IRouteLink } from '@websolutespa/bom-core';\r\nimport type { User } from '@websolutespa/payload-plugin-bowl';\r\nimport type { CollectionSlug } from 'payload';\r\nimport { buildBreadcrumb } from '../lib/breadcrumb';\r\nimport type { MixerContext, TypedPage } from '../types';\r\nimport { buildBaseOptions } from './mixer';\r\nimport type { MixerPayload } from './mixer-payload';\r\n\r\n/**\r\n * Fetches a single page document by ID using Payload local API and assembles\r\n * the IPage envelope (routes, alternates, breadcrumb, parentRoute).\r\n *\r\n * All data required for the envelope comes from mixerContext — no store calls.\r\n * - routes/alternates : mixerContext.routes filtered by schema+id\r\n * - segments : getCategorySegments() from bom-core (pure)\r\n * - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes\r\n */\r\nexport async function getPage<TSlug extends CollectionSlug>(\r\n slug: TSlug,\r\n id: string,\r\n market: string,\r\n locale: string,\r\n payload: MixerPayload,\r\n user: User,\r\n mixerContext: MixerContext,\r\n draftMode?: boolean\r\n): Promise<TypedPage<TSlug> | undefined> {\r\n try {\r\n const base = buildBaseOptions(user, locale, draftMode);\r\n const page = await payload.findByID({\r\n collection: slug,\r\n id,\r\n locale: base.locale,\r\n fallbackLocale: base.fallbackLocale,\r\n draft: base.draft,\r\n depth: base.depth,\r\n user: base.user,\r\n overrideAccess: base.overrideAccess,\r\n disableErrors: true,\r\n context: mixerContext,\r\n });\r\n if (page) {\r\n // All routes for this schema+document across every market/locale (for alternates)\r\n const routes = (mixerContext.routes as IRoute[]).filter(\r\n r => r.schema === slug && String(r.page) === String(id)\r\n );\r\n const currentRoute = routes.find(r => r.market === market && r.locale === locale);\r\n const alternates = routes;\r\n\r\n // Segments derived from categories already present in mixerContext (pure, no I/O)\r\n const categories = mixerContext.categories as unknown as ICategory[];\r\n const segments = getCategorySegments(categories, page as unknown as ICategorized);\r\n\r\n // Breadcrumb built from currentRoutes (pre-filtered to market+locale by mixer)\r\n const currentRoutes = mixerContext.currentRoutes as IRoute[];\r\n const breadcrumb: IRouteLink[] = currentRoute\r\n ? buildBreadcrumb(segments, currentRoute, currentRoutes)\r\n : [];\r\n\r\n const parentRoute: IRouteLink | undefined = breadcrumb.length > 1\r\n ? breadcrumb[breadcrumb.length - 2]\r\n : undefined;\r\n\r\n return {\r\n ...page,\r\n href: currentRoute?.id,\r\n alternates,\r\n breadcrumb,\r\n parentRoute,\r\n } as unknown as TypedPage<TSlug>;\r\n } else {\r\n console.log('PageService.getPage.notfound', slug, id, locale);\r\n return undefined;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\n/*\r\nexport function asServerProps(props: any): any {\r\n return JSON.parse(JSON.stringify(props));\r\n}\r\n*/\r\n"],"mappings":";;;;;;;;;;;;;;AAmBA,eAAsB,QACpB,MACA,IACA,QACA,QACA,SACA,MACA,cACA,WACuC;CACvC,IAAI;EACF,MAAM,OAAO,iBAAiB,MAAM,QAAQ,SAAS;EACrD,MAAM,OAAO,MAAM,QAAQ,SAAS;GAClC,YAAY;GACZ;GACA,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACrB,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,gBAAgB,KAAK;GACrB,eAAe;GACf,SAAS;EACX,CAAC;EACD,IAAI,MAAM;GAER,MAAM,SAAU,aAAa,OAAoB,QAC/C,MAAK,EAAE,WAAW,QAAQ,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,CACxD;GACA,MAAM,eAAe,OAAO,MAAK,MAAK,EAAE,WAAW,UAAU,EAAE,WAAW,MAAM;GAChF,MAAM,aAAa;GAGnB,MAAM,aAAa,aAAa;GAChC,MAAM,WAAW,oBAAoB,YAAY,IAA+B;GAGhF,MAAM,gBAAgB,aAAa;GACnC,MAAM,aAA2B,eAC7B,gBAAgB,UAAU,cAAc,aAAa,IACrD,CAAC;GAEL,MAAM,cAAsC,WAAW,SAAS,IAC5D,WAAW,WAAW,SAAS,KAC/B,KAAA;GAEJ,OAAO;IACL,GAAG;IACH,MAAM,cAAc;IACpB;IACA;IACA;GACF;EACF,OAAO;GACL,QAAQ,IAAI,gCAAgC,MAAM,IAAI,MAAM;GAC5D;EACF;CACF,QAAQ;EACN;CACF;AACF"}
@@ -0,0 +1,12 @@
1
+ import { IRoute } from "@websolutespa/bom-core";
2
+ import { NextRequest } from "next/server";
3
+ import * as next_dist_server_web_next_url0 from "next/dist/server/web/next-url";
4
+
5
+ //#region src/server/utils.d.ts
6
+ declare function getNextUrl(request: NextRequest, route: IRoute): next_dist_server_web_next_url0.NextURL;
7
+ declare function getHrefBeforeRedirect(request: NextRequest): string | null;
8
+ //# sourceMappingURL=utils.d.ts.map
9
+
10
+ //#endregion
11
+ export { getHrefBeforeRedirect, getNextUrl };
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/server/utils.ts"],"mappings":";;;;;iBAIgB,UAAA,UAAoB,oBAAoB,SAAM,8BAAA,CAAA;iBAQ9C,qBAAA,UAA+B"}
@@ -1,4 +1,4 @@
1
- import { r as resolveRoute } from "./route-DzFwERQP.js";
1
+ import { resolveRoute } from "../lib/route.js";
2
2
  import { getHost } from "@websolutespa/bom-core";
3
3
  //#region src/server/utils.ts
4
4
  function getNextUrl(request, route) {
@@ -18,6 +18,6 @@ function getHrefBeforeRedirect(request) {
18
18
  return hrefBeforeRedirect;
19
19
  }
20
20
  //#endregion
21
- export { getNextUrl as n, getHrefBeforeRedirect as t };
21
+ export { getHrefBeforeRedirect, getNextUrl };
22
22
 
23
- //# sourceMappingURL=utils-YwteTbk7.js.map
23
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/server/utils.ts"],"sourcesContent":["import { getHost, IRoute } from '@websolutespa/bom-core';\r\nimport { NextRequest } from 'next/server';\r\nimport { resolveRoute } from '../lib/route';\r\n\r\nexport function getNextUrl(request: NextRequest, route: IRoute) {\r\n const nextUrl = request.nextUrl.clone();\r\n const resolvedPathname = resolveRoute(route);\r\n // console.log('getNextUrl.resolvedPathname', resolvedPathname);\r\n nextUrl.pathname = resolvedPathname;\r\n return nextUrl;\r\n}\r\n\r\nexport function getHrefBeforeRedirect(request: NextRequest): string | null {\r\n let hrefBeforeRedirect: string | null = null;\r\n const urlBeforeRedirect = request.nextUrl.clone();\r\n const host = getHost(request.headers);\r\n if (host) {\r\n urlBeforeRedirect.host = host;\r\n urlBeforeRedirect.port = host.split(':')[1] || '';\r\n hrefBeforeRedirect = urlBeforeRedirect.href;\r\n }\r\n return hrefBeforeRedirect;\r\n}\r\n"],"mappings":";;;AAIA,SAAgB,WAAW,SAAsB,OAAe;CAC9D,MAAM,UAAU,QAAQ,QAAQ,MAAM;CAGtC,QAAQ,WAFiB,aAAa,KAEJ;CAClC,OAAO;AACT;AAEA,SAAgB,sBAAsB,SAAqC;CACzE,IAAI,qBAAoC;CACxC,MAAM,oBAAoB,QAAQ,QAAQ,MAAM;CAChD,MAAM,OAAO,QAAQ,QAAQ,OAAO;CACpC,IAAI,MAAM;EACR,kBAAkB,OAAO;EACzB,kBAAkB,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM;EAC/C,qBAAqB,kBAAkB;CACzC;CACA,OAAO;AACT"}
@@ -0,0 +1,9 @@
1
+ import { NextApiRequest } from "next";
2
+
3
+ //#region src/server/utmz.d.ts
4
+ declare function getUtmz(request: NextApiRequest): string;
5
+ //# sourceMappingURL=utmz.d.ts.map
6
+
7
+ //#endregion
8
+ export { getUtmz };
9
+ //# sourceMappingURL=utmz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utmz.d.ts","names":[],"sources":["../../src/server/utmz.ts"],"mappings":";;;iBAEgB,OAAA,UAAiB"}
@@ -0,0 +1,14 @@
1
+ //#region src/server/utmz.ts
2
+ function getUtmz(request) {
3
+ let utmz = "N/A";
4
+ if (typeof request.cookies.__utmz === "string") {
5
+ utmz = request.cookies.__utmz;
6
+ const i = utmz.indexOf("utmcsr");
7
+ utmz = utmz.substring(i === -1 ? 0 : i);
8
+ }
9
+ return utmz;
10
+ }
11
+ //#endregion
12
+ export { getUtmz };
13
+
14
+ //# sourceMappingURL=utmz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utmz.js","names":[],"sources":["../../src/server/utmz.ts"],"sourcesContent":["import { NextApiRequest } from 'next';\r\n\r\nexport function getUtmz(request: NextApiRequest): string {\r\n let utmz = 'N/A';\r\n if (typeof request.cookies.__utmz === 'string') {\r\n utmz = request.cookies.__utmz;\r\n const i = utmz.indexOf('utmcsr');\r\n utmz = utmz.substring(i === -1 ? 0 : i);\r\n }\r\n return utmz;\r\n}\r\n"],"mappings":";AAEA,SAAgB,QAAQ,SAAiC;CACvD,IAAI,OAAO;CACX,IAAI,OAAO,QAAQ,QAAQ,WAAW,UAAU;EAC9C,OAAO,QAAQ,QAAQ;EACvB,MAAM,IAAI,KAAK,QAAQ,QAAQ;EAC/B,OAAO,KAAK,UAAU,MAAM,KAAK,IAAI,CAAC;CACxC;CACA,OAAO;AACT"}