@websolutespa/bom-next 3.0.1 → 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 (306) 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 -979
  76. package/dist/exports/client.js +19 -5734
  77. package/dist/exports/instrumentation.d.ts +2 -13
  78. package/dist/exports/instrumentation.js +1 -24
  79. package/dist/exports/proxy.d.ts +5 -71
  80. package/dist/exports/proxy.js +4 -253
  81. package/dist/exports/server.d.ts +19 -402
  82. package/dist/exports/server.js +18 -1973
  83. package/dist/index.d.ts +18 -499
  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/instrumentation/server.d.ts +13 -0
  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/{types2.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.js → lib/http.js} +1 -1
  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.js → lib/route.js} +1 -1
  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.js → lib/store.js} +1 -24
  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/{utils2.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 +6 -61
  284. package/dist/types.d.ts.map +1 -1
  285. package/package.json +1 -1
  286. package/dist/exports/client.d.ts.map +0 -1
  287. package/dist/exports/client.js.map +0 -1
  288. package/dist/exports/instrumentation.d.ts.map +0 -1
  289. package/dist/exports/instrumentation.js.map +0 -1
  290. package/dist/exports/proxy.d.ts.map +0 -1
  291. package/dist/exports/proxy.js.map +0 -1
  292. package/dist/exports/server.d.ts.map +0 -1
  293. package/dist/exports/server.js.map +0 -1
  294. package/dist/http.js.map +0 -1
  295. package/dist/index.d.ts.map +0 -1
  296. package/dist/index.js.map +0 -1
  297. package/dist/index2.d.ts +0 -4
  298. package/dist/route.js.map +0 -1
  299. package/dist/store.js.map +0 -1
  300. package/dist/types2.d.ts.map +0 -1
  301. package/dist/utils.js +0 -78
  302. package/dist/utils.js.map +0 -1
  303. package/dist/utils2.js.map +0 -1
  304. /package/dist/{config.client.js → instrumentation/sentry/config.client.js} +0 -0
  305. /package/dist/{config.edge.js → instrumentation/sentry/config.edge.js} +0 -0
  306. /package/dist/{config.server.js → instrumentation/sentry/config.server.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumentation.d.ts","names":[],"sources":["../../src/instrumentation/server.ts"],"mappings":";;;iBAGsB,sBAAA,CAAA,GAAsB;;AAA5C;AAcA;AAAmC,iBAAnB,mBAAA,CAAmB,KAAA,EAAA,OAAA,EAAA,OAAA,EAA0B,WAA1B,EAAA,YAAA,EAAqD,YAArD,CAAA,EAAA,IAAA;AAA0B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumentation.js","names":["captureRequestError","sentryCaptureRequestError"],"sources":["../../src/instrumentation/sentry/capture.requestError.ts","../../src/instrumentation/server.ts"],"sourcesContent":["import * as Sentry from '@sentry/nextjs';\r\n\r\n/**\r\n * Reports errors passed to the the Next.js `onRequestError` instrumentation hook.\r\n */\r\nexport const captureRequestError = Sentry.captureRequestError;\r\n","import { captureRequestError as sentryCaptureRequestError } from './sentry/capture.requestError';\r\nimport { ErrorContext, RequestInfo } from './types';\r\n\r\nexport async function registerIntrumentation() {\r\n if (process.env.NEXT_PUBLIC_SENTRY_DSN) {\r\n if (process.env.NEXT_RUNTIME === 'nodejs') {\r\n await import('./sentry/config.server');\r\n }\r\n if (process.env.NEXT_RUNTIME === 'edge') {\r\n await import('./sentry/config.edge');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Reports errors passed to the the Next.js `onRequestError` instrumentation hook.\r\n */\r\nexport function captureRequestError(error: unknown, request: RequestInfo, errorContext: ErrorContext): void {\r\n if (process.env.NEXT_PUBLIC_SENTRY_DSN) {\r\n return sentryCaptureRequestError(error, request, errorContext);\r\n } else {\r\n console.log('Instrumentation.captureRequestError', error, errorContext);\r\n }\r\n}\r\n"],"mappings":";;;;;AAKA,MAAaA,wBAAsB,OAAO;;;ACF1C,eAAsB,yBAAyB;CAC7C,IAAI,QAAQ,IAAI,wBAAwB;EACtC,IAAI,QAAQ,IAAI,iBAAiB,UAC/B,MAAM,OAAO;EAEf,IAAI,QAAQ,IAAI,iBAAiB,QAC/B,MAAM,OAAO;CAEjB;AACF;;;;AAKA,SAAgB,oBAAoB,OAAgB,SAAsB,cAAkC;CAC1G,IAAI,QAAQ,IAAI,wBACd,OAAOC,sBAA0B,OAAO,SAAS,YAAY;MAE7D,QAAQ,IAAI,uCAAuC,OAAO,YAAY;AAE1E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy.d.ts","names":[],"sources":["../../src/proxy/proxy.ts","../../src/proxy/route-proxy.ts","../../src/proxy/protected-route.ts","../../src/proxy/route-auto-detection.ts"],"mappings":";;;;;KAKY,iBAAA;WACD;QACH;EAFI,QAAA,CAAA,EAAA,OAAA;AAAiB,CAAA;AAClB,KAIC,UAAA,GAJD,CAAA,KAAA,EAIsB,iBAJtB,EAAA,GAI4C,oBAJ5C,GAImE,OAJnE,CAI2E,oBAJ3E,CAAA;AACH;AAAc;AAGtB;AAAsB;AAAW;AAAsB;AAA+B;AAAR;AAAO,iBAUrE,gBAAA,CAVqE,OAAA,EAU3C,WAV2C,CAAA,EAAA,MAAA;AAUrF;AAwBA;AAA2B;AAAa;AAAe;AAAU;;iBAAjD,WAAA,aAAwB,eAAe;;;;KCrC3C,KAAA,aAAkB,mBAAmB,mBAAmB,QAAQ;ADFhE,KCIA,sBAAA,GDJiB;EAAA,OAAA,ECKlB,WDLkB;EAClB,IAAA,ECKH,cDLG;EACH,KAAA,ECKC,MDLD;EAAc,QAAA,CAAA,EAAA,OAAA;AAGtB,CAAA;AAAsB,KCKV,eAAA,GDLU,CAAA,KAAA,ECKgB,sBDLhB,EAAA,GCK2C,oBDL3C,GCKkE,ODLlE,CCK0E,oBDL1E,CAAA;AAAW,KCOrB,qBAAA,GDPqB,CAAA,KAAA,ECOW,MDPX,EAAA,OAAA,ECO4B,WDP5B,EAAA,IAAA,ECO+C,cDP/C,EAAA,GCOkE,ODPlE,CCO0E,oBDP1E,CAAA;AAAsB,KCS3C,aAAA,GAAgB,MDT2B,GAAA;EAA+B,KAAA,CAAA,EAAA,MAAA;AAAR,CAAA;AAAO,KCUzE,qBAAA,GDVyE;EAUrE,MAAA,CAAA,ECCL,MDDK;EAwBA,KAAA,CAAA,ECtBN,aDsBiB;AAAA,CAAA;AAAa;AAAe;AAAU;;;;ACrCjE;AAAiB;AAAa,iBA0Bd,gBAAA,CA1Bc,GAAA,WAAA,EA0BmB,eA1BnB,EAAA,CAAA,EA0BuC,UA1BvC;AAAmB;;;cCOpC,qBAAqB;;;;iBCPZ,YAAA,UAAsB,sCAAmC;iBAMzD,aAAA,UAAuB,sCAAmC;cAqCnE,oBAAoB;AH7CjC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy.js","names":[],"sources":["../../src/proxy/proxy.ts","../../src/proxy/protected-route.ts","../../src/proxy/route-auto-detection.ts","../../src/proxy/route-proxy.ts"],"sourcesContent":["import { NextMiddlewareResult } from 'next/dist/server/web/types';\r\nimport { NextFetchEvent, NextRequest, NextResponse } from 'next/server';\r\n\r\n// export type Middleware = (request: NextRequest, next: NextFetchEvent) => Promise<NextMiddlewareResult>;\r\n\r\nexport type MiddlewareOptions = {\r\n request: NextRequest,\r\n next: NextFetchEvent,\r\n disabled?: boolean,\r\n};\r\nexport type Middleware = (props: MiddlewareOptions) => NextMiddlewareResult | Promise<NextMiddlewareResult>;\r\n\r\n/**\r\n * Returns the externally visible origin for an internal middleware request.\r\n *\r\n * Deployments commonly terminate TLS or change ports before forwarding to\r\n * Next.js. Honoring valid forwarded headers keeps resolver requests on the\r\n * public host and prevents an avoidable proxy redirect; direct-origin fallback\r\n * keeps local development and untrusted/invalid header values deterministic.\r\n */\r\nexport function getRequestOrigin(request: NextRequest): string {\r\n const forwardedHost = request.headers.get('x-forwarded-host')?.split(',')[0]?.trim();\r\n const forwardedProtocol = request.headers.get('x-forwarded-proto')?.split(',')[0]?.trim();\r\n const forwardedPort = request.headers.get('x-forwarded-port')?.split(',')[0]?.trim();\r\n\r\n if (!forwardedHost || !['http', 'https'].includes(forwardedProtocol || '')) {\r\n return request.nextUrl.origin;\r\n }\r\n\r\n const protocol = forwardedProtocol!;\r\n const defaultPort = protocol === 'https' ? '443' : '80';\r\n const includesPort = forwardedHost.startsWith('[') ? forwardedHost.includes(']:') : forwardedHost.includes(':');\r\n const authority = forwardedPort && forwardedPort !== defaultPort && !includesPort ? `${forwardedHost}:${forwardedPort}` : forwardedHost;\r\n\r\n return `${protocol}://${authority}`;\r\n}\r\n\r\n/**\r\n * Composes middleware into an ordered, short-circuiting proxy pipeline.\r\n *\r\n * A disabled proxy returns immediately, avoiding all downstream request work.\r\n * Otherwise each middleware can claim the response; stopping at its first\r\n * result prevents duplicate rewrites, redirects, and expensive policy checks.\r\n */\r\nexport function createProxy(...proxies: Middleware[]): Middleware {\r\n return async function ({ request, next, disabled }: MiddlewareOptions) {\r\n if (disabled) {\r\n return NextResponse.next();\r\n }\r\n let proxyResponse, i = 0;\r\n while (i < proxies.length && !proxyResponse) {\r\n const proxy = proxies[i] as Middleware;\r\n // console.log('createProxy.proxies', proxies.length, typeof proxy === 'function');\r\n if (typeof proxy === 'function') {\r\n proxyResponse = await proxy({ request, next });\r\n if (proxyResponse) {\r\n return proxyResponse;\r\n }\r\n }\r\n i++;\r\n }\r\n return NextResponse.next();\r\n };\r\n}\r\n","import { NextResponse } from 'next/server';\r\nimport { localApiGet } from '../lib/http';\r\nimport { getNextUrl } from '../server/utils';\r\nimport { getRequestOrigin } from './proxy';\r\nimport type { RouteMiddleware, RouteMiddlewareOptions, RouteResolverResponse } from './route-proxy';\r\n\r\nfunction getPublicRedirectUrl(request: RouteMiddlewareOptions['request'], href: string): URL | undefined {\r\n if (!href.startsWith('/') || href.startsWith('//')) {\r\n return undefined;\r\n }\r\n const url = new URL(href, getRequestOrigin(request));\r\n return url.pathname === request.nextUrl.pathname ? undefined : url;\r\n}\r\n\r\nexport const protectedRouteProxy: RouteMiddleware = async ({ request, route }: RouteMiddlewareOptions) => {\r\n // console.log('protectedRouteProxy', 'token', token);\r\n if (route.isProtected) {\r\n const token = request.cookies.get('payload-token');\r\n const isAuthenticated = token; // await hasValidSession();\r\n console.log('protectedRouteProxy.isAuthenticated', isAuthenticated);\r\n if (!isAuthenticated) {\r\n if (route.publicRedirect) {\r\n const redirectUrl = getPublicRedirectUrl(request, route.publicRedirect);\r\n if (redirectUrl) {\r\n return NextResponse.redirect(redirectUrl);\r\n }\r\n }\r\n const url = request.nextUrl;\r\n const { pathname } = url;\r\n const reqHeaders = new Headers(request.headers);\r\n reqHeaders.set('x-pathname', pathname);\r\n const resolution = await localApiGet<RouteResolverResponse>(\r\n `/-route?schema=login&market=${encodeURIComponent(route.market)}&locale=${encodeURIComponent(route.locale)}`,\r\n {},\r\n undefined,\r\n getRequestOrigin(request)\r\n );\r\n const nextRoute = resolution?.route;\r\n if (nextRoute) {\r\n const nextUrl = getNextUrl(request, nextRoute);\r\n reqHeaders.set('x-market', nextRoute.market);\r\n reqHeaders.set('x-locale', nextRoute.locale);\r\n reqHeaders.set('x-schema', nextRoute.schema);\r\n reqHeaders.set('x-id', String(nextRoute.page));\r\n reqHeaders.set('x-forwarded-pathname', nextUrl.pathname);\r\n console.log('protectedRouteProxy.Protected', pathname, '>', nextUrl.pathname);\r\n const response = NextResponse\r\n .rewrite(nextUrl, {\r\n request: {\r\n headers: reqHeaders,\r\n },\r\n });\r\n return response;\r\n }\r\n }\r\n }\r\n};\r\n","'use server';\r\n\r\nimport { asEquatable, defaultLocale, defaultMarket, IMarket, IRoute } from '@websolutespa/bom-core';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { localApiGet } from '../lib/http';\r\nimport { getRequestOrigin, Middleware, MiddlewareOptions } from './proxy';\r\n\r\nexport async function detectLocale(request: NextRequest, defaultLocale?: string) {\r\n const acceptLanguage = request.headers.get('accept-language')?.split(',')[0];\r\n const detectedLocale = request.cookies.get('NEXT_LOCALE')?.value || acceptLanguage || defaultLocale || process.env.DEFAULT_LOCALE;\r\n return detectedLocale as string;\r\n}\r\n\r\nexport async function detectCountry(request: NextRequest, defaultMarket?: string) {\r\n let ip = request.headers.get('x-forwarded-for') || request.headers.get('x-real-ip');\r\n if (ip) {\r\n ip = ip.split(',')[0];\r\n }\r\n const isValidIp = ip?.match(/^(\\d+?)\\.(\\d+?)\\.(\\d+?)\\.(\\d+?)$/);\r\n let detectedCountry = '';\r\n try {\r\n const token = process.env.IPINFO_TOKEN;\r\n if (token) {\r\n const url = isValidIp ?\r\n `https://api.ipinfo.io/lite/${ip}/country_code?token=${token}` :\r\n `https://api.ipinfo.io/lite/me/country_code?token=${token}`;\r\n const response = await fetch(url);\r\n if (response.ok) {\r\n const data = await response.text();\r\n detectedCountry = data.toLowerCase();\r\n }\r\n } else {\r\n const url = `https://geoip.websolute.it/Ip2Location/get_info.aspx?ipaddress=${isValidIp ? ip : ''}`;\r\n const response = await fetch(url);\r\n if (response.ok) {\r\n const xml = await response.text();\r\n detectedCountry = (\r\n ((xml.split('<CountryCode><![CDATA[')[1] || '').split(']]></CountryCode>')[0] || '')\r\n ).replace('-', '').toLowerCase();\r\n // console.log('detectedCountry', detectedCountry);\r\n }\r\n }\r\n // console.log('routeInterceptor.detectCountry', detectedCountry);\r\n return detectedCountry || defaultMarket || process.env.DEFAULT_MARKET;\r\n } catch (error) {\r\n console.log('routeInterceptor.detectCountry.error', error);\r\n }\r\n return (defaultMarket || process.env.DEFAULT_MARKET) as string;\r\n}\r\n\r\nexport const routeAutoDetection: Middleware = async ({ request }: MiddlewareOptions) => {\r\n let redirectUrl: string | undefined = undefined;\r\n const url = request.nextUrl;\r\n const origin = getRequestOrigin(request);\r\n if (url.pathname === '/') {\r\n const cookie = request.cookies.get('detectedRoute');\r\n if (cookie?.value) {\r\n redirectUrl = cookie.value;\r\n }\r\n // console.log('routeInterceptor.routeAutoDetection', url.pathname);\r\n const rootRoutes: IRoute[] = await localApiGet('/-route?where[isRoot][equals]=true', {}, undefined, origin);\r\n // console.log('routeInterceptor.routeAutoDetection.rootRoutes', rootRoutes);\r\n const defaultRoute = rootRoutes.find(x => x.id === '/');\r\n // console.log('routeInterceptor.routeAutoDetection.defaultRoute', defaultRoute);\r\n if (defaultRoute) {\r\n return;\r\n }\r\n const markets: IMarket[] = await localApiGet('/market?pagination=false', {}, undefined, origin);\r\n // console.log('routeInterceptor.routeAutoDetection.markets', markets);\r\n const market = markets.find(x => x.isDefault) || markets.find(x => x.id === defaultMarket) || markets[0];\r\n // console.log('routeInterceptor.routeAutoDetection.market', market);\r\n const detectedCountry = await detectCountry(request, market.id);\r\n // console.log('routeInterceptor.routeAutoDetection.detectedCountry', detectedCountry);\r\n const detectedMarket = detectedCountry ? (\r\n markets.filter(x => Array.isArray(x.countries)).find(x => {\r\n const countries: string[] = (x.countries || []).map(x => typeof x === 'string' ? x : x.id as string);\r\n return countries.includes(detectedCountry);\r\n }) ||\r\n markets.find(x => !Array.isArray(x.countries))\r\n ) : undefined;\r\n // console.log('routeInterceptor.routeAutoDetection.detectedMarket', detectedMarket);\r\n let detectedMarketRoutes = rootRoutes.filter(x => x.market === detectedMarket?.id);\r\n if (detectedMarketRoutes.length === 0) {\r\n detectedMarketRoutes = rootRoutes.filter(x => x.market === market.id);\r\n }\r\n // console.log('routeInterceptor.routeAutoDetection.detectedMarketRoutes', detectedMarketRoutes);\r\n const defaultMarketLocale = market.defaultLanguage ? (\r\n typeof market.defaultLanguage === 'string' ? market.defaultLanguage : market.defaultLanguage.id\r\n ) as string : defaultLocale;\r\n // console.log('routeInterceptor.routeAutoDetection.defaultMarketLocale', defaultMarketLocale);\r\n const detectedLocale = await detectLocale(request, defaultMarketLocale);\r\n // console.log('routeInterceptor.routeAutoDetection.detectedLocale', detectedLocale);\r\n const detectedLocaleRoutes = detectedMarketRoutes.filter(x => x.locale === detectedLocale);\r\n const detectedRoute =\r\n detectedLocaleRoutes.length > 0 ?\r\n detectedLocaleRoutes[0]! :\r\n detectedMarketRoutes.find(x => {\r\n const market = markets.find(m => m.id === x.market)!;\r\n const marketLocale = (market.defaultLanguage ? asEquatable(market.defaultLanguage as string) : defaultMarketLocale);\r\n return x.locale === marketLocale;\r\n })!;\r\n // console.log('routeInterceptor.routeAutoDetection.detectedRoute', detectedRoute);\r\n if (detectedRoute && detectedRoute.id !== url.pathname) {\r\n console.log('routeInterceptor.routeAutoDetection', detectedLocale, detectedCountry, detectedRoute.id);\r\n redirectUrl = detectedRoute.id;\r\n }\r\n // console.log('routeInterceptor.routeAutoDetection', locale, detectedCountry, rootRoutes);\r\n }\r\n if (redirectUrl) {\r\n // console.log('routeInterceptor', 'redirectUrl', redirectUrl);\r\n const resolvedUrl = new URL(redirectUrl, origin).href;\r\n // console.log('routeInterceptor', 'resolvedUrl', resolvedUrl);\r\n const search = request.nextUrl.search;\r\n const response = NextResponse.redirect(resolvedUrl + search, { status: 307 });\r\n response.cookies.set({\r\n expires: new Date(Date.now() + 1 * 24 * 60 * 60 * 1000),\r\n httpOnly: true,\r\n name: 'detectedRoute',\r\n path: '/',\r\n sameSite: 'lax',\r\n secure: true,\r\n value: redirectUrl,\r\n });\r\n return response;\r\n }\r\n};\r\n","import { defaultLocale, defaultMarket, IRoute } from '@websolutespa/bom-core';\r\nimport { NextMiddlewareResult } from 'next/dist/server/web/types';\r\nimport { NextFetchEvent, NextRequest, NextResponse } from 'next/server';\r\nimport { localApiGet } from '../lib/http';\r\nimport { getHrefBeforeRedirect, getNextUrl } from '../server/utils';\r\nimport { getRequestOrigin, Middleware, MiddlewareOptions } from './proxy';\r\n\r\nexport type Proxy = (request: NextRequest, next: NextFetchEvent) => Promise<NextMiddlewareResult>;\r\n\r\nexport type RouteMiddlewareOptions = {\r\n request: NextRequest,\r\n next: NextFetchEvent,\r\n route: IRoute,\r\n disabled?: boolean,\r\n};\r\nexport type RouteMiddleware = (props: RouteMiddlewareOptions) => NextMiddlewareResult | Promise<NextMiddlewareResult>;\r\n\r\nexport type RouteInterceptorProxy = (route: IRoute, request: NextRequest, next: NextFetchEvent) => Promise<NextMiddlewareResult>;\r\n\r\nexport type ResolvedRoute = IRoute & { splat?: string };\r\nexport type RouteResolverResponse = {\r\n parent?: IRoute;\r\n route?: ResolvedRoute;\r\n};\r\n\r\n/**\r\n * Resolves a public request to a CMS route, then rewrites it to the internal\r\n * Next.js page while preserving the original browser URL.\r\n *\r\n * The resolver call is deliberately made to this request's public origin so it\r\n * works behind reverse proxies and deployment hosts. A rewrite keeps routing\r\n * server-side, avoiding an extra browser round trip that a redirect would add.\r\n */\r\nexport function createRouteProxy(...middlewares: RouteMiddleware[]): Middleware {\r\n return async function ({ request, next }: MiddlewareOptions) {\r\n const url = request.nextUrl;\r\n const origin = getRequestOrigin(request);\r\n const hrefBeforeRedirect = getHrefBeforeRedirect(request);\r\n const { pathname } = url;\r\n const headers = new Headers(request.headers);\r\n headers.set('x-pathname', pathname);\r\n try {\r\n const draftMode = request.cookies.has('__prerender_bypass');\r\n console.log('draftMode', draftMode);\r\n if (draftMode) {\r\n // Draft requests need Payload's native preview behavior, so skip the\r\n // route lookup and its database/cache work entirely.\r\n return;\r\n }\r\n // Resolve once before invoking route middleware. This shares the route\r\n // snapshot result across all middleware rather than letting each one\r\n // repeat the internal API request.\r\n const resolution = await localApiGet<RouteResolverResponse>(\r\n `/-route?pathname=${url.pathname}&href=${url.href}&hrefBeforeRedirect=${hrefBeforeRedirect}`,\r\n {},\r\n undefined,\r\n origin\r\n );\r\n const route = resolution?.route;\r\n // console.log('createRouteProxy', route);\r\n if (route) {\r\n let middlewareResponse, i = 0;\r\n // Run in registration order and stop at the first response. Later\r\n // middleware cannot affect a committed rewrite, so short-circuiting\r\n // avoids unnecessary authentication or policy checks.\r\n while (i < middlewares.length && !middlewareResponse) {\r\n const middleware = middlewares[i] as RouteMiddleware;\r\n // console.log('createRouteProxy.middlewares', middlewares.length, typeof middleware === 'function');\r\n if (typeof middleware === 'function') {\r\n middlewareResponse = await middleware({ request, next, route });\r\n if (middlewareResponse) {\r\n return middlewareResponse;\r\n }\r\n }\r\n i++;\r\n }\r\n const nextUrl = getNextUrl(request, route);\r\n console.log('createRouteProxy.Found', pathname, '>', nextUrl.pathname);\r\n // Pass the resolved route as request headers so the internal page can\r\n // render without performing a second route-resolution lookup.\r\n headers.set('x-market', route.market);\r\n headers.set('x-locale', route.locale);\r\n headers.set('x-schema', route.schema);\r\n headers.set('x-id', String(route.page));\r\n headers.set('x-forwarded-pathname', nextUrl.pathname);\r\n const response = NextResponse.rewrite(nextUrl, {\r\n request: {\r\n headers,\r\n },\r\n });\r\n // const response = NextResponse.redirect(url);\r\n return response;\r\n } else {\r\n const parentRoute = resolution?.parent;\r\n // The resolver returns the nearest parent even when no leaf route\r\n // matches. Reusing its market and locale makes the 404 contextual\r\n // without another lookup; defaults cover an entirely unknown path.\r\n const market = parentRoute?.market || defaultMarket;\r\n const locale = parentRoute?.locale || defaultLocale;\r\n const nextUrl = request.nextUrl.clone();\r\n nextUrl.pathname = `/${market}/${locale}/404`;\r\n headers.set('x-market', market);\r\n headers.set('x-locale', locale);\r\n headers.set('x-schema', 'not_found');\r\n headers.set('x-id', '404');\r\n headers.set('x-forwarded-pathname', nextUrl.pathname);\r\n console.log('createRouteProxy.NotFound', pathname);\r\n const response = NextResponse\r\n .rewrite(nextUrl, {\r\n request: {\r\n headers,\r\n },\r\n });\r\n return response;\r\n }\r\n } catch (error: unknown) {\r\n const routeError = error && typeof error === 'object'\r\n ? error as { status?: number; statusText?: string; url?: string }\r\n : {};\r\n\r\n if (routeError.status && routeError.status >= 300 && routeError.status < 400) {\r\n console.log('createRouteProxy.3xx', url.pathname, routeError.status, routeError.statusText);\r\n const nextUrl = request.nextUrl.clone();\r\n // The handler has already validated the redirect target. Redirect the\r\n // browser once so its address bar changes, rather than rewriting a\r\n // route whose canonical URL is different.\r\n nextUrl.pathname = '/';\r\n headers.set('x-forwarded-pathname', nextUrl.pathname);\r\n const response = NextResponse.redirect(nextUrl, 307);\r\n return response;\r\n } else if (routeError.status && routeError.status >= 400 && routeError.status < 500) {\r\n if (routeError.status === 404) {\r\n /**\r\n * A resolver miss is not necessarily a CMS 404: it may be a Next.js\r\n * file-system route such as an API endpoint or static asset. Letting\r\n * Next continue avoids routing those requests through a fallback\r\n * render and keeps their fast native handling intact.\r\n */\r\n // console.log('createRouteProxy.route.notfound', url.pathname);\r\n return;\r\n }\r\n console.log('createRouteProxy.4xx', url.pathname, routeError.status, routeError.statusText);\r\n // Other client errors are terminal CMS outcomes, so render the shared\r\n // 404 page directly instead of issuing a separate client navigation.\r\n const market = defaultMarket;\r\n const locale = defaultLocale;\r\n const nextUrl = request.nextUrl.clone();\r\n nextUrl.pathname = `/${market}/${locale}/404`;\r\n headers.set('x-market', market);\r\n headers.set('x-locale', locale);\r\n headers.set('x-schema', 'not_found');\r\n headers.set('x-id', '404');\r\n headers.set('x-forwarded-pathname', nextUrl.pathname);\r\n console.log('createRouteProxy.NotFound', pathname);\r\n const response = NextResponse\r\n .rewrite(nextUrl, {\r\n request: {\r\n headers,\r\n },\r\n });\r\n return response;\r\n /*\r\n const response = NextResponse.next({\r\n status: routeError.status,\r\n statusText: routeError.statusText,\r\n headers,\r\n });\r\n return response;\r\n */\r\n }\r\n // A resolver failure must not block unrelated Next.js routes. Returning\r\n // undefined delegates to the normal pipeline and avoids masking a\r\n // transient upstream failure with a misleading synthetic response.\r\n console.log('createRouteProxy.error.5xx', url.pathname, routeError.url, routeError.status, routeError.statusText || error);\r\n return;\r\n }\r\n };\r\n}\r\n\r\n/*\r\n\r\nexport const routeInterceptor: Proxy = async function (request: NextRequest, next: NextFetchEvent) {\r\n const middleware = await createRouteProxy();\r\n return await middleware(request, next);\r\n};\r\n\r\n*/\r\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","names":[],"sources":["../../src/server/context.ts","../../src/server/handlers/auth.handler.ts","../../src/server/handlers/captions.handler.ts","../../src/server/handlers/collection.handler.ts","../../src/server/handlers/index.handler.ts","../../src/server/handlers/preview.handler.ts","../../src/server/handlers/registry.handler.ts","../../src/server/handlers/route.handler.ts","../../src/server/handlers/sitemap.handler.ts","../../src/server/handlers/static-params.handler.ts","../../src/server/handlers/vars.handler.ts","../../src/server/lazy.ts","../../src/server/local-api.ts","../../src/server/metadata.ts","../../src/server/mixer.ts","../../src/server/page.ts","../../src/server/utils.ts","../../src/server/utmz.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","names":["getPayload_","headers","getHeaders","getPayload","headers","getHeaders","getPayload","getOrigin","getPayload_","getRoutes","headers","getHeaders"],"sources":["../../src/server/mixer.ts","../../src/server/layout.ts","../../src/server/page.ts","../../src/server/context.ts","../../src/server/handlers/error-response.ts","../../src/server/handlers/auth.handler.ts","../../src/server/handlers/captions.handler.ts","../../src/server/local-api.ts","../../src/server/handlers/collection.handler.ts","../../src/server/handlers/index.handler.ts","../../src/server/handlers/preview.handler.ts","../../src/server/handlers/registry.handler.ts","../../src/server/handlers/route.handler.ts","../../src/server/handlers/sitemap.handler.ts","../../src/server/handlers/static-params.handler.ts","../../src/server/handlers/vars.handler.ts","../../src/server/lazy.ts","../../src/server/metadata.ts","../../src/server/utmz.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","'use server';\r\n\r\nimport { IApp, IAppExtended, ICategory, ILabel, ILayout, ILocale, ILocalizedMenu, IMarket, IRoute, IRouteLink, getRootCategory } from '@websolutespa/bom-core';\r\nimport type { User } from '@websolutespa/payload-plugin-bowl';\r\nimport type { CollectionSlug, GlobalSlug } from 'payload';\r\nimport { getRouteLinkCategory } from '../lib/route';\r\nimport type { MixerContext } from '../types';\r\nimport { buildBaseOptions } from './mixer';\r\nimport type { MixerPayload } from './mixer-payload';\r\n\r\n/**\r\n * Builds the full ILayout object using Payload local API calls.\r\n *\r\n * All payload.find / payload.findGlobal calls pass `context: mixerContext` so\r\n * payload-plugin-bowl can enrich results (hrefs, richText serialisation, etc.).\r\n *\r\n * Collection and global slugs use the payload-plugin-bowl defaults:\r\n * market → 'market' (collection)\r\n * locale → 'locale' (global)\r\n * label → 'label' (collection)\r\n * app → 'app' (global) ← defined in payload-plugin-bowl\r\n * menu → 'menu' (collection)\r\n *\r\n * The route link tree is built from mixerContext.currentRoutes + mixerContext.categories\r\n * using getRouteLinkCategory (pure fn, no store calls) from bom-mixer-models/server.\r\n */\r\nexport async function getLayout<T extends IAppExtended = IAppExtended>(\r\n market: string,\r\n locale: string,\r\n payload: MixerPayload,\r\n user: User,\r\n mixerContext: MixerContext,\r\n draft?: boolean\r\n): Promise<ILayout<T>> {\r\n const base = buildBaseOptions(user, locale, draft);\r\n const findOpts = { ...base, pagination: false, limit: 10000 } as const;\r\n\r\n // markets\r\n const marketsResult = await payload.find({\r\n ...findOpts,\r\n collection: 'market' as CollectionSlug,\r\n context: mixerContext,\r\n });\r\n const markets = marketsResult.docs as unknown as IMarket[];\r\n\r\n // locales (global with an `items` array)\r\n const localeGlobal = await payload.findGlobal({\r\n ...base,\r\n slug: 'locale' as GlobalSlug,\r\n context: mixerContext,\r\n }) as unknown as { items: ILocale[] };\r\n const locales = (localeGlobal?.items ?? []).filter(x => x.isActive);\r\n\r\n // labels\r\n const labelsResult = await payload.find({\r\n ...findOpts,\r\n collection: 'label' as CollectionSlug,\r\n context: mixerContext,\r\n });\r\n const labels = labelsResult.docs as unknown as ILabel[];\r\n\r\n // app global (slug 'app', registered by payload-plugin-bowl)\r\n const app = await payload.findGlobal({\r\n ...base,\r\n slug: 'app' as GlobalSlug,\r\n context: mixerContext,\r\n }) as unknown as IApp<T>;\r\n\r\n // menus\r\n const menusResult = await payload.find({\r\n ...findOpts,\r\n collection: 'menu' as CollectionSlug,\r\n context: mixerContext,\r\n });\r\n\r\n const menu: Record<string, ILocalizedMenu> = {};\r\n (menusResult.docs as unknown as ILocalizedMenu[]).forEach(x => {\r\n menu[String(x.id)] = x;\r\n });\r\n\r\n // route link tree — pure computation from mixer context data (no store calls)\r\n const categories = (mixerContext.categories ?? []) as unknown as ICategory[];\r\n const currentRoutes = (mixerContext.currentRoutes ?? []) as IRoute[];\r\n const rootCategory = getRootCategory(categories);\r\n const treeResult = rootCategory\r\n ? getRouteLinkCategory(locale, currentRoutes, categories, rootCategory, rootCategory)\r\n : undefined;\r\n const tree = Array.isArray(treeResult) ? treeResult[0] : treeResult;\r\n\r\n // derive topLevelRoutes and topLevelHrefs from tree (mirrors layout.service.ts logic)\r\n const firstLevelRoutes = tree?.items ?? [];\r\n const flatTopLevelRoutes: IRouteLink[] = tree ? [tree, ...firstLevelRoutes] : [];\r\n\r\n const topLevelRoutes = flatTopLevelRoutes.reduce((object, routeLink) => {\r\n if (!object[routeLink.schema] || routeLink.schema === String(routeLink.category)) {\r\n object[routeLink.schema] = routeLink;\r\n }\r\n return object;\r\n }, {} as Record<string, IRouteLink>);\r\n\r\n const topLevelHrefs = flatTopLevelRoutes.reduce((object, routeLink) => {\r\n if (routeLink.href && (!object[routeLink.schema] || routeLink.schema === String(routeLink.category))) {\r\n object[routeLink.schema] = routeLink.href;\r\n }\r\n return object;\r\n }, {} as Record<string, string>);\r\n\r\n return {\r\n labels,\r\n locale,\r\n locales,\r\n market,\r\n markets,\r\n app,\r\n menu,\r\n topLevelHrefs,\r\n topLevelRoutes,\r\n tree,\r\n };\r\n}\r\n","'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","'use server';\r\n\r\nimport { headers as getHeaders } from 'next/headers';\r\nimport type { CollectionSlug, SanitizedConfig } from 'payload';\r\nimport { cache } from 'react';\r\nimport { getLabelFromLabels } from '../lib/label';\r\nimport { getLink } from '../lib/link';\r\nimport type { IPageContext, TypedPageContext } from '../types';\r\nimport { getLayout } from './layout';\r\nimport { getPayload } from './mixer';\r\nimport { getPage } from './page';\r\n\r\n/**\r\n * Per-request context store (React.cache ensures a fresh Map per RSC render).\r\n * Safe to use inside Next.js server components — do NOT call this at build time.\r\n */\r\nconst PageContext = cache(() => {\r\n return new Map<string, any>();\r\n});\r\n\r\nexport async function getPageContext<TSlug extends CollectionSlug = CollectionSlug>(): Promise<TypedPageContext<TSlug>> {\r\n return {\r\n layout: PageContext().get('layout'),\r\n page: PageContext().get('page'),\r\n user: PageContext().get('user') || null,\r\n label: PageContext().get('label'),\r\n link: PageContext().get('link'),\r\n } as TypedPageContext<TSlug>;\r\n}\r\n\r\nexport async function setPageContext<TSlug extends CollectionSlug>(data: TypedPageContext<TSlug>) {\r\n const context = PageContext();\r\n for (const key in data) {\r\n context.set(key, data[key as keyof IPageContext]);\r\n }\r\n}\r\n\r\n/**\r\n * Same as createPageContext but without draft mode — used for error/not-found pages\r\n * that should always show published content regardless of draft mode state.\r\n */\r\nexport async function createNotFoundContext<TSlug extends CollectionSlug>(\r\n market: string,\r\n locale: string,\r\n slug: TSlug,\r\n id: string,\r\n config: Promise<SanitizedConfig>,\r\n headers?: Awaited<ReturnType<typeof getHeaders>>\r\n): Promise<TypedPageContext<TSlug>> {\r\n const { payload, user, getContext } = await getPayload({ config, headers });\r\n const context = await getContext(market, locale);\r\n\r\n const layout = await getLayout(market, locale, payload, user, context);\r\n const page = await getPage(slug, id, market, locale, payload, user, context);\r\n\r\n const label = getLabelFromLabels(layout.labels);\r\n const link = (category: string) => getLink(category, layout);\r\n\r\n const pageContext = {\r\n layout,\r\n page,\r\n user,\r\n label,\r\n link,\r\n } as TypedPageContext<TSlug>;\r\n\r\n setPageContext(pageContext);\r\n\r\n return pageContext;\r\n}\r\n\r\n/**\r\n * Initialises the full page context using Payload local API.\r\n *\r\n * Replaces the @websolutespa/bom-next/server createPageContext that goes through the store\r\n * abstraction. All data is fetched directly from Payload; the mixer context\r\n * (routes + categories) is passed to every payload.find call so that\r\n * payload-plugin-bowl can enrich responses.\r\n */\r\nexport async function createPageContext<TSlug extends CollectionSlug>(\r\n market: string,\r\n locale: string,\r\n slug: TSlug,\r\n id: string,\r\n config: Promise<SanitizedConfig>,\r\n headers?: Awaited<ReturnType<typeof getHeaders>>\r\n): Promise<TypedPageContext<TSlug>> {\r\n\r\n // const draft = await draftMode();\r\n const draft = { isEnabled: false };\r\n\r\n const { payload, user, getContext } = await getPayload({ config, headers });\r\n const context = await getContext(market, locale);\r\n\r\n const layout = await getLayout(market, locale, payload, user, context, draft.isEnabled);\r\n const page = await getPage(slug, id, market, locale, payload, user, context, draft.isEnabled);\r\n\r\n const label = getLabelFromLabels(layout.labels);\r\n const link = (category: string) => getLink(category, layout);\r\n\r\n const pageContext = {\r\n layout,\r\n page,\r\n user,\r\n label,\r\n link,\r\n } as TypedPageContext<TSlug>;\r\n\r\n setPageContext(pageContext);\r\n\r\n /*\r\n if (draft.isEnabled) {\r\n draft.disable();\r\n }\r\n */\r\n\r\n return pageContext;\r\n}\r\n\r\n/**\r\n * Layout-only context — no page fetch. Used by RootLayout server components.\r\n */\r\nexport async function createLayoutContext(\r\n market: string,\r\n locale: string,\r\n config: Promise<SanitizedConfig>,\r\n headers?: Awaited<ReturnType<typeof getHeaders>>\r\n) {\r\n const { payload, user, getContext } = await getPayload({ config, headers });\r\n const context = await getContext(market, locale);\r\n\r\n const layout = await getLayout(market, locale, payload, user, context);\r\n\r\n const label = getLabelFromLabels(layout.labels);\r\n const link = (category: string) => getLink(category, layout);\r\n\r\n const pageContext = {\r\n layout,\r\n user,\r\n label,\r\n link,\r\n } as unknown as IPageContext;\r\n\r\n setPageContext(pageContext);\r\n\r\n return pageContext;\r\n}\r\n","type StatusError = {\r\n data?: unknown;\r\n isPublic?: unknown;\r\n message?: unknown;\r\n name?: unknown;\r\n status?: unknown;\r\n statusText?: unknown;\r\n};\r\n\r\ntype PayloadErrorItem = {\r\n data?: unknown;\r\n message: string;\r\n name?: string;\r\n};\r\n\r\nconst getStatus = (error: StatusError): number => {\r\n return typeof error.status === 'number' && error.status >= 400 && error.status < 600 ? error.status : 500;\r\n};\r\n\r\nconst isPublic = (error: StatusError, status: number): boolean => {\r\n return error.isPublic === true || (error.isPublic === undefined && status >= 400 && status < 500);\r\n};\r\n\r\n/**\r\n * Converts errors thrown by Next or Payload handlers into Payload-compatible\r\n * API responses without exposing messages or data from non-public errors.\r\n */\r\nexport function getHandlerErrorResponse(error: unknown): Response {\r\n const statusError = error && typeof error === 'object' ? error as StatusError : {};\r\n const status = getStatus(statusError);\r\n const publicError = isPublic(statusError, status);\r\n const message = publicError && typeof statusError.message === 'string' ?\r\n statusError.message :\r\n publicError && typeof statusError.statusText === 'string' ? statusError.statusText : 'Something went wrong.';\r\n const payloadError: PayloadErrorItem = { message };\r\n\r\n if (publicError && typeof statusError.name === 'string') {\r\n payloadError.name = statusError.name;\r\n }\r\n if (publicError && statusError.data !== null && statusError.data !== undefined) {\r\n payloadError.data = statusError.data;\r\n }\r\n\r\n return Response.json({ errors: [payloadError] }, { status });\r\n}\r\n","import { headers as getHeaders } from 'next/headers';\r\nimport { NextRequest } from 'next/server';\r\nimport { SanitizedConfig } from 'payload';\r\nimport { getPayload } from '../mixer';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\nexport function getAuthMeHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest) {\r\n try {\r\n const headers = await getHeaders();\r\n const { user } = await getPayload({ config, headers });\r\n const roles = (user?.roles || []);\r\n if (roles.includes('user') && 'firstName' in user) {\r\n return Response.json({\r\n id: user.id,\r\n email: user.email,\r\n firstName: user.firstName,\r\n lastName: user.lastName,\r\n }, { status: 200 });\r\n }\r\n return Response.json(null, { status: 200 });\r\n } catch (error) {\r\n console.log('getAuthMeHandler.error', error);\r\n return getHandlerErrorResponse(error);\r\n }\r\n };\r\n}\r\n","import { NextRequest } from 'next/server';\r\nimport { SanitizedConfig } from 'payload';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\nexport function getCaptionsVTT(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest) {\r\n try {\r\n const searchParams = request.nextUrl.searchParams;\r\n const title = searchParams.get('title') || 'Untitled';\r\n const body = /* html */`WEBVTT\r\n\r\n00:00:01.000 --> 00:00:03.000\r\n- This video has no audio.\r\n\r\n${title ? `\r\n00:00:04.000 --> 00:00:06.000\r\n- The title of the video is \"${title}\".\r\n` : ''}`;\r\n return new Response(body, {\r\n status: 200,\r\n headers: {\r\n 'Content-Type': 'text/plain; charset=UTF-8',\r\n 'X-Frame-Options': 'SAMEORIGIN',\r\n 'X-Robots-Tag': 'noindex, follow',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n console.error('getCaptionsVTT.error', error);\r\n return getHandlerErrorResponse(error);\r\n }\r\n };\r\n}\r\n","'use server';\r\n\r\nimport { CollectionSlug, getPayload, GlobalSlug, SanitizedConfig } from 'payload';\r\n\r\nexport async function getLocalApi(config: Promise<SanitizedConfig>, slug: string): Promise<any> {\r\n const payload = await getPayload({ config });\r\n const collectionSlugs = payload.config.collections.map(x => x.slug);\r\n const globalSlugs = payload.config.globals.map(x => x.slug);\r\n const keys = [\r\n ...collectionSlugs,\r\n ...globalSlugs,\r\n ];\r\n keys.sort();\r\n if (collectionSlugs.includes(slug as CollectionSlug)) {\r\n const collectionSlug = slug as CollectionSlug;\r\n return {\r\n findMany: async (params: Parameters<typeof payload.find>) => {\r\n const response = await payload.find({\r\n ...(params as any),\r\n collection: collectionSlug,\r\n pagination: false,\r\n limit: 10000,\r\n overrideAccess: false,\r\n });\r\n return response.docs;\r\n },\r\n findPaged: async (params: Parameters<typeof payload.find>) => {\r\n const response = await payload.find({\r\n ...(params as any),\r\n collection: collectionSlug,\r\n overrideAccess: false,\r\n });\r\n return response;\r\n },\r\n findOne: async (params: Parameters<typeof payload.findByID>) => {\r\n return await payload.findByID({\r\n id: '',\r\n ...params,\r\n collection: collectionSlug,\r\n disableErrors: true,\r\n overrideAccess: false,\r\n });\r\n },\r\n };\r\n } else if (globalSlugs.includes(slug as GlobalSlug)) {\r\n const globalSlug = slug as GlobalSlug;\r\n return {\r\n findMany: async (params: Parameters<typeof payload.findGlobal>) => {\r\n return await payload.findGlobal({\r\n slug: globalSlug,\r\n ...params,\r\n overrideAccess: false,\r\n });\r\n },\r\n findPaged: async (params: Parameters<typeof payload.find>) => {\r\n throw 'Not implemented';\r\n },\r\n findOne: async (params: Parameters<typeof payload.findByID>) => {\r\n throw 'Not implemented';\r\n },\r\n };\r\n }\r\n}\r\n","\r\nimport { qsDeserialize } from '@websolutespa/bom-core';\r\nimport { headers as getHeaders } from 'next/headers';\r\nimport { CollectionSlug, GlobalSlug, SanitizedConfig } from 'payload';\r\nimport { getLocalApi } from '../local-api';\r\nimport { getPayload } from '../mixer';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\n// find a specific document by id or\r\n// find paginated documents\r\nexport function collectionGetHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: Request, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ collections: string[]; }>;\r\n }) {\r\n try {\r\n const headers = await getHeaders();\r\n const { payload, user, getContext } = await getPayload({ config, headers });\r\n const collectionSlugs = payload.config.collections.map(x => x.slug);\r\n const globalSlugs = payload.config.globals.map(x => x.slug);\r\n const keys = [\r\n ...collectionSlugs,\r\n ...globalSlugs,\r\n ];\r\n keys.sort();\r\n const { collections } = await getParams;\r\n if (!Array.isArray(collections) || collections?.length === 0) {\r\n console.error('storeHandler.collectionGet', 'method not allowed', collections);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const slug = collections[0] as CollectionSlug | GlobalSlug;\r\n const id: string = collections[1];\r\n const search = new URL(request.url).search;\r\n const params = qsDeserialize(search);\r\n const context = params.market && params.locale ? await getContext(params.market, params.locale) : undefined;\r\n if (!keys.includes(slug)) {\r\n console.error('storeHandler.collectionGet', 'keys', slug);\r\n console.error('storeHandler.collectionGet', 'method not allowed', slug);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const localApi = await getLocalApi(config, slug);\r\n if (id) {\r\n // find by id\r\n const item = await localApi.findOne({\r\n ...params,\r\n id,\r\n context,\r\n user,\r\n });\r\n if (item) {\r\n return Response.json(item);\r\n } else {\r\n return new Response('not found', {\r\n status: 404,\r\n statusText: 'not found',\r\n });\r\n }\r\n } else if (String(params.pagination) === 'true') {\r\n // find paginated documents\r\n const items = await localApi.findPaged({\r\n ...params,\r\n context,\r\n user,\r\n });\r\n return Response.json(items);\r\n } else {\r\n // find many\r\n const items = await localApi.findMany({\r\n ...params,\r\n context,\r\n user,\r\n });\r\n return Response.json(items);\r\n }\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.collectionGet.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\n// create a new document + post route\r\nexport function collectionPostHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: Request, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ collections: string[]; }>;\r\n }) {\r\n try {\r\n const { payload } = await getPayload({ config });\r\n const keys = [\r\n ...payload.config.collections.map(x => x.slug),\r\n ...payload.config.globals.map(x => x.slug),\r\n ];\r\n keys.sort();\r\n const { collections } = await getParams;\r\n if (!Array.isArray(collections) || collections.length !== 1) {\r\n console.error('method not allowed', collections);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const slug = collections[0] as CollectionSlug | GlobalSlug;\r\n if (!keys.includes(slug)) {\r\n console.error('storeHandler.collectionGet', 'method not allowed', slug);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n // api post route pathname\r\n /*\r\n if (slug === 'route') {\r\n return routePost(store, request);\r\n }\r\n */\r\n // !!! todo post create\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.collectionPost.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\n// update a document by id\r\nexport function collectionPatchHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: Request, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ collections: string[]; }>;\r\n }) {\r\n try {\r\n const { payload } = await getPayload({ config });\r\n const keys = [\r\n ...payload.config.collections.map(x => x.slug),\r\n ...payload.config.globals.map(x => x.slug),\r\n ];\r\n keys.sort();\r\n const { collections } = await getParams;\r\n if (!Array.isArray(collections) || collections.length !== 2) {\r\n console.error('method not allowed', collections);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const slug = collections[0] as CollectionSlug | GlobalSlug;\r\n if (!keys.includes(slug)) {\r\n console.error('storeHandler.collectionGet', 'method not allowed', slug);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n // !!! todo patch update\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.collectionPatch.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\n// delete an existing document by id\r\nexport function collectionDeleteHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: Request, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ collections: string[]; }>;\r\n }) {\r\n try {\r\n const { payload } = await getPayload({ config });\r\n const keys = [\r\n ...payload.config.collections.map(x => x.slug),\r\n ...payload.config.globals.map(x => x.slug),\r\n ];\r\n keys.sort();\r\n const { collections } = await getParams;\r\n if (!Array.isArray(collections) || collections.length !== 2) {\r\n console.error('method not allowed', collections);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const slug = collections[0] as CollectionSlug | GlobalSlug;\r\n if (!keys.includes(slug)) {\r\n console.error('storeHandler.collectionGet', 'method not allowed', slug);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n const id: string = collections[1];\r\n // !!! todo delete\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.collectionDelete.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n","import { defaultLocale, defaultMarket } from '@websolutespa/bom-core';\r\nimport { getPayload, SanitizedConfig } from 'payload';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\nexport function indexGetHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: Request) {\r\n try {\r\n const payload = await getPayload({ config });\r\n const keys = [\r\n ...payload.config.collections.map(x => x.slug),\r\n ...payload.config.globals.map(x => x.slug),\r\n ];\r\n keys.sort();\r\n const market = defaultMarket;\r\n const locale = defaultLocale;\r\n if (!Array.isArray(keys) || keys?.length === 0) {\r\n console.error('apiHome.collectionGet', 'collections not found', keys);\r\n return new Response('method not allowed', {\r\n status: 405,\r\n statusText: 'method not allowed',\r\n });\r\n }\r\n return new Response(`\r\n <html>\r\n <head>\r\n <title>REST Api</title>\r\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n <style type=\"text/css\">\r\n html {\r\n padding: 0;\r\n background: #09090A;\r\n color: #fefefe;\r\n }\r\n body {\r\n padding: 15px;\r\n font-family: Inter,-apple-system,'Helvetica Neue','Segoe UI',Roboto,Arial,'Noto Sans',sans-serif;\r\n font-size: 13px;\r\n background: #09090A;\r\n color: #fefefe;\r\n }\r\n .container {\r\n margin: 0 auto;\r\n max-width: 1280px;\r\n }\r\n a {\r\n color: #fefefe;\r\n text-decoration: none;\r\n }\r\n a:visited {\r\n color: #9e9e9e;\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n table {\r\n width: 100%;\r\n margin: 10px 0;\r\n border: none;\r\n border-collapse: collapse;\r\n }\r\n td,\r\n th {\r\n text-align: left;\r\n font-size: 12px;\r\n padding: 3px;\r\n }\r\n th:not(:last-child),\r\n td:not(:last-child) {\r\n padding-right: 30px;\r\n }\r\n thead th {\r\n border-bottom: 1px solid #0e0e0f;\r\n }\r\n #table tr:nth-child(odd) td {\r\n background-color: #0e0e0f;\r\n }\r\n #table tbody tr:hover td {\r\n background-color: #1A1A1B;\r\n }\r\n #table tbody tr:hover td,\r\n #table tbody tr:hover td a {\r\n color: #fefefe;\r\n }\r\n .wysiwyg {\r\n margin: 0;\r\n padding: 0 0 10px 0;\r\n line-height: 1.2em;\r\n }\r\n .wysiwyg a {\r\n color: #00ea4e;\r\n font-weight: 600;\r\n }\r\n .wysiwyg a:visited {\r\n color: #00ea4e;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"container\">\r\n <h1>REST API</h1>\r\n <p class=\"wysiwyg\">\r\n This is the REST Api generated by <a href=\"https://github.com/websolutespa/bom\" target=\"_blank\" rel=\"noopener\">Mixer</a>.\r\n </p>\r\n <p class=\"wysiwyg\">\r\n It contains a list of all the generic local api CRUD handlers of Mixer app. <br />\r\n All methods should be called with market and locale parameters.\r\n </p>\r\n <table id=\"table\" cellpadding=\"3\">\r\n <thead>\r\n <tr>\r\n <th width=\"150px\">Method</th>\r\n <th width=\"150px\">Collection</th>\r\n <th>Endpoint</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${keys.map(c => (`\r\n <tr>\r\n <td>GET, POST, PATCH</td>\r\n <td>${c}</td>\r\n <td><a href=\"/api/${c}?market=${market}&locale=${locale}\" target=\"_blank\">/api/${c}</a></td>\r\n </tr>\r\n <tr>\r\n <td>GET, DELETE</td>\r\n <td>${c}</td>\r\n <td><a href=\"/api/${c}/1?market=${market}&locale=${locale}\" target=\"_blank\">/api/${c}/{id}</a></td>\r\n </tr>\r\n `)).join('\\n')}\r\n </tbody>\r\n </table>\r\n </div>\r\n </body>\r\n `, {\r\n headers: {\r\n 'Content-Type': 'text/html; charset=UTF-8',\r\n 'X-Frame-Options': 'SAMEORIGIN',\r\n 'X-Robots-Tag': 'noindex, follow',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.indexGet.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n","import { draftMode } from 'next/headers';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\n\r\n// http://localhost:3000/api/-preview?marketId=ww&localeId=it&templateId=homepage&documentId=6a6b33177d8f191df34b33a3\r\n\r\nexport async function previewHandler(request: NextRequest) {\r\n const { searchParams } = new URL(request.url);\r\n const params = Object.fromEntries(searchParams) as {\r\n marketId: string;\r\n localeId: string;\r\n templateId: string;\r\n documentId: string;\r\n _status: 'published' | 'draft';\r\n _live: string;\r\n _token: string;\r\n };\r\n /*\r\n if (params.secret !== process.env.MIXER_SECRET) {\r\n return new Response('Invalid token', { status: 401 })\r\n }\r\n */\r\n /*\r\n const headersList = await headers()\r\n const userAgent = headersList.get('user-agent')\r\n */\r\n const { marketId, localeId, templateId, documentId, _status, _live } = params;\r\n const destination = `/${marketId}/${localeId}/${templateId}/${documentId}${_live ? '?_live=true' : ''}`;\r\n /*\r\n response.setPreviewData({ _status });\r\n response.setDraftMode({ enable: true });\r\n response.redirect(307, destination);\r\n redirect(destination, RedirectType.replace);\r\n */\r\n const draft = await draftMode();\r\n draft.enable();\r\n const path = `${process.env.NEXT_PUBLIC_URL}${destination}`;\r\n return NextResponse.redirect(path, {\r\n status: 303,\r\n });\r\n /*\r\n return NextResponse.redirect(path, {\r\n status: 303,\r\n });\r\n */\r\n /*\r\n return new Response(null, {\r\n status: 303,\r\n headers: {\r\n Location: path,\r\n },\r\n });\r\n */\r\n /*\r\n redirect(path);\r\n return;\r\n */\r\n /*\r\n return NextResponse.json({\r\n destination: destination,\r\n permanent: false\r\n });\r\n */\r\n}\r\n","import { NextRequest } from 'next/server';\r\nimport { readdir, readFile, stat } from 'node:fs/promises';\r\nimport { basename, dirname, extname, join, relative, resolve } from 'node:path';\r\n\r\nconst REGISTRY_SCHEMA = 'https://ui.shadcn.com/schema/registry.json';\r\nconst REGISTRY_ITEM_SCHEMA = 'https://ui.shadcn.com/schema/registry-item.json';\r\nconst SOURCE_EXTENSIONS = new Set(['.css', '.json', '.ts', '.tsx']);\r\nconst PUBLISHED_DIRECTORIES = new Set(['components', 'examples', 'hooks', 'lazy', 'lib', 'sections', 'theme']);\r\nconst SHADCN_COMPONENTS = new Set([\r\n 'accordion', 'alert-dialog', 'alert', 'aspect-ratio', 'avatar', 'badge', 'breadcrumb', 'calendar', 'card',\r\n 'carousel', 'chart', 'checkbox', 'collapsible', 'combobox', 'command', 'context-menu', 'dialog', 'drawer',\r\n 'dropdown-menu', 'form', 'hover-card', 'input', 'input-otp', 'label', 'menubar', 'navigation-menu',\r\n 'pagination', 'popover', 'progress', 'radio-group', 'resizable', 'scroll-area', 'select', 'separator', 'sheet',\r\n 'sidebar', 'skeleton', 'slider', 'sonner', 'switch', 'table', 'tabs', 'textarea', 'toast', 'toggle',\r\n 'toggle-group', 'tooltip',\r\n]);\r\n\r\ntype RegistryFile = {\r\n path: string;\r\n content: string;\r\n type: 'registry:ui' | 'registry:lib' | 'registry:hook' | 'registry:style' | 'registry:file';\r\n target: string;\r\n};\r\n\r\ntype RegistryCatalogFile = Omit<RegistryFile, 'content'>;\r\n\r\ntype RegistryItem = {\r\n $schema: typeof REGISTRY_ITEM_SCHEMA;\r\n name: string;\r\n type: 'registry:ui';\r\n title: string;\r\n dependencies?: string[];\r\n registryDependencies?: string[];\r\n files: RegistryFile[];\r\n};\r\n\r\ntype RegistryCatalogItem = Omit<RegistryItem, 'files'> & {\r\n files: RegistryCatalogFile[];\r\n};\r\n\r\ntype SourceFile = { absolutePath: string; relativePath: string };\r\n\r\nfunction toKebabCase(value: string) {\r\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/[._\\s]+/g, '-').toLowerCase();\r\n}\r\n\r\nfunction titleFromName(name: string) {\r\n return name.replace(/(^|[-_])(\\w)/g, (_, __, character: string) => character.toUpperCase());\r\n}\r\n\r\nfunction packageName(specifier: string) {\r\n return specifier.startsWith('@') ? specifier.split('/').slice(0, 2).join('/') : specifier.split('/')[0];\r\n}\r\n\r\nfunction getOrigin(request: NextRequest) {\r\n return process.env.NEXT_PUBLIC_URL?.replace(/\\/$/, '') || request.nextUrl.origin;\r\n}\r\n\r\nasync function directoryExists(directory: string) {\r\n try {\r\n return (await stat(directory)).isDirectory();\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nasync function getUiSourceDirectory() {\r\n if (process.env.UI_REGISTRY_SOURCE_DIR) {\r\n const configuredPath = resolve(process.env.UI_REGISTRY_SOURCE_DIR);\r\n if (await directoryExists(configuredPath)) return configuredPath;\r\n throw new Error(`UI_REGISTRY_SOURCE_DIR does not exist: ${configuredPath}`);\r\n }\r\n\r\n let currentDirectory = process.cwd();\r\n while (dirname(currentDirectory) !== currentDirectory) {\r\n const candidate = join(currentDirectory, 'packages', 'ui', 'src');\r\n if (await directoryExists(candidate)) return candidate;\r\n currentDirectory = dirname(currentDirectory);\r\n }\r\n throw new Error('Unable to find packages/ui/src. Set UI_REGISTRY_SOURCE_DIR to its absolute path.');\r\n}\r\n\r\nasync function getSourceFiles(directory: string, sourceDirectory = directory): Promise<SourceFile[]> {\r\n const entries = await readdir(directory, { withFileTypes: true });\r\n const files = await Promise.all(entries.map(async entry => {\r\n const absolutePath = join(directory, entry.name);\r\n if (entry.isDirectory()) return getSourceFiles(absolutePath, sourceDirectory);\r\n if (!SOURCE_EXTENSIONS.has(extname(entry.name)) || entry.name.endsWith('.d.ts') || /\\.(test|spec)\\.[^.]+$/.test(entry.name)) return [];\r\n return [{ absolutePath, relativePath: entry.name }];\r\n }));\r\n\r\n return files.flat().map(file => ({\r\n ...file,\r\n relativePath: relative(sourceDirectory, file.absolutePath).replaceAll('\\\\', '/'),\r\n }));\r\n}\r\n\r\nfunction getImportSpecifiers(source: string) {\r\n return [...source.matchAll(/(?:import|export)\\s+(?:type\\s+)?(?:[\\s\\S]*?\\s+from\\s+)?['\"]([^'\"]+)['\"]/g)]\r\n .map(match => match[1]);\r\n}\r\n\r\nfunction resolveSourceImport(sourceDirectory: string, sourceFile: string, specifier: string, sourceFiles: Map<string, SourceFile>) {\r\n let candidate: string | undefined;\r\n if (specifier.startsWith('@app/ui/')) candidate = specifier.slice('@app/ui/'.length);\r\n if (specifier.startsWith('.')) candidate = relative(sourceDirectory, resolve(dirname(sourceFile), specifier)).replaceAll('\\\\', '/');\r\n if (!candidate) return undefined;\r\n\r\n const normalizedCandidate = candidate.replace(/^\\.\\//, '');\r\n return sourceFiles.get(normalizedCandidate) ||\r\n sourceFiles.get(`${normalizedCandidate}.ts`) || sourceFiles.get(`${normalizedCandidate}.tsx`) ||\r\n sourceFiles.get(`${normalizedCandidate}/index.ts`) || sourceFiles.get(`${normalizedCandidate}/index.tsx`);\r\n}\r\n\r\nfunction rewriteUiImports(source: string, sourceFile: SourceFile, sourceDirectory: string, sourceFiles: Map<string, SourceFile>) {\r\n return source.replace(/(['\"])(@app\\/ui\\/[^'\"]+|\\.\\.?\\/[^'\"]+)\\1/g, (match, quote: string, specifier: string) => {\r\n const importedFile = resolveSourceImport(sourceDirectory, sourceFile.absolutePath, specifier, sourceFiles);\r\n return importedFile ? `${quote}${getImportPath(importedFile.relativePath)}${quote}` : match;\r\n });\r\n}\r\n\r\nfunction getImportPath(relativePath: string) {\r\n const extensionlessPath = relativePath.replace(/\\.(tsx?|mts|cts)$/, '');\r\n if (extensionlessPath.startsWith('components/')) return `@/components/ui/${extensionlessPath.slice('components/'.length)}`;\r\n if (extensionlessPath.startsWith('hooks/')) return `@/hooks/${extensionlessPath.slice('hooks/'.length)}`;\r\n if (extensionlessPath.startsWith('lib/')) return `@/lib/${extensionlessPath.slice('lib/'.length)}`;\r\n return `@/components/${extensionlessPath}`;\r\n}\r\n\r\nfunction getTargetPath(relativePath: string) {\r\n if (relativePath.startsWith('components/')) return `@ui/${relativePath.slice('components/'.length)}`;\r\n if (relativePath.startsWith('hooks/')) return `@hooks/${relativePath.slice('hooks/'.length)}`;\r\n if (relativePath.startsWith('lib/')) return `@lib/${relativePath.slice('lib/'.length)}`;\r\n return `@components/${relativePath}`;\r\n}\r\n\r\nfunction getRegistryFileType(relativePath: string): RegistryFile['type'] {\r\n if (relativePath.startsWith('components/')) return 'registry:ui';\r\n if (relativePath.startsWith('hooks/')) return 'registry:hook';\r\n if (relativePath.startsWith('theme/')) return 'registry:style';\r\n if (extname(relativePath) === '.json') return 'registry:file';\r\n return 'registry:lib';\r\n}\r\n\r\nfunction isPublishedFile(file: SourceFile) {\r\n const [directory] = file.relativePath.split('/');\r\n return PUBLISHED_DIRECTORIES.has(directory) && !/(^|\\/)index\\.[^.]+$/.test(file.relativePath);\r\n}\r\n\r\nfunction getRegistryItemName(file: SourceFile) {\r\n const [directory, ...path] = file.relativePath.split('/');\r\n const filename = path.join('/').replace(extname(file.relativePath), '');\r\n const name = toKebabCase(filename.replaceAll('/', '-'));\r\n return directory === 'components' ? name : `${directory}-${name}`;\r\n}\r\n\r\nasync function createRegistryCatalog(sourceDirectory: string, origin: string) {\r\n const files = (await getSourceFiles(sourceDirectory)).filter(file => PUBLISHED_DIRECTORIES.has(file.relativePath.split('/')[0]));\r\n const filesByRelativePath = new Map(files.map(file => [file.relativePath, file]));\r\n const entries = new Map(files.filter(isPublishedFile).map(file => [getRegistryItemName(file), file]));\r\n const entryNamesByPath = new Map([...entries].map(([name, file]) => [file.relativePath, name]));\r\n const includedItems = new Set([...entries].filter(([name, file]) =>\r\n !file.relativePath.startsWith('components/') || name === 'button' || !SHADCN_COMPONENTS.has(name)\r\n ).map(([name]) => name));\r\n\r\n async function getItem(name: string): Promise<RegistryItem | undefined> {\r\n const entry = entries.get(name);\r\n if (!entry || !includedItems.has(name)) return undefined;\r\n\r\n const filesToInclude = new Map<string, SourceFile>();\r\n const externalDependencies = new Set<string>();\r\n const registryDependencies = new Set<string>();\r\n const pendingFiles = [entry];\r\n\r\n while (pendingFiles.length) {\r\n const file = pendingFiles.pop()!;\r\n if (filesToInclude.has(file.relativePath)) continue;\r\n filesToInclude.set(file.relativePath, file);\r\n const source = await readFile(file.absolutePath, 'utf8');\r\n\r\n for (const specifier of getImportSpecifiers(source)) {\r\n const localFile = resolveSourceImport(sourceDirectory, file.absolutePath, specifier, filesByRelativePath);\r\n const dependencyName = localFile && entryNamesByPath.get(localFile.relativePath);\r\n if (localFile?.relativePath.startsWith('components/')) {\r\n const componentName = toKebabCase(basename(localFile.relativePath, extname(localFile.relativePath)));\r\n if (dependencyName !== name) {\r\n registryDependencies.add(includedItems.has(componentName) ? `${origin}/r/${componentName}.json` : componentName);\r\n }\r\n } else if (localFile && dependencyName && dependencyName !== name && includedItems.has(dependencyName)) {\r\n registryDependencies.add(`${origin}/r/${dependencyName}.json`);\r\n } else if (localFile) {\r\n pendingFiles.push(localFile);\r\n } else if (!specifier.startsWith('.') && !specifier.startsWith('@app/ui/') && !specifier.startsWith('node:') && specifier !== 'react' && specifier !== 'react-dom') {\r\n externalDependencies.add(packageName(specifier));\r\n }\r\n }\r\n }\r\n\r\n const registryFiles = await Promise.all([...filesToInclude.values()].sort((left, right) => left.relativePath.localeCompare(right.relativePath)).map(async file => ({\r\n path: file.relativePath,\r\n content: rewriteUiImports(await readFile(file.absolutePath, 'utf8'), file, sourceDirectory, filesByRelativePath),\r\n type: getRegistryFileType(file.relativePath),\r\n target: getTargetPath(file.relativePath),\r\n })));\r\n\r\n return {\r\n $schema: REGISTRY_ITEM_SCHEMA,\r\n name,\r\n type: 'registry:ui',\r\n title: titleFromName(name),\r\n ...(externalDependencies.size && { dependencies: [...externalDependencies].sort() }),\r\n ...(registryDependencies.size && { registryDependencies: [...registryDependencies].sort() }),\r\n files: registryFiles,\r\n };\r\n }\r\n\r\n async function getCatalogItem(name: string): Promise<RegistryCatalogItem | undefined> {\r\n const item = await getItem(name);\r\n if (!item) return undefined;\r\n return {\r\n ...item,\r\n files: item.files.map(file => ({\r\n path: file.path,\r\n type: file.type,\r\n target: file.target,\r\n })),\r\n };\r\n }\r\n\r\n return { items: includedItems, getCatalogItem, getItem };\r\n}\r\n\r\nfunction jsonResponse(body: unknown, status = 200) {\r\n return Response.json(body, {\r\n status,\r\n headers: { 'X-Frame-Options': 'SAMEORIGIN', 'X-Robots-Tag': 'noindex, follow' },\r\n });\r\n}\r\n\r\nexport function getRegistry() {\r\n return async function (request: NextRequest) {\r\n const sourceDirectory = await getUiSourceDirectory();\r\n const catalog = await createRegistryCatalog(sourceDirectory, getOrigin(request));\r\n const items = (await Promise.all([...catalog.items].sort().map(name => catalog.getCatalogItem(name)))).filter(Boolean);\r\n return jsonResponse({ $schema: REGISTRY_SCHEMA, name: 'bom-ui', homepage: getOrigin(request), items });\r\n };\r\n}\r\n\r\nexport function getRegistryItem() {\r\n return async function (request: NextRequest, { params: getParams }: { params: Promise<{ slug: string[] }> }) {\r\n const { slug } = await getParams;\r\n const name = slug.at(-1)?.replace(/\\.json$/, '');\r\n if (!name) return jsonResponse({ error: 'Registry item name is required.' }, 404);\r\n\r\n const sourceDirectory = await getUiSourceDirectory();\r\n const item = await (await createRegistryCatalog(sourceDirectory, getOrigin(request))).getItem(name);\r\n return item ? jsonResponse(item) : jsonResponse({ error: `Registry item not found: ${name}` }, 404);\r\n };\r\n}\r\n","import { IRedirect, IRoute, qsDeserialize } from '@websolutespa/bom-core';\r\nimport { getRoutes, getRouteSnapshot, sortCollection, whereCollection } from '@websolutespa/payload-plugin-bowl';\r\nimport { ResponseNotFound, ResponseSuccess } from '@websolutespa/payload-utils/server';\r\nimport { NextRequest } from 'next/server';\r\nimport { createPayloadRequest, getPayload as getPayload_, PayloadRequest, SanitizedConfig } from 'payload';\r\nimport { guest } from '../../lib/const';\r\nimport { sanitizeHref, sanitizeRedirectFrom, sanitizeRedirectTo, sanitizeRedirectUrl } from '../../lib/utils';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\n/**\r\n * Creates the internal `/-route` GET handler used by middleware to resolve CMS\r\n * paths, route schemas, and redirects before a page is rendered.\r\n *\r\n * One Payload request is created per incoming API request so authentication and\r\n * query context are shared by every route operation. The route service then\r\n * reuses its snapshot cache, which avoids rebuilding the complete route graph\r\n * for repeated market, locale, and access contexts.\r\n */\r\nexport function getRouteHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest) {\r\n try {\r\n const searchParams = request.nextUrl.searchParams;\r\n const pathname = searchParams.get('pathname') || undefined;\r\n const href = searchParams.get('href') || undefined;\r\n const hrefBeforeRedirect = searchParams.get('hrefBeforeRedirect') || undefined;\r\n const schema = searchParams.get('schema') || undefined;\r\n const market = searchParams.get('market') || undefined;\r\n const locale = searchParams.get('locale') || undefined;\r\n const payload = await getPayload_({ config });\r\n const req: PayloadRequest = await createPayloadRequest({\r\n config,\r\n request,\r\n });\r\n req.payload = payload;\r\n req.user = guest as never;\r\n if (schema && market && locale) {\r\n // Schema lookups are used by middleware such as login protection. They\r\n // resolve directly from the snapshot instead of enumerating routes.\r\n req.query = { locale, market };\r\n const route = (await getRouteSnapshot(req)).getSchema(schema, market, locale);\r\n return route ? ResponseSuccess({ route }) : ResponseNotFound();\r\n }\r\n // console.log('routes.length', routes.length);\r\n if (pathname && href) {\r\n // Resolve the public path first. A successful result bypasses the\r\n // redirect collection query, the costliest branch for normal traffic.\r\n const resolution = (await getRouteSnapshot(req)).resolve(pathname);\r\n /*\r\n console.log('pathname', pathname);\r\n console.log('href', href);\r\n console.log('hrefBeforeRedirect', hrefBeforeRedirect);\r\n */\r\n const route = resolution.route;\r\n // console.log('route', route, 'pathname', pathname);\r\n if (route !== undefined) {\r\n return ResponseSuccess({\r\n parent: resolution.parent,\r\n route: {\r\n ...route,\r\n ...(resolution.splat ? { splat: resolution.splat } : {}),\r\n },\r\n });\r\n } else {\r\n const url = new URL(href);\r\n const urlBeforeRedirect = hrefBeforeRedirect ? new URL(hrefBeforeRedirect) : null;\r\n const sanitizedHref = sanitizeHref(url, urlBeforeRedirect);\r\n // Query only active redirects and request depth 0 because matching\r\n // needs scalar fields only; this minimizes Payload serialization.\r\n const { payload } = req;\r\n const payloadResponse = await payload.find({\r\n collection: 'redirect',\r\n where: {\r\n isActive: {\r\n equals: true,\r\n },\r\n },\r\n sort: 'order',\r\n depth: 0,\r\n limit: 10000,\r\n pagination: false,\r\n req,\r\n overrideAccess: true,\r\n });\r\n let redirects = (payloadResponse.docs ? payloadResponse.docs : []) as unknown as IRedirect[];\r\n redirects = redirects.map(x => ({\r\n ...x,\r\n from: sanitizeRedirectFrom(x.from, url, urlBeforeRedirect),\r\n to: sanitizeRedirectTo(x.to),\r\n }));\r\n // redirects.sort((a, b) => a.order - b.order);\r\n // exact match redirect resolver\r\n const exactMatchResolver = (redirect: IRedirect) => {\r\n const status: number = parseInt(redirect.status) || 307;\r\n if (status < 400) {\r\n const redirectUrl = sanitizeRedirectUrl(redirect.to, url);\r\n // console.log('>>>>>>>>>> findRoute exactMatchResolver', status, redirectUrl, redirect.to);\r\n return Response.json({ redirectUrl }, { status });\r\n } else {\r\n return Response.json('gone', { status });\r\n }\r\n };\r\n // check exact match redirects\r\n const exactMatchRedirect = redirects.find(x => x.from === sanitizedHref);\r\n if (exactMatchRedirect !== undefined) {\r\n // Exact matching avoids compiling patterns for the common case.\r\n return exactMatchResolver(exactMatchRedirect);\r\n }\r\n // pattern match redirect resolver\r\n const patternMatchResolver = (redirect: IRedirect) => {\r\n const status: number = parseInt(redirect.status) || 307;\r\n if (status < 400) {\r\n const regexp = new RegExp(redirect.from);\r\n let i = 0;\r\n let redirectUrl = (redirect.to as string).replace(/\\*/g, (...rest) => {\r\n return `$${++i}`;\r\n });\r\n redirectUrl = sanitizedHref.replace(regexp, redirectUrl);\r\n // console.log('>>>>>>>>>> findRoute patternMatchResolver', status, redirectUrl, redirect.to);\r\n return Response.json({ redirectUrl }, { status });\r\n } else {\r\n return Response.json('gone', { status });\r\n }\r\n };\r\n // check redirects by pattern\r\n redirects.forEach(x => {\r\n let expression = x.from;\r\n // wrapping catchall in (.*)\r\n expression = expression.replace(/\\*(?!\\))/g, '(.*)');\r\n // wrapping expression in ^...$\r\n expression = `^${expression.replace(/(^\\^)|(\\$$)/g, '')}$`;\r\n x.from = expression;\r\n });\r\n // check if a regex pattern redirect does match\r\n const firstMatch = redirects.find(x => sanitizedHref.match(x.from));\r\n // console.log('>>>>>>>>>> findRoute firstMatch', firstMatch);\r\n if (firstMatch) {\r\n return patternMatchResolver(firstMatch);\r\n }\r\n // console.error('not found', collection);\r\n // Preserve the nearest parent so middleware can render a localized\r\n // 404 without a second snapshot lookup.\r\n return ResponseSuccess({ parent: resolution.parent });\r\n }\r\n } else {\r\n // The collection branch serves management/list callers. Apply in-memory\r\n // filtering after the cached route graph is built, avoiding duplicate\r\n // collection queries for each filter or sort combination.\r\n const query = qsDeserialize(decodeURIComponent(searchParams.toString()));\r\n req.query = query;\r\n const routes = await getRoutes(req);\r\n let items = await whereCollection<IRoute>(routes, query.where);\r\n items = await sortCollection(items, query.sort);\r\n return ResponseSuccess(items);\r\n // return ResponseBadRequest();\r\n }\r\n } catch (error: unknown) {\r\n console.error('routeGetHandler.error', error);\r\n return getHandlerErrorResponse(error);\r\n }\r\n };\r\n}\r\n","import { IRoute, IRouteCanonical, defaultLocale, defaultMarket, eachMarketLocale } from '@websolutespa/bom-core';\r\nimport { NextRequest } from 'next/server';\r\nimport { SanitizedConfig } from 'payload';\r\nimport { getPayload } from '../mixer';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\nconst origin = process.env.NEXT_PUBLIC_URL || '';\r\n\r\nexport type ISiteMap = {\r\n id: string;\r\n updatedAt?: string | Date;\r\n};\r\n\r\nexport function getSiteMapIndex(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest) {\r\n try {\r\n const { getContext } = await getPayload({ config });\r\n const { markets, locales, routes } = await getContext(defaultMarket, defaultLocale);\r\n const sitemaps: ISiteMap[] = [];\r\n const getTime = (date: Date | string | undefined) => {\r\n return typeof date !== 'undefined' ? (typeof date === 'string' ? new Date(date) : date).getTime() : 0;\r\n };\r\n eachMarketLocale(markets, locales, (market, locale, markets, locales) => {\r\n const sitemapRoutes = routes.filter(x => x.market === market.id && x.locale === locale.id);\r\n sitemapRoutes.sort((a, b) => getTime(a.updatedAt) - getTime(b.updatedAt));\r\n // console.log(sitemapRoutes.shift(), sitemapRoutes.pop());\r\n sitemaps.push({\r\n id: `/${market.id}/${locale.id}/sitemap.xml`,\r\n updatedAt: sitemapRoutes.length > 0 ? sitemapRoutes[sitemapRoutes.length - 1]!.updatedAt : undefined,\r\n });\r\n });\r\n const body = `<?xml version=\"1.0\" encoding=\"UTF-8\"?><?xml-stylesheet type=\"text/xsl\" href=\"${origin}/sitemap.xsl\"?>\r\n<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n${sitemaps.map(sitemap => `\r\n <sitemap>\r\n <loc>${escapeHtml(encodeURI(`${origin}${sitemap.id}`))}</loc>${sitemap.updatedAt ? `\r\n <lastmod>${escapeHtml(String(sitemap.updatedAt))}</lastmod>` : ''}\r\n </sitemap>\r\n`).join('')}\r\n</sitemapindex>`;\r\n return new Response(body, {\r\n status: 200,\r\n headers: {\r\n 'Content-Type': 'application/xml; charset=UTF-8',\r\n 'X-Frame-Options': 'SAMEORIGIN',\r\n 'X-Robots-Tag': 'noindex, follow',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.sitemapIndex.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\nexport function getSiteMapXML(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ market?: string; locale?: string; }>;\r\n }) {\r\n try {\r\n const params = await getParams;\r\n const market = params?.market || defaultMarket;\r\n const locale = params?.locale || defaultLocale;\r\n const { getContext } = await getPayload({ config });\r\n const { markets, locales, routes } = await getContext(market, locale);\r\n const selectedMarket = markets.find(x => market ? x.id === market : x.isDefault) || markets[0]!;\r\n const selectedLocale = locales.find(x => locale ? x.id === locale : x.isDefault) || locales[0]!;\r\n const selectedMarketLocale = selectedMarket && selectedMarket.defaultLanguage ? selectedMarket.defaultLanguage : selectedLocale.id;\r\n const isCanonicalRoute: (route: IRoute) => boolean = (market && locale) ? (route) => {\r\n return route.noindex !== true && route.market === selectedMarket.id && route.locale === selectedLocale.id;\r\n } : (route) => {\r\n return route.noindex !== true && route.market === selectedMarket.id && route.locale === selectedMarketLocale;\r\n };\r\n const getCanonicalAlternates: (canonical: IRoute) => IRoute[] = (market && locale) ? (canonical) => {\r\n return [];\r\n } : (canonical) => {\r\n return routes.filter(alternate => {\r\n return alternate !== canonical && alternate.schema === canonical.schema && alternate.page === canonical.page;\r\n });\r\n };\r\n const routeToRouteCanonical: (canonical: IRoute) => IRouteCanonical = (canonical) => {\r\n const alternates = getCanonicalAlternates(canonical);\r\n return { ...canonical, alternates };\r\n };\r\n const canonicalRoutes: IRouteCanonical[] = routes.filter(isCanonicalRoute).map(routeToRouteCanonical);\r\n const body = `<?xml version=\"1.0\" encoding=\"UTF-8\"?><?xml-stylesheet type=\"text/xsl\" href=\"${origin}/sitemap.xsl\"?>\r\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\r\n xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"\r\n xmlns:image=\"http://www.google.com/schemas/sitemap-image/1.1\">\r\n${getSiteMapXMLUrls(origin, canonicalRoutes)}\r\n</urlset>\r\n `;\r\n return new Response(body, {\r\n status: 200,\r\n headers: {\r\n 'Content-Type': 'application/xml; charset=UTF-8',\r\n 'X-Frame-Options': 'SAMEORIGIN',\r\n 'X-Robots-Tag': 'noindex, follow',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.sitemapXml.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\nexport function getSiteMapXSL(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest, {\r\n params: getParams,\r\n }: {\r\n params: Promise<{ market?: string; locale?: string; }>;\r\n }) {\r\n try {\r\n const params = await getParams;\r\n const locale = params?.locale || defaultLocale;\r\n const body = /* html */`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\t<xsl:stylesheet version=\"2.0\"\r\n\t\txmlns:html=\"http://www.w3.org/TR/REC-html40\"\r\n\t\txmlns:image=\"http://www.google.com/schemas/sitemap-image/1.1\"\r\n\t\txmlns:sitemap=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\r\n\t\txmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\r\n\t<xsl:output method=\"html\" version=\"1.0\" encoding=\"UTF-8\" indent=\"yes\"/>\r\n\t<xsl:template match=\"/\">\r\n\t\t<html lang=\"${locale}\" xmlns=\"http://www.w3.org/1999/xhtml\">\r\n\t\t<head>\r\n\t\t\t<title>XML Sitemap</title>\r\n\t\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n\t\t\t<style type=\"text/css\">\r\n html {\r\n padding: 0;\r\n background: #09090A;\r\n\t\t\t\t\tcolor: #fefefe;\r\n }\r\n\t\t\t\tbody {\r\n padding: 15px;\r\n\t\t\t\t\tfont-family: Inter,-apple-system,'Helvetica Neue','Segoe UI',Roboto,Arial,'Noto Sans',sans-serif;\r\n\t\t\t\t\tfont-size: 13px;\r\n background: #09090A;\r\n\t\t\t\t\tcolor: #fefefe;\r\n\t\t\t\t}\r\n\t\t\t\t.container {\r\n\t\t\t\t\tmargin: 0 auto;\r\n\t\t\t\t\tmax-width: 1280px;\r\n\t\t\t\t}\r\n\t\t\t\ta {\r\n\t\t\t\t\tcolor: #fefefe;\r\n\t\t\t\t\ttext-decoration: none;\r\n\t\t\t\t}\r\n\t\t\t\ta:visited {\r\n\t\t\t\t\tcolor: #9e9e9e;\r\n\t\t\t\t}\r\n\t\t\t\ta:hover {\r\n\t\t\t\t\ttext-decoration: underline;\r\n\t\t\t\t}\r\n\t\t\t\ttable {\r\n width: 100%;\r\n margin: 10px 0;\r\n\t\t\t\t\tborder: none;\r\n\t\t\t\t\tborder-collapse: collapse;\r\n\t\t\t\t}\r\n\t\t\t\ttd,\r\n th {\r\n\t\t\t\t\ttext-align: left;\r\n\t\t\t\t\tfont-size: 12px;\r\n padding: 3px;\r\n\t\t\t\t}\r\n\t\t\t\tth:not(:last-child),\r\n td:not(:last-child) {\r\n\t\t\t\t\tpadding-right: 30px;\r\n\t\t\t\t}\r\n\t\t\t\tthead th {\r\n\t\t\t\t\tborder-bottom: 1px solid #0e0e0f;\r\n\t\t\t\t}\r\n\t\t\t\t#sitemap tr:nth-child(odd) td {\r\n\t\t\t\t\tbackground-color: #0e0e0f;\r\n\t\t\t\t}\r\n\t\t\t\t#sitemap tbody tr:hover td {\r\n\t\t\t\t\tbackground-color: #1A1A1B;\r\n\t\t\t\t}\r\n\t\t\t\t#sitemap tbody tr:hover td,\r\n #sitemap tbody tr:hover td a {\r\n\t\t\t\t\tcolor: #fefefe;\r\n\t\t\t\t}\r\n\t\t\t\t.wysiwyg {\r\n margin: 0;\r\n\t\t\t\t\tpadding: 0 0 10px 0;\r\n\t\t\t\t\tline-height: 1.2em;\r\n\t\t\t\t}\r\n\t\t\t\t.wysiwyg a {\r\n\t\t\t\t\tcolor: #00ea4e;\r\n\t\t\t\t\tfont-weight: 600;\r\n\t\t\t\t}\r\n\t\t\t\t.wysiwyg a:visited {\r\n\t\t\t\t\tcolor: #00ea4e;\r\n\t\t\t\t}\r\n\t\t\t</style>\r\n\t\t</head>\r\n\t\t<body>\r\n\t\t<div class=\"container\">\r\n\t\t\t<h1>XML Sitemap</h1>\r\n\t\t\t<p class=\"wysiwyg\">\r\n This is an XML Sitemap meant for consumption by search engines, generated by <a href=\"https://github.com/websolutespa/bom\" target=\"_blank\" rel=\"noopener\">Mixer</a>.\r\n </p>\r\n <p class=\"wysiwyg\">\r\n\t\t\t\tYou can find more information about XML sitemaps on <a href=\"https://sitemaps.org\" target=\"_blank\" rel=\"noopener\">sitemaps.org</a>.\r\n\t\t\t</p>\r\n\t\t\t<xsl:if test=\"count(sitemap:sitemapindex/sitemap:sitemap) &gt; 0\">\r\n\t\t\t\t<p class=\"wysiwyg\">\r\n\t\t\t\t\tThis sitemap index file contains <xsl:value-of select=\"count(sitemap:sitemapindex/sitemap:sitemap)\"/> sitemaps.\r\n\t\t\t\t</p>\r\n\t\t\t\t<table id=\"sitemap\" cellpadding=\"3\">\r\n\t\t\t\t\t<thead>\r\n <tr>\r\n <th width=\"75%\">Sitemap</th>\r\n <th width=\"25%\" title=\"Last Modification Time\">Updated At</th>\r\n </tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t<xsl:for-each select=\"sitemap:sitemapindex/sitemap:sitemap\">\r\n\t\t\t\t\t\t<xsl:variable name=\"sitemapURL\">\r\n\t\t\t\t\t\t\t<xsl:value-of select=\"sitemap:loc\"/>\r\n\t\t\t\t\t\t</xsl:variable>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<a href=\"{$sitemapURL}\"><xsl:value-of select=\"sitemap:loc\"/></a>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))\"/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</xsl:for-each>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</xsl:if>\r\n\t\t\t<xsl:if test=\"count(sitemap:sitemapindex/sitemap:sitemap) &lt; 1\">\r\n\t\t\t\t<p class=\"wysiwyg\">\r\n\t\t\t\t\tThis sitemap contains <xsl:value-of select=\"count(sitemap:urlset/sitemap:url)\"/> URLs.\r\n\t\t\t\t</p>\r\n\t\t\t\t<table id=\"sitemap\" cellpadding=\"3\">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th width=\"75%\">URL</th>\r\n\t\t\t\t\t\t<th width=\"15%\" title=\"Last Modification Time\">Updated At</th>\r\n\t\t\t\t\t\t<th width=\"10%\">Images</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t<xsl:variable name=\"lower\" select=\"'abcdefghijklmnopqrstuvwxyz'\"/>\r\n\t\t\t\t\t<xsl:variable name=\"upper\" select=\"'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\"/>\r\n\t\t\t\t\t<xsl:for-each select=\"sitemap:urlset/sitemap:url\">\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<xsl:variable name=\"itemURL\">\r\n\t\t\t\t\t\t\t\t\t<xsl:value-of select=\"sitemap:loc\"/>\r\n\t\t\t\t\t\t\t\t</xsl:variable>\r\n\t\t\t\t\t\t\t\t<a href=\"{$itemURL}\">\r\n\t\t\t\t\t\t\t\t\t<xsl:value-of select=\"sitemap:loc\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))\"/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"count(image:image)\"/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</xsl:for-each>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</xsl:if>\r\n\t\t</div>\r\n\t\t</body>\r\n\t\t</html>\r\n\t</xsl:template>\r\n\t</xsl:stylesheet>`;\r\n return new Response(body, {\r\n status: 200,\r\n headers: {\r\n 'Content-Type': 'application/xml; charset=UTF-8',\r\n 'X-Frame-Options': 'SAMEORIGIN',\r\n 'X-Robots-Tag': 'noindex, follow',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n const response = getHandlerErrorResponse(error);\r\n console.error('storeHandler.sitemapXsl.error', response.status, error);\r\n return response;\r\n }\r\n };\r\n}\r\n\r\nfunction getSiteMapXMLLastMod(canonical: IRouteCanonical): string {\r\n return canonical.updatedAt ? `\r\n <lastmod>${escapeHtml(String(canonical.updatedAt))}</lastmod>` : '';\r\n}\r\n\r\nfunction getSiteMapXMLImage(canonical: IRouteCanonical): string {\r\n return canonical.media ? `\r\n <image:image>\r\n <image:loc>${escapeHtml(encodeURI(`${canonical.media.src || canonical.media.url}`))}</image:loc>\r\n </image:image>` : '';\r\n}\r\n\r\nfunction getSiteMapXMLAlternates(origin: string, canonical: IRouteCanonical): string {\r\n return canonical.alternates.map(alternate => `\r\n <xhtml:link href=\"${escapeHtml(encodeURI(`${origin}${alternate.id}`))}\" hreflang=\"${alternate.locale}-${alternate.market}\" rel=\"alternate\" />`).join('');\r\n}\r\n\r\nfunction getSiteMapXMLUrl(origin: string, canonical: IRouteCanonical): string {\r\n return `\r\n <url>\r\n <loc>${escapeHtml(encodeURI(`${origin}${canonical.id}`))}</loc>${getSiteMapXMLLastMod(canonical)}${getSiteMapXMLAlternates(origin, canonical)}${getSiteMapXMLImage(canonical)}\r\n </url>`;\r\n}\r\n\r\n/*\r\n Character\t Escape Code\r\n Ampersand\t &\t &amp;\r\n Single Quote\t'\t &apos;\r\n Double Quote\t\"\t &quot;\r\n Greater Than\t>\t &gt;\r\n Less Than\t <\t &lt;\r\n */\r\n\r\nfunction escapeHtml(string: string) {\r\n const matchHtmlRegExp = /[\"'&<>]/;\r\n const str = '' + string;\r\n const match = matchHtmlRegExp.exec(str);\r\n if (!match) {\r\n return str;\r\n }\r\n let escape: string;\r\n let html = '';\r\n let index = 0;\r\n let lastIndex = 0;\r\n for (index = match.index; index < str.length; index++) {\r\n switch (str.charCodeAt(index)) {\r\n case 34: // \"\r\n escape = '&quot;';\r\n break;\r\n case 38: // &\r\n escape = '&amp;';\r\n break;\r\n case 39: // '\r\n escape = '&#39;';\r\n break;\r\n case 60: // <\r\n escape = '&lt;';\r\n break;\r\n case 62: // >\r\n escape = '&gt;';\r\n break;\r\n default:\r\n continue;\r\n }\r\n if (lastIndex !== index) {\r\n html += str.substring(lastIndex, index);\r\n }\r\n lastIndex = index + 1;\r\n html += escape;\r\n }\r\n return lastIndex !== index\r\n ? html + str.substring(lastIndex, index)\r\n : html;\r\n}\r\n\r\nfunction getSiteMapXMLUrls(origin: string, canonicalRoutes: IRouteCanonical[]): string {\r\n return canonicalRoutes.map((canonicalRoute) => getSiteMapXMLUrl(origin, canonicalRoute)).join('');\r\n}\r\n","import { isDevelopment, qsSerialize, type IRoute } from '@websolutespa/bom-core';\r\nimport type { CollectionSlug, SanitizedConfig } from 'payload';\r\nimport { guest } from '../../lib/const';\r\nimport { localApiGet } from '../../lib/http';\r\nimport { BuildStrategy, buildStrategy } from '../../lib/store';\r\nimport { PageParams } from '../../types';\r\nimport { getPayload, getPayloadInstance, getRoutes } from '../mixer';\r\n\r\n/**\r\n * Returns a generateStaticParams function for a given page collection slug.\r\n */\r\nexport function getStaticParams<TSlug extends CollectionSlug>(slug: TSlug, config: Promise<SanitizedConfig>) {\r\n return async function generateStaticParams(): Promise<PageParams[]> {\r\n if (\r\n isDevelopment ||\r\n buildStrategy === BuildStrategy.Runtime\r\n ) {\r\n return [];\r\n }\r\n const { getContext } = await getPayload({ config });\r\n const { routes } = await getContext('all', 'all');\r\n return (routes)\r\n .filter(r => r.schema === slug)\r\n .map(route => ({\r\n market: route.market,\r\n locale: route.locale,\r\n id: String(route.page),\r\n }));\r\n };\r\n}\r\n\r\n// unused\r\nexport function getStaticParams_(schema: string) {\r\n return async function generateStaticParams(): Promise<{\r\n market: string;\r\n locale: string;\r\n id: string;\r\n }[]> {\r\n if (\r\n isDevelopment ||\r\n buildStrategy === BuildStrategy.Runtime\r\n ) {\r\n return [];\r\n }\r\n const query = qsSerialize({\r\n where: {\r\n or: [{\r\n schema: {\r\n equals: schema,\r\n },\r\n template: {\r\n equals: schema,\r\n },\r\n }],\r\n },\r\n });\r\n const routes: IRoute[] = await localApiGet(`/-route?${query}`);\r\n return (routes)\r\n .map(route => ({\r\n market: route.market,\r\n locale: route.locale,\r\n id: String(route.page),\r\n }));\r\n };\r\n}\r\n\r\n// unused\r\nexport function getStaticParamsFromPayload(schema: string, config: Promise<SanitizedConfig>) {\r\n return async function generateStaticParams(): Promise<{\r\n market: string;\r\n locale: string;\r\n id: string;\r\n }[]> {\r\n if (\r\n isDevelopment ||\r\n buildStrategy === BuildStrategy.Runtime\r\n ) {\r\n return [];\r\n }\r\n\r\n const payload = await getPayloadInstance({ config });\r\n const routes = await getRoutes({\r\n payload,\r\n market: 'all',\r\n locale: 'all',\r\n user: guest,\r\n draft: false,\r\n });\r\n\r\n return routes\r\n .filter(route => (\r\n route.schema === schema ||\r\n route.template === schema\r\n ))\r\n .map(route => ({\r\n market: route.market,\r\n locale: route.locale,\r\n id: String(route.page),\r\n }));\r\n };\r\n}\r\n\r\n/*\r\nGood to know:\r\nYou can use the dynamicParams segment config option to control what happens when a dynamic segment is visited that was not generated with generateStaticParams.\r\nYou must return an empty array from generateStaticParams or utilize export const dynamic = 'force-static' in order to revalidate (ISR) paths at runtime.\r\nDuring next dev, generateStaticParams will be called when you navigate to a route.\r\nDuring next build, generateStaticParams runs before the corresponding Layouts or Pages are generated.\r\nDuring revalidation (ISR), generateStaticParams will not be called again.\r\ngenerateStaticParams replaces the getStaticPaths function in the Pages Router.\r\n*/\r\n","import { getHost, getOrigin, isDevelopment, isProduction } from '@websolutespa/bom-core';\r\nimport { headers as getHeaders } from 'next/headers';\r\nimport { NextRequest } from 'next/server';\r\nimport { SanitizedConfig } from 'payload';\r\nimport { getLayout } from '../layout';\r\nimport { getPayload, getSearchParams } from '../mixer';\r\nimport { getHandlerErrorResponse } from './error-response';\r\n\r\nconst DISALLOWED_KEYS = [\r\n '__NEXT_PRIVATE_STANDALONE_CONFIG',\r\n];\r\n\r\nconst getFilteredEnv = (env: Record<string, unknown>): Record<string, unknown> => {\r\n const entries = Object.entries(env).filter(([k, v]) => (\r\n !DISALLOWED_KEYS.includes(k) && typeof v === 'string'\r\n ));\r\n entries.sort();\r\n return Object.fromEntries(entries);\r\n};\r\n\r\nconst sortKeys = (object?: Record<string, unknown>): Record<string, unknown> => {\r\n const entries = Object.entries(object || {});\r\n entries.sort();\r\n return Object.fromEntries(entries);\r\n};\r\n\r\nexport function getVarsHandler(config: Promise<SanitizedConfig>) {\r\n return async function (request: NextRequest) {\r\n try {\r\n const searchParams = request.nextUrl.searchParams;\r\n // console.log('getVarsHandler', searchParams);\r\n const { market, locale, defaultMarket, defaultLocale, params } = getSearchParams(request);\r\n const headers = await getHeaders();\r\n const { payload, user, getContext } = await getPayload({ config, headers });\r\n if (!(user?.roles || []).includes('admin')) {\r\n throw { status: 401, message: 'Unauthorized' };\r\n }\r\n const context = await getContext(market || defaultMarket, locale || defaultLocale);\r\n const layout = await getLayout(market || defaultMarket, locale || defaultLocale, payload, user, context);\r\n const info = {\r\n production: isProduction,\r\n development: isDevelopment,\r\n origin: getOrigin(headers),\r\n host: getHost(headers),\r\n params: {},\r\n searchParams: { ...sortKeys(Object.fromEntries(searchParams)) },\r\n headers: { ...sortKeys(Object.fromEntries(headers)) },\r\n env: { ...getFilteredEnv(process.env) },\r\n user: { ...sortKeys(user as unknown as Record<string, unknown>) },\r\n context: { ...sortKeys(context) },\r\n layout: { ...sortKeys(layout) },\r\n };\r\n const accept = headers.get('accept');\r\n if (!accept || !(accept.includes('text/html'))) {\r\n return Response.json(info, {\r\n status: 200,\r\n });\r\n }\r\n return new Response(`<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charSet=\"utf-8\"/>\r\n <style>\r\n html, body {\r\n background: #282828;\r\n color: #7cacf8;\r\n }\r\n body {\r\n padding: 0;\r\n margin: 0;\r\n font-family: monospace;\r\n font-size: 14px;\r\n line-height: 1.16;\r\n font-weight: 100;\r\n }\r\n json-viewer {\r\n padding: 20px;\r\n min-height: 100vh;\r\n box-sizing: border-box;\r\n line-height: 1.2;\r\n --background-color: #282828;\r\n --color: #e3e3e3;\r\n --property-color: #7cacf8;\r\n --string-color: #53d5fb;\r\n --number-color: #7b80ff;\r\n --boolean-color: #9980ff;\r\n --null-color: #6f6f6f;\r\n --preview-color: #8f8f8f;\r\n --highlight-color: #7b0000;\r\n --font-family: monospace;\r\n --font-size: 14px;\r\n --indent-size: 1em;\r\n --indentguide-size: 1px;\r\n --indentguide-style: solid;\r\n --indentguide-color: #333;\r\n --indentguide-color-active: #666;\r\n --indentguide: var(--indentguide-size) var(--indentguide-style) var(--indentguide-color);\r\n --indentguide-active: var(--indentguide-size) var(--indentguide-style) var(--indentguide-color-active);\r\n }\r\n\r\n :root {\r\n --scrollbar-size: 8px;\r\n --scrollbar-border-radius: 2px;\r\n --scrollbar-track-color: transparent;\r\n --scrollbar-track-hover-color: transparent;\r\n --scrollbar-thumb-color: #888888;\r\n --scrollbar-thumb-hover-color: #aaaaaa;\r\n }\r\n\r\n ::-webkit-scrollbar {\r\n width: var(--scrollbar-size);\r\n height: var(--scrollbar-size);\r\n border-radius: 0;\r\n }\r\n\r\n ::-webkit-scrollbar-button {\r\n display: none;\r\n }\r\n\r\n ::-webkit-scrollbar-button:hover {\r\n display: none;\r\n }\r\n\r\n ::-webkit-scrollbar-thumb {\r\n background-color: var(--scrollbar-thumb-color);\r\n box-shadow: none;\r\n border-radius: calc(var(--scrollbar-size) * 0.5);\r\n }\r\n\r\n ::-webkit-scrollbar-thumb:hover {\r\n background-color: var(--scrollbar-thumb-hover-color);\r\n }\r\n\r\n ::-webkit-scrollbar-track {\r\n background-color: var(--scrollbar-track-color);\r\n border-radius: 0;\r\n }\r\n\r\n ::-webkit-scrollbar-track:hover {\r\n background-color: var(--scrollbar-track-hover-color);\r\n }\r\n\r\n </style>\r\n <script src=\"https://unpkg.com/@alenaksu/json-viewer@2.0.0/dist/json-viewer.bundle.js\"></script>\r\n <script>\r\n document.addEventListener('DOMContentLoaded', () => {\r\n const viewer = document.querySelector('#json-viewer');\r\n viewer.data = ${JSON.stringify(info)};\r\n viewer.expand(/headers|env/);\r\n });\r\n </script>\r\n</head>\r\n<body>\r\n <json-viewer id=\"json-viewer\"></json-viewer>\r\n</body>\r\n</html>`, {\r\n status: 200,\r\n headers: {\r\n 'Content-Type': 'text/html',\r\n },\r\n });\r\n } catch (error: unknown) {\r\n console.log('getVarsHandler.error', error);\r\n return getHandlerErrorResponse(error);\r\n }\r\n };\r\n}\r\n","'use server';\r\n\r\nimport type { IComponent } from '@websolutespa/bom-core';\r\nimport type { ILazyComponent, ILazyStaticProps, ILazyStaticPropsFunc } from '../types';\r\nimport { getPageContext } from './context';\r\nimport { getContext } from './mixer';\r\n\r\nconst LAZY_PROPS: ILazyStaticProps = {};\r\n\r\nexport async function withLazyProps<T>(key: string, getComponentProps: ILazyStaticPropsFunc<T>) {\r\n LAZY_PROPS[key] = getComponentProps;\r\n}\r\n\r\nexport async function decorateLazyComponents(extraComponents?: IComponent[]) {\r\n const context = await getContext();\r\n const pageContext = await getPageContext();\r\n const page = pageContext.page;\r\n if (!page) {\r\n return;\r\n }\r\n const components = [\r\n ...(page.components || []),\r\n ...(extraComponents || []),\r\n ];\r\n const decoratedComponents: ILazyComponent[] = [];\r\n for (const component of components) {\r\n const key = (component.blockType || component.schema || 'unkown_type') as keyof typeof LAZY_PROPS;\r\n const getComponentProps = LAZY_PROPS[key];\r\n if (typeof getComponentProps === 'function') {\r\n const decoratedComponent = await getComponentProps({\r\n ...context,\r\n ...pageContext,\r\n component,\r\n });\r\n decoratedComponents.push(decoratedComponent);\r\n } else {\r\n decoratedComponents.push(component);\r\n }\r\n }\r\n page.components = decoratedComponents;\r\n}\r\n","import type { ResolvingMetadata } from 'next';\r\nimport type { CollectionSlug, SanitizedConfig } from 'payload';\r\nimport type { PageParams } from '../types';\r\nimport { createPageContext } from './context';\r\n\r\n/**\r\n * Returns a generateMetadata function for a given page collection slug.\r\n * Uses bowl's createPageContext (Payload local API) instead of the store abstraction.\r\n */\r\nexport function getMetadata<TSlug extends CollectionSlug>(slug: TSlug, config: Promise<SanitizedConfig>) {\r\n return async function generateMetadata(\r\n props: Readonly<{ params: Promise<PageParams>; }>,\r\n parent: ResolvingMetadata\r\n ) {\r\n const { market, locale, id } = await props.params;\r\n const { page } = await createPageContext(market, locale, slug, id, config);\r\n return {\r\n title: page!.meta?.title || page!.title,\r\n description: page!.meta?.description || page!.abstract,\r\n };\r\n };\r\n}\r\n\r\n/*\r\n\r\n{\r\n \"viewport\": null,\r\n \"themeColor\": null,\r\n \"colorScheme\": null,\r\n \"metadataBase\": null,\r\n \"title\": {\r\n \"absolute\": \"Mixer\",\r\n \"template\": null\r\n },\r\n \"description\": \"Generated by bom create\",\r\n \"applicationName\": \"Mixer\",\r\n \"authors\": [\r\n {\r\n \"name\": \"Websolute Spa\",\r\n \"url\": \"https://www.websolute.it\"\r\n }\r\n ],\r\n \"generator\": \"BOM\",\r\n \"keywords\": [\r\n \"Mixer\",\r\n \"Next.js\",\r\n \"React\",\r\n \"JavaScript\"\r\n ],\r\n \"referrer\": \"origin-when-cross-origin\",\r\n \"creator\": \"Luca Zampetti\",\r\n \"publisher\": \"Websolute Spa\",\r\n \"robots\": null,\r\n \"manifest\": null,\r\n \"alternates\": {\r\n \"canonical\": null,\r\n \"languages\": null,\r\n \"media\": null,\r\n \"types\": null\r\n },\r\n \"icons\": null,\r\n \"openGraph\": null,\r\n \"twitter\": null,\r\n \"verification\": {},\r\n \"appleWebApp\": null,\r\n \"formatDetection\": {\r\n \"email\": false,\r\n \"address\": false,\r\n \"telephone\": false\r\n },\r\n \"itunes\": null,\r\n \"facebook\": null,\r\n \"abstract\": null,\r\n \"appLinks\": null,\r\n \"archives\": null,\r\n \"assets\": null,\r\n \"bookmarks\": null,\r\n \"category\": null,\r\n \"classification\": null,\r\n \"pagination\": {\r\n \"previous\": null,\r\n \"next\": null\r\n },\r\n \"other\": {}\r\n}\r\n\r\n*/\r\n","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":"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"}
package/dist/http.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","names":[],"sources":["../src/lib/http.ts"],"sourcesContent":["import { FetchRequestOptions, httpFetch, isBrowser, merge } from '@websolutespa/bom-core';\r\n\r\nconst API_URL = process.env.NEXT_PUBLIC_URL || 'http://localhost:3000';\r\nconst API_BASE = process.env.NEXT_PUBLIC_API || '/api';\r\n\r\nexport type ApiRequestOptions = FetchRequestOptions;\r\n\r\nexport function getLocalApiRequestOptions(): ApiRequestOptions {\r\n return {\r\n headers: {\r\n },\r\n };\r\n}\r\n\r\nexport function getRemoteApiRequestOptions(token?: string): ApiRequestOptions {\r\n if (token) {\r\n // authenticated end user JWT token bearer (end_users)\r\n return {\r\n // mode: 'cors',\r\n headers: {\r\n Authorization: `JWT ${token}`,\r\n // Authorization: `Bearer ${token}`,\r\n },\r\n };\r\n } else {\r\n // guest user api key (users)\r\n return {\r\n // mode: 'cors',\r\n headers: {\r\n Authorization: `users API-Key ${process.env.STORE_API_KEY}`,\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport function getLocalApiUrl(pathname: string, origin?: string): string {\r\n const url = `${isBrowser ? window.location.origin : (origin || API_URL)}${API_BASE}${pathname}`;\r\n // console.log('getLocalApiUrl', url);\r\n return url;\r\n}\r\n\r\nexport async function localApiFetch<T = unknown>(pathname: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }, origin?: string): Promise<T> {\r\n // console.log('localApiFetch', pathname, options, serviceOptions);\r\n const url = new URL(getLocalApiUrl(pathname, origin));\r\n if (serviceOptions) {\r\n url.searchParams.append('locale', serviceOptions.locale);\r\n url.searchParams.append('market', serviceOptions.market);\r\n }\r\n const apiOptions = merge({ ...getLocalApiRequestOptions() }, options);\r\n console.log('📡 localApiFetch', apiOptions.method, url.href);\r\n const apiResponse = await httpFetch(url.href, apiOptions);\r\n // console.log('localApiFetch', pathname, apiResponse);\r\n return apiResponse;\r\n}\r\n\r\nexport async function localApiGet<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }, origin?: string): Promise<T> {\r\n return await localApiFetch<T>(url, { ...options, method: 'GET' }, serviceOptions, origin);\r\n}\r\n\r\nexport async function localApiPost<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localApiFetch<T>(url, { ...options, method: 'POST', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localApiPut<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localApiFetch<T>(url, { ...options, method: 'PUT', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localApiPatch<T = unknown>(url: string, payload?: unknown, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localApiFetch<T>(url, { ...options, method: 'PATCH', body: payload ? JSON.stringify(payload) : undefined }, serviceOptions);\r\n}\r\n\r\nexport async function localApiDelete<T = unknown>(url: string, options: ApiRequestOptions = {}, serviceOptions?: { locale: string, market: string }): Promise<T> {\r\n return await localApiFetch<T>(url, { ...options, method: 'DELETE' }, serviceOptions);\r\n}\r\n"],"mappings":";;AAEA,MAAM,UAAU,QAAQ,IAAI,mBAAmB;AAC/C,MAAM,WAAW,QAAQ,IAAI,mBAAmB;AAIhD,SAAgB,4BAA+C;CAC7D,OAAO,EACL,SAAS,CACT,EACF;AACF;AAEA,SAAgB,2BAA2B,OAAmC;CAC5E,IAAI,OAEF,OAAO,EAEL,SAAS,EACP,eAAe,OAAO,QAExB,EACF;MAGA,OAAO,EAEL,SAAS,EACP,eAAe,iBAAiB,QAAQ,IAAI,gBAC9C,EACF;AAEJ;AAEA,SAAgB,eAAe,UAAkB,QAAyB;CAGxE,OAAO,GAFQ,YAAY,OAAO,SAAS,SAAU,UAAU,UAAW,WAAW;AAGvF;AAEA,eAAsB,cAA2B,UAAkB,UAA6B,CAAC,GAAG,gBAAqD,QAA6B;CAEpL,MAAM,MAAM,IAAI,IAAI,eAAe,UAAU,MAAM,CAAC;CACpD,IAAI,gBAAgB;EAClB,IAAI,aAAa,OAAO,UAAU,eAAe,MAAM;EACvD,IAAI,aAAa,OAAO,UAAU,eAAe,MAAM;CACzD;CACA,MAAM,aAAa,MAAM,EAAE,GAAG,0BAA0B,EAAE,GAAG,OAAO;CACpE,QAAQ,IAAI,oBAAoB,WAAW,QAAQ,IAAI,IAAI;CAG3D,OAAO,MAFmB,UAAU,IAAI,MAAM,UAAU;AAG1D;AAEA,eAAsB,YAAyB,KAAa,UAA6B,CAAC,GAAG,gBAAqD,QAA6B;CAC7K,OAAO,MAAM,cAAiB,KAAK;EAAE,GAAG;EAAS,QAAQ;CAAM,GAAG,gBAAgB,MAAM;AAC1F;AAEA,eAAsB,aAA0B,KAAa,SAAmB,UAA6B,CAAC,GAAG,gBAAiE;CAChL,OAAO,MAAM,cAAiB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAQ,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,KAAA;CAAU,GAAG,cAAc;AACxI;AAEA,eAAsB,YAAyB,KAAa,SAAmB,UAA6B,CAAC,GAAG,gBAAiE;CAC/K,OAAO,MAAM,cAAiB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAO,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,KAAA;CAAU,GAAG,cAAc;AACvI;AAEA,eAAsB,cAA2B,KAAa,SAAmB,UAA6B,CAAC,GAAG,gBAAiE;CACjL,OAAO,MAAM,cAAiB,KAAK;EAAE,GAAG;EAAS,QAAQ;EAAS,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,KAAA;CAAU,GAAG,cAAc;AACzI;AAEA,eAAsB,eAA4B,KAAa,UAA6B,CAAC,GAAG,gBAAiE;CAC/J,OAAO,MAAM,cAAiB,KAAK;EAAE,GAAG;EAAS,QAAQ;CAAS,GAAG,cAAc;AACrF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib/http.ts","../src/lib/open-graph.ts","../src/lib/structured-data.ts","../src/lib/twitter-card.ts","../src/lib/meta-data.ts","../src/lib/breadcrumb.ts","../src/lib/const.ts","../src/lib/label.ts","../src/lib/layout.defaults.ts","../src/lib/link.ts","../src/lib/pagination.ts","../src/lib/route.ts","../src/lib/store.ts","../src/lib/utils.ts","../src/mock.ts"],"mappings":"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AAA,kCcSvI,WdTuI,CAAA,GcUvK,GdVuK,ScU3J,cdV2J,GcU1I,yBdV0I,GcWvK,kBdXuK,CcWpJ,KdXoJ,EcW7I,MdX6I,EcWrI,yBdXqI,CAAA,GcYvK,GdZuK,SAAA,OAAA,GcavK,UdbuK,Cca5J,Mdb4J,CAAA,GcalJ,SdbkJ,CcaxI,KdbwI,EcajI,MdbiI,EcazH,yBdbyH,CAAA,GccvK,SdduK,Ccc7J,Kdd6J,EcctJ,MddsJ,Ecc9I,yBdd8I,CAAA;AAI3K,KcYK,UdZiB,CAAA,UAAY,MAAA,EAAA,eAAA,MAAA,EAAA,kCcYyD,WdZzD,CAAA,GcYwE,QdZxE,CAAA,UcctB,OddsB,CAAA,MccR,CddQ,EccL,YddK,CccQ,CddR,CAAA,Gcca,Wddb,CAAA,Icc6B,Ydd7B,Cce5B,Gdf4B,EcgB5B,CdhB4B,CcgB1B,GdhB0B,CAAA,EciB5B,MdjB4B,EckB5B,yBdlB4B,CAAA,EAAuD,GAAA,UcqB7E,OdrBmK,CcqB3J,YdrB2J,CcqB9I,CdrB8I,CAAA,EcqB1I,WdrB0I,CAAA,IcqB1H,YdrB0H,CcsBzK,GdtByK,EcuBzK,CdvByK,CcuBvK,GdvBuK,CAAA,EcwBzK,MdxByK,EcyBzK,yBdzByK,CAAA,EAAR,CAAA;AAAO;AAIxJ,Kc2BV,cd3BqB,CAAA,IAAA,MAAA,EAAA,eAAA,MAAA,Gc2B8B,Ud3B9B,CAAA,Gc2B4C,Od3B5C,Cc2BoD,Md3BpD,Cc2B2D,Md3B3D,Ec2BmE,Cd3BnE,CAAA,CAAA;AAAA;AAAuD,Kc8B5E,Ud9B4E,CAAA,eAAA,MAAA,Gc8BzC,Ud9ByC,CAAA,GAAA;EAAsF,GAAA,CAAA,EAAA,MAAA,Gc+B7J,cd/B6J,CAAA,MAAA,Ec+BtI,Md/BsI,CAAA;EAAR,EAAA,CAAA,EAAA,MAAA,GAAA,MAAA;EAAO,GAAA,EAAA,MAAA;EAIvJ,IAAA,CAAA,EAAA,MAAA;AAAa,CAAA;AAAuD;AAAsF;AAAR;AAAO;AAI/K;AAAoC;AAAoC,KcmC5D,adnC4D,CAAA,iBAAA,MAAA,GcoC5C,MdpC4C,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,eAAA,MAAA,GcqC9C,UdrC8C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,CAAA,GAAA,CYqMzB,gBZrMyB,CYqMR,IZrMQ,EYqMF,MZrME,EYqMM,yBZrMN,CAAA,GAAA;EAC1B,IAAA,EYqMM,WZrMN,CYqMkB,aZrMH,CYqMiB,IZrMjB,EYqMuB,OZrMvB,CAAA,MAAA,EAAA,MYqM6C,IZrM7C,CAAA,EYqMoD,MZrMpD,EYqM4D,yBZrM5D,CAAA,CAAA;EACf,KAAA,EYqMO,WZrMQ,CYqMI,aZrMJ,CYqMkB,IZrMlB,EYqMwB,OZrMxB,CAAA,OAAA,EAAA,MYqM+C,IZrM/C,CAAA,EYqMsD,MZrMtD,EYqM8D,yBZrM9D,CAAA,CAAA;EACf,IAAA,EAAA,MAAA;AACA,CAAA,CAAA,GAAA,CYsMC,gBZtMc,CYsMG,IZtMH,EYsMS,MZtMT,EYsMiB,yBZtMjB,CAAA,GAAA;EACf,KAAA,EYsMO,aZtMQ,CYsMM,QZtMN,EYsMgB,MZtMhB,EYsMwB,yBZtMxB,CAAA,EAAA;EACf,KAAA,CAAA,EYsMQ,aZtMO,CYsMO,IZtMP,EYsMa,OZtMb,CAAA,OAAA,EAAA,MYsMoC,IZtMpC,CAAA,EYsM2C,MZtM3C,EYsMmD,yBZtMnD,CAAA;EACf,IAAA,EAAA,OAAA;AACA,CAAA,CAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KYuMQ,SZvMR,CAAe,iBYwMA,YZxMA,GYwMe,mBZxMf,EAAA,eAAA,MAAA,GYyMO,UZzMP,EAAA,kCY0MiB,WZ1MjB,GAAA,KAAA,CAAA,GY2Mf,QZ3Me,CY4MjB,IZ5MiB,CY4MZ,aZ5MY,CY4ME,QZ5MF,EY4MY,MZ5MZ,EY4MoB,yBZ5MpB,CAAA,EAAA,OAAA,CAAA,GAAA;EACf,KAAA,EY4MO,aZ5MQ,CY4MM,QZ5MN,EY4MgB,MZ5MhB,EY4MwB,yBZ5MxB,CAAA,EAAA;AACf,CAAA,CAAA;AACA;AACA,KY8MQ,WZ9MO,CAAA,eAAA,MAAA,GY8M6B,UZ9M7B,CAAA,GAAA;EACf,EAAA,EY8ME,MZ9MF;EACA,SAAA,CAAA,EAAA,OAAe;EAAO,QAAA,CAAA,EAAA,OAAA;kBYgNR,uBAAuB;;KAGpC,gCAA8B,iBAAiB,cAAc;AXxOlE,KWyOK,kBXzO2B,CAAA,eWyOO,aXzOP,EAAA,aWyOmC,gBXzOnC,CWyOkD,MXzOlD,CAAA,CAAA,GWyO6D,MXzO7D,CAAA,aAAA,CAAA,CWyOmF,IXzOnF,CAAA,SAAA,MAAA,GW0O5B,MX1O4B,CAAA,aAAA,CAAA,CW0ON,IX1OM,CAAA,GAAA,KAAA;AAYhC,KWiOK,eXjOY,CAAA,eWkOA,aXlO2B,EAAe,iBWmOxC,gBXnOwC,CWmOzB,MXnOyB,CAAA,EAAA,eAAA,MAAA,EAAA,8BWqO3B,MXrO2B,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,GAAA,WWuOhD,OXnOM,CWmOE,gBXnO2B,CWmOZ,MXnOY,CAAA,EWmOH,QXnOW,CAAA,IWmOE,eXnOa,CWmOG,kBXnOH,CWmOsB,MXnOtB,EWmO8B,IXnO9B,CAAA,EWmOqC,MXnOrC,CAAA,EAAA,EAIrE,GAAiB,WAcA,MWmNE,qBXnNwB,IWmNC,eXnNc,CWmNE,qBXnNF,CWmNwB,IXnNxB,CAAA,EWmN+B,MXnN/B,CAAA,EAAA,EAQ1D;AAA2B,KW8MtB,SX9MsB,CAAA,eW8MG,aX9MH,EAAA,iBW8MmC,gBX9MnC,CW8MkD,MX9MlD,CAAA,EAAA,eAAA,MAAA,CAAA,GAAA,WW+MhB,QX9MP,IW8MmB,SX9MnB,CW8M6B,kBX9M7B,CW8MgD,MX9MhD,EW8MwD,IX9MxD,CAAA,EW8M+D,MX9M/D,CAAA,EAAA,EACA;AACA;AACA,KW+MQ,UX/MR,CAAA,eWgNa,aXhNb,GAAA;EAA4B,WAAA,EWgNgB,MXhNhB,CAAA,MAAA,EWgN+B,MXhN/B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;oBWiNb,iBAAe,+CACF,yBAAyB,8CAC/B;eAEX,gBAAgB,QAAQ,UAAU,QAAQ;SAChD,UAAU,QAAQ,UAAU;AVhQrC,CAAA"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/lib/layout.defaults.ts","../src/lib/pagination.ts"],"sourcesContent":["import { ILayout } from '@websolutespa/bom-core';\r\n\r\nexport const LayoutDefaults: ILayout = {\r\n labels: [\r\n {\r\n id: 'error.required',\r\n text: 'Required field',\r\n },\r\n {\r\n id: 'items.found',\r\n text: '@items items found',\r\n },\r\n ],\r\n locale: 'en',\r\n locales: [],\r\n market: 'ww',\r\n markets: [],\r\n app: {\r\n id: 'app',\r\n brand: {\r\n name: 'Mixer',\r\n social: [],\r\n },\r\n },\r\n menu: {\r\n main: {\r\n id: 'main',\r\n items: [\r\n {\r\n id: 1,\r\n type: 'category',\r\n title: 'Collections',\r\n category: 'product_index',\r\n href: '#collections',\r\n items: [\r\n {\r\n id: 'product_category_tile',\r\n type: 'category',\r\n title: 'Tiles',\r\n category: 'product_category_tile',\r\n href: '#collections/tiles',\r\n items: [],\r\n media: {\r\n type: 'image',\r\n src: 'https://placehold.co/960x600/e4e5eb/f4f5fb.webp?text=placehold',\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n tree: {\r\n id: 'homepage',\r\n category: 'homepage',\r\n schema: 'homepage',\r\n title: 'Homepage',\r\n href: '/',\r\n items: [\r\n {\r\n id: 'product_index',\r\n category: 'product_index',\r\n schema: 'product_index',\r\n title: 'Collections',\r\n href: '#collections',\r\n items: [\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: 'Tiles',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/6366_n_tiles.jpg',\r\n },\r\n },\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: '3D Elements',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/6369_n_3d_elements_menu_cover.webp',\r\n },\r\n },\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: 'Paints',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/6367_n_paints.jpg',\r\n },\r\n },\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: 'Wood & Metal',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/6368_n_menu_wood_metal.webp',\r\n },\r\n },\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: 'Accessories',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/6371_n_accessories.jpg',\r\n },\r\n },\r\n {\r\n id: 'product_category',\r\n category: 'product_category',\r\n schema: 'product_category',\r\n title: 'Editions',\r\n href: '#product_category',\r\n media: {\r\n type: 'image',\r\n src: 'https://bom-mixer.wslabs.it/assets/header/7858_n_Menu.webp',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'magazine_index',\r\n category: 'magazine_index',\r\n schema: 'magazine_index',\r\n title: 'Magazine',\r\n href: '#magazine_index',\r\n },\r\n {\r\n id: 'store_index',\r\n category: 'store_index',\r\n schema: 'store_index',\r\n title: 'Stores',\r\n href: '#store_index',\r\n },\r\n {\r\n id: 'contact',\r\n category: 'contact',\r\n schema: 'contact',\r\n title: 'Contacts',\r\n href: '#contact',\r\n },\r\n {\r\n id: 'shop_index',\r\n category: 'shop_index',\r\n schema: 'shop_index',\r\n title: 'Shop',\r\n href: '#shop_index',\r\n },\r\n ],\r\n },\r\n topLevelHrefs: {},\r\n topLevelRoutes: {},\r\n};\r\n","import { isArray, isObject } from '@websolutespa/bom-core';\r\n\r\nexport type IPaginationItem = any;\r\n\r\nexport type IPaginationOptions = {\r\n mode?: 'pagination' | 'infinite'; // default to pagination\r\n page?: number;\r\n perPage?: number;\r\n delayInMs?: number;\r\n};\r\n\r\nexport type IPaginationInfo<T extends IPaginationItem = IPaginationItem> = {\r\n items: T[];\r\n hasMore: boolean;\r\n nextPage: number | undefined;\r\n page: number;\r\n pages: number;\r\n perPage: number;\r\n prevPage: number | undefined;\r\n total: number;\r\n};\r\n\r\nexport function isPaginationInfo(item: unknown): item is IPaginationInfo {\r\n return isObject(item) && (\r\n typeof item.page === 'number' &&\r\n typeof item.pages === 'number' &&\r\n typeof item.perPage === 'number' &&\r\n typeof item.total === 'number' &&\r\n isArray(item.items)\r\n );\r\n}\r\n\r\nexport function getPagedItems<T extends IPaginationItem = IPaginationItem>(\r\n items: T[],\r\n page: number,\r\n perPage: number\r\n): T[] {\r\n const from = (page - 1) * perPage;\r\n const to = Math.min(page * perPage, items.length);\r\n return items.slice(from, to);\r\n}\r\n\r\nexport function getMoreItems<T extends IPaginationItem = IPaginationItem>(\r\n items: T[],\r\n page: number,\r\n perPage: number\r\n): T[] {\r\n const total = items.length;\r\n const position = Math.min(total, perPage * page);\r\n return items.slice(0, position);\r\n}\r\n\r\nexport function getPaginationInfo<T extends IPaginationItem = IPaginationItem>(\r\n items: T[],\r\n options?: IPaginationOptions\r\n): IPaginationInfo<T> {\r\n const mode = options?.mode || 'pagination';\r\n const page = options?.page || 1;\r\n const perPage = options?.perPage || 12;\r\n const total = items.length;\r\n const pages = Math.ceil(total / perPage);\r\n const hasMore = page < pages;\r\n const prevPage = page > 1 ? page - 1 : undefined;\r\n const nextPage = page < pages ? page + 1 : undefined;\r\n const pagedItems = mode === 'pagination' ?\r\n getPagedItems(items, page, perPage) :\r\n getMoreItems(items, page, perPage);\r\n return {\r\n items: pagedItems,\r\n hasMore,\r\n nextPage,\r\n page,\r\n pages,\r\n perPage,\r\n prevPage,\r\n total,\r\n };\r\n}\r\n"],"mappings":"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"}
package/dist/index2.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { $ as TwitterCardType, A as IPaginationInfo, B as getLabelFromLabels, C as storeCacheDuration, Ct as localApiPatch, D as resolveRoute, E as newRouteLink, F as getPaginationInfo, G as IBrand, H as guest, I as isPaginationInfo, J as TwitterCardApp, K as IMeta, L as getLink, M as IPaginationOptions, N as getMoreItems, O as routeToLink, P as getPagedItems, Q as TwitterCardSummaryLargeImage, R as LayoutDefaults, S as nextPhase, St as localApiGet, T as getRouteLinkCategory, Tt as localApiPut, U as buildBreadcrumb, V as interpolateText, W as IAlternate, X as TwitterCardPlayer, Y as TwitterCardBase, Z as TwitterCardSummary, _ as trimTerminalSlash, _t as getLocalApiRequestOptions, a as IMockLocalized, at as OpenGraphBusiness, b as StoreStrategy, bt as localApiDelete, c as IMockMenuItem, ct as OpenGraphPlace, d as getPublicUrl, dt as OpenGraphProfile, et as StructuredDataType, f as resolveHref, ft as OpenGraphRestaurant, g as sanitizeRedirectUrl, gt as ApiRequestOptions, h as sanitizeRedirectTo, ht as OpenGraphWebsite, i as IMockLocale, it as OpenGraphBook, j as IPaginationItem, k as routeToRouteLink, l as IMockPage, lt as OpenGraphProduct, m as sanitizeRedirectFrom, mt as OpenGraphVideo, n as IMockDocument, nt as OpenGraphAudio, o as IMockMedia, ot as OpenGraphImage, p as sanitizeHref, pt as OpenGraphType, q as IMetaData, r as IMockGlobal, rt as OpenGraphBase, s as IMockMenu, st as OpenGraphMusic, t as IMockCollection, tt as OpenGraphArticle, u as IMockStore, ut as OpenGraphProductGroup, v as BuildStrategy, vt as getLocalApiUrl, w as storeStrategy, wt as localApiPost, x as buildStrategy, xt as localApiFetch, y as NextPhase, yt as getRemoteApiRequestOptions, z as LabelService } from "./index.js";
2
- import { A as ReadonlyHeaders, C as NotFoundContext, D as PageLayoutContext, E as PageDocument, M as TypedPage, N as TypedPageContext, O as PageParams, S as MixerContext, T as PageContext, _ as IPageContext, a as IEndUser, b as LocalProvider, c as ILazyComponentProps, d as ILazyProps, f as ILazyStaticProps, g as INullableLazyableProps, h as ILazyedProps, i as IContext, j as SearchParams, k as PartialPageProps, l as ILazyFuncProps, m as ILazyableProps, n as ComponentContext, o as ILazyComponent, p as ILazyStaticPropsFunc, r as ComponentProps, s as ILazyComponentFunc, t as BaseOptions, u as ILazyModules, v as IUser, w as NotFoundParams, x as MarketLocaleParams, y as LayoutContext } from "./types.js";
3
- import { n as RequestInfo, t as ErrorContext } from "./types2.js";
4
- export { ApiRequestOptions, BaseOptions, BuildStrategy, ComponentContext, ComponentProps, ErrorContext, IAlternate, IBrand, IContext, IEndUser, ILazyComponent, ILazyComponentFunc, ILazyComponentProps, ILazyFuncProps, ILazyModules, ILazyProps, ILazyStaticProps, ILazyStaticPropsFunc, ILazyableProps, ILazyedProps, IMeta, IMetaData, IMockCollection, IMockDocument, IMockGlobal, IMockLocale, IMockLocalized, IMockMedia, IMockMenu, IMockMenuItem, IMockPage, IMockStore, INullableLazyableProps, IPageContext, IPaginationInfo, IPaginationItem, IPaginationOptions, IUser, LabelService, LayoutContext, LayoutDefaults, LocalProvider, MarketLocaleParams, MixerContext, NextPhase, NotFoundContext, NotFoundParams, OpenGraphArticle, OpenGraphAudio, OpenGraphBase, OpenGraphBook, OpenGraphBusiness, OpenGraphImage, OpenGraphMusic, OpenGraphPlace, OpenGraphProduct, OpenGraphProductGroup, OpenGraphProfile, OpenGraphRestaurant, OpenGraphType, OpenGraphVideo, OpenGraphWebsite, PageContext, PageDocument, PageLayoutContext, PageParams, PartialPageProps, ReadonlyHeaders, RequestInfo, SearchParams, StoreStrategy, StructuredDataType, TwitterCardApp, TwitterCardBase, TwitterCardPlayer, TwitterCardSummary, TwitterCardSummaryLargeImage, TwitterCardType, TypedPage, TypedPageContext, buildBreadcrumb, buildStrategy, getLabelFromLabels, getLink, getLocalApiRequestOptions, getLocalApiUrl, getMoreItems, getPagedItems, getPaginationInfo, getPublicUrl, getRemoteApiRequestOptions, getRouteLinkCategory, guest, interpolateText, isPaginationInfo, localApiDelete, localApiFetch, localApiGet, localApiPatch, localApiPost, localApiPut, newRouteLink, nextPhase, resolveHref, resolveRoute, routeToLink, routeToRouteLink, sanitizeHref, sanitizeRedirectFrom, sanitizeRedirectTo, sanitizeRedirectUrl, storeCacheDuration, storeStrategy, trimTerminalSlash };
package/dist/route.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.js","names":[],"sources":["../src/lib/route.ts"],"sourcesContent":["import { asCategoryId, findRouteOfCategory, ICategory, IRoute, IRouteLink, localize } from '@websolutespa/bom-core';\r\n\r\nexport function getRouteLinkCategory(\r\n locale: string,\r\n routes: IRoute[],\r\n categories: ICategory[],\r\n rootCategory: ICategory,\r\n category: ICategory\r\n): IRouteLink | IRouteLink[] | undefined {\r\n const route = findRouteOfCategory(routes, category.id);\r\n const otherCategories = categories.filter(x => x.id !== category.id);\r\n const childCategories = otherCategories.filter(x => asCategoryId(x.category) === category.id);\r\n // console.log('childCategories', category.id, childCategories.map(x => x.id));\r\n const routeLink = newRouteLink(category, route, locale);\r\n // console.log('getRouteLinkCategory', href, category.id, route);\r\n const items: IRouteLink[] = [];\r\n for (const childCategory of childCategories) {\r\n const itemOrItems = getRouteLinkCategory(locale, routes, otherCategories, rootCategory, childCategory);\r\n if (Array.isArray(itemOrItems)) {\r\n items.push(...itemOrItems);\r\n } else if (itemOrItems) {\r\n items.push(itemOrItems);\r\n }\r\n }\r\n if (\r\n !route ||\r\n (category.isHidden && category.id !== rootCategory.id)\r\n ) {\r\n return items;\r\n }\r\n routeLink.items = items;\r\n return routeLink;\r\n}\r\n\r\nexport function newRouteLink(category: ICategory, route: IRoute | undefined, locale: string): IRouteLink {\r\n const href = (route && route.id) ? route.id.toString() : '/';\r\n const id = route?.page || category.id;\r\n const media = category.media || route?.media;\r\n const schema = route?.template || route?.schema || category?.schema || 'unknown';\r\n const title = localize(category.title || route?.title || 'untitled', locale);\r\n const routeLink = {\r\n category: category.id,\r\n href,\r\n id,\r\n items: [],\r\n media,\r\n schema,\r\n title,\r\n };\r\n return routeLink;\r\n}\r\n\r\nexport function resolveRoute(route: IRoute) {\r\n return `/${route.market}/${route.locale}/${route.schema}/${route.page}`;\r\n}\r\n\r\nexport function routeToRouteLink(route: IRoute): IRouteLink {\r\n const routeLink: IRouteLink = {\r\n category: asCategoryId(route.category),\r\n href: route.id,\r\n id: route.page,\r\n items: [],\r\n media: route.media,\r\n schema: route.schema,\r\n title: route.title,\r\n };\r\n return routeLink;\r\n}\r\n\r\n/**\r\n * Converts a route (and optional override title) into an IRouteLink.\r\n * route.id is the pathname (href), route.page is the document ID.\r\n */\r\nexport function routeToLink(route: IRoute, title?: string): IRouteLink {\r\n return {\r\n category: route.category,\r\n href: route.id,\r\n id: route.page,\r\n schema: route.schema,\r\n title: title ?? route.title,\r\n media: route.media,\r\n };\r\n}\r\n"],"mappings":";;AAEA,SAAgB,qBACd,QACA,QACA,YACA,cACA,UACuC;CACvC,MAAM,QAAQ,oBAAoB,QAAQ,SAAS,EAAE;CACrD,MAAM,kBAAkB,WAAW,QAAO,MAAK,EAAE,OAAO,SAAS,EAAE;CACnE,MAAM,kBAAkB,gBAAgB,QAAO,MAAK,aAAa,EAAE,QAAQ,MAAM,SAAS,EAAE;CAE5F,MAAM,YAAY,aAAa,UAAU,OAAO,MAAM;CAEtD,MAAM,QAAsB,CAAC;CAC7B,KAAK,MAAM,iBAAiB,iBAAiB;EAC3C,MAAM,cAAc,qBAAqB,QAAQ,QAAQ,iBAAiB,cAAc,aAAa;EACrG,IAAI,MAAM,QAAQ,WAAW,GAC3B,MAAM,KAAK,GAAG,WAAW;OACpB,IAAI,aACT,MAAM,KAAK,WAAW;CAE1B;CACA,IACE,CAAC,SACA,SAAS,YAAY,SAAS,OAAO,aAAa,IAEnD,OAAO;CAET,UAAU,QAAQ;CAClB,OAAO;AACT;AAEA,SAAgB,aAAa,UAAqB,OAA2B,QAA4B;CACvG,MAAM,OAAQ,SAAS,MAAM,KAAM,MAAM,GAAG,SAAS,IAAI;CACzD,MAAM,KAAK,OAAO,QAAQ,SAAS;CACnC,MAAM,QAAQ,SAAS,SAAS,OAAO;CACvC,MAAM,SAAS,OAAO,YAAY,OAAO,UAAU,UAAU,UAAU;CACvE,MAAM,QAAQ,SAAS,SAAS,SAAS,OAAO,SAAS,YAAY,MAAM;CAU3E,OAAO;EARL,UAAU,SAAS;EACnB;EACA;EACA,OAAO,CAAC;EACR;EACA;EACA;CAEa;AACjB;AAEA,SAAgB,aAAa,OAAe;CAC1C,OAAO,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,GAAG,MAAM,OAAO,GAAG,MAAM;AACnE;AAEA,SAAgB,iBAAiB,OAA2B;CAU1D,OAAO;EARL,UAAU,aAAa,MAAM,QAAQ;EACrC,MAAM,MAAM;EACZ,IAAI,MAAM;EACV,OAAO,CAAC;EACR,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,OAAO,MAAM;CAEA;AACjB;;;;;AAMA,SAAgB,YAAY,OAAe,OAA4B;CACrE,OAAO;EACL,UAAU,MAAM;EAChB,MAAM,MAAM;EACZ,IAAI,MAAM;EACV,QAAQ,MAAM;EACd,OAAO,SAAS,MAAM;EACtB,OAAO,MAAM;CACf;AACF"}
package/dist/store.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","names":[],"sources":["../src/lib/breadcrumb.ts","../src/lib/const.ts","../src/lib/store.ts"],"sourcesContent":["import { findRouteOfCategory, ICategory, IRoute, IRouteLink } from '@websolutespa/bom-core';\r\nimport { routeToLink } from './route';\r\n\r\n/**\r\n * Builds the breadcrumb trail from category segments + the current route.\r\n * Uses currentRoutes (already filtered by market+locale) to resolve each segment's href.\r\n * Replicates the logic of getBreadcrumbFromSegments without any store calls.\r\n */\r\nexport function buildBreadcrumb(segments: ICategory[], currentRoute: IRoute, currentRoutes: IRoute[]): IRouteLink[] {\r\n const tree: IRouteLink[] = segments\r\n .map(segment => {\r\n const route = findRouteOfCategory(currentRoutes, segment.id);\r\n return route ? routeToLink(route) : null;\r\n })\r\n .filter((x): x is IRouteLink => x !== null);\r\n // Append the leaf page only when it is not the default/index route of its category\r\n if (!currentRoute.isDefault) {\r\n tree.push(routeToLink(currentRoute));\r\n }\r\n return tree;\r\n}\r\n","import type { Config, User } from '@websolutespa/payload-plugin-bowl';\r\n\r\nexport const guest = { collection: 'users', roles: ['guest'] } as (User & Config['user']);\r\n","export enum NextPhase {\r\n Export = 'phase-export',\r\n ProductionBuild = 'phase-production-build',\r\n ProductionServer = 'phase-production-server',\r\n DevelopmentServer = 'phase-development-server',\r\n Test = 'phase-test',\r\n}\r\n\r\nfunction getNextPhase(): NextPhase {\r\n let nextPhase = NextPhase.Export;\r\n if (typeof process !== 'undefined' && process.env.NEXT_PHASE) {\r\n nextPhase = process.env.NEXT_PHASE as NextPhase;\r\n }\r\n return nextPhase;\r\n}\r\n\r\nexport const nextPhase: NextPhase = getNextPhase();\r\n\r\n// buildStrategy\r\nexport enum BuildStrategy {\r\n Static = 'static',\r\n Runtime = 'runtime',\r\n}\r\n\r\nfunction getBuildStrategy(): BuildStrategy {\r\n let buildStrategy = BuildStrategy.Static;\r\n if (typeof process !== 'undefined' && process.env.BUILD_STRATEGY) {\r\n buildStrategy = process.env.BUILD_STRATEGY as BuildStrategy;\r\n }\r\n return buildStrategy;\r\n}\r\n\r\nexport const buildStrategy: BuildStrategy = getBuildStrategy();\r\n\r\n// storeStrategy\r\nexport enum StoreStrategy {\r\n Local = 'local',\r\n Api = 'api',\r\n DecoratedApi = 'decoratedApi',\r\n Data = 'data',\r\n Mock = 'mock',\r\n}\r\n\r\nfunction getStoreStrategy(): StoreStrategy {\r\n let storeStrategy = StoreStrategy.Mock;\r\n if (typeof process !== 'undefined' && process.env.STORE_STRATEGY) {\r\n storeStrategy = process.env.STORE_STRATEGY as StoreStrategy;\r\n }\r\n return storeStrategy;\r\n}\r\n\r\nexport const storeStrategy: StoreStrategy = getStoreStrategy();\r\n\r\n// storeCacheDuration\r\nfunction getStoreCacheDuration(): number {\r\n let storeCacheDuration = (1 * 60 * 1000);\r\n if (typeof process !== 'undefined' && process.env.STORE_CACHE_DURATION) {\r\n storeCacheDuration = parseInt(process.env.STORE_CACHE_DURATION);\r\n }\r\n return storeCacheDuration;\r\n}\r\n\r\nexport const storeCacheDuration: number = getStoreCacheDuration();\r\n"],"mappings":";;;;;;;;AAQA,SAAgB,gBAAgB,UAAuB,cAAsB,eAAuC;CAClH,MAAM,OAAqB,SACxB,KAAI,YAAW;EACd,MAAM,QAAQ,oBAAoB,eAAe,QAAQ,EAAE;EAC3D,OAAO,QAAQ,YAAY,KAAK,IAAI;CACtC,CAAC,CAAC,CACD,QAAQ,MAAuB,MAAM,IAAI;CAE5C,IAAI,CAAC,aAAa,WAChB,KAAK,KAAK,YAAY,YAAY,CAAC;CAErC,OAAO;AACT;;;AClBA,MAAa,QAAQ;CAAE,YAAY;CAAS,OAAO,CAAC,OAAO;AAAE;;;ACF7D,IAAY,YAAL,yBAAA,WAAA;CACL,UAAA,YAAA;CACA,UAAA,qBAAA;CACA,UAAA,sBAAA;CACA,UAAA,uBAAA;CACA,UAAA,UAAA;;AACF,EAAA,CAAA,CAAA;AAEA,SAAS,eAA0B;CACjC,IAAI,YAAA;CACJ,IAAI,OAAO,YAAY,eAAe,QAAQ,IAAI,YAChD,YAAY,QAAQ,IAAI;CAE1B,OAAO;AACT;AAEA,MAAa,YAAuB,aAAa;AAGjD,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,YAAA;CACA,cAAA,aAAA;;AACF,EAAA,CAAA,CAAA;AAEA,SAAS,mBAAkC;CACzC,IAAI,gBAAA;CACJ,IAAI,OAAO,YAAY,eAAe,QAAQ,IAAI,gBAChD,gBAAgB,QAAQ,IAAI;CAE9B,OAAO;AACT;AAEA,MAAa,gBAA+B,iBAAiB;AAG7D,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,WAAA;CACA,cAAA,SAAA;CACA,cAAA,kBAAA;CACA,cAAA,UAAA;CACA,cAAA,UAAA;;AACF,EAAA,CAAA,CAAA;AAEA,SAAS,mBAAkC;CACzC,IAAI,gBAAA;CACJ,IAAI,OAAO,YAAY,eAAe,QAAQ,IAAI,gBAChD,gBAAgB,QAAQ,IAAI;CAE9B,OAAO;AACT;AAEA,MAAa,gBAA+B,iBAAiB;AAG7D,SAAS,wBAAgC;CACvC,IAAI,qBAAsB;CAC1B,IAAI,OAAO,YAAY,eAAe,QAAQ,IAAI,sBAChD,qBAAqB,SAAS,QAAQ,IAAI,oBAAoB;CAEhE,OAAO;AACT;AAEA,MAAa,qBAA6B,sBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types2.d.ts","names":[],"sources":["../src/instrumentation/types.ts"],"mappings":";KACY,WAAA;EAAA,IAAA,EAAA,MAAA;EAMA,MAAA,EAAA,MAAA;WAHD;;KAGC,YAAA"}