@websolutespa/bom-next 3.0.2 → 4.0.0-next.0

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 (234) hide show
  1. package/CHANGELOG.md +17 -7
  2. package/dist/_virtual/{_rolldown/runtime.js → rolldown_runtime.js} +7 -4
  3. package/dist/client/client.d.ts.map +1 -1
  4. package/dist/client/client.js +17 -6
  5. package/dist/client/client.js.map +1 -1
  6. package/dist/client/extra.d.ts +3 -3
  7. package/dist/client/extra.d.ts.map +1 -1
  8. package/dist/client/extra.js +10 -5
  9. package/dist/client/extra.js.map +1 -1
  10. package/dist/client/label.d.ts.map +1 -1
  11. package/dist/client/label.js +10 -5
  12. package/dist/client/label.js.map +1 -1
  13. package/dist/client/layout.d.ts +3 -3
  14. package/dist/client/layout.d.ts.map +1 -1
  15. package/dist/client/layout.js +10 -5
  16. package/dist/client/layout.js.map +1 -1
  17. package/dist/client/local.collection.d.ts.map +1 -1
  18. package/dist/client/local.collection.js +4 -2
  19. package/dist/client/local.collection.js.map +1 -1
  20. package/dist/client/metadata.d.ts +3 -3
  21. package/dist/client/metadata.d.ts.map +1 -1
  22. package/dist/client/metadata.js +48 -40
  23. package/dist/client/metadata.js.map +1 -1
  24. package/dist/client/page.d.ts +3 -3
  25. package/dist/client/page.d.ts.map +1 -1
  26. package/dist/client/page.js +10 -5
  27. package/dist/client/page.js.map +1 -1
  28. package/dist/client/useApi.d.ts +7 -7
  29. package/dist/client/useApi.d.ts.map +1 -1
  30. package/dist/client/useApi.js +2 -1
  31. package/dist/client/useApi.js.map +1 -1
  32. package/dist/client/useCollectionApi.d.ts +6 -6
  33. package/dist/client/useCollectionApi.d.ts.map +1 -1
  34. package/dist/client/useCollectionApi.js +4 -2
  35. package/dist/client/useCollectionApi.js.map +1 -1
  36. package/dist/client/useExtra.d.ts.map +1 -1
  37. package/dist/client/useExtra.js +5 -2
  38. package/dist/client/useExtra.js.map +1 -1
  39. package/dist/client/useHttp.d.ts.map +1 -1
  40. package/dist/client/useHttp.js +9 -6
  41. package/dist/client/useHttp.js.map +1 -1
  42. package/dist/client/useLabel.d.ts.map +1 -1
  43. package/dist/client/useLabel.js +5 -2
  44. package/dist/client/useLabel.js.map +1 -1
  45. package/dist/client/useLayout.d.ts.map +1 -1
  46. package/dist/client/useLayout.js +5 -2
  47. package/dist/client/useLayout.js.map +1 -1
  48. package/dist/client/useLink.d.ts.map +1 -1
  49. package/dist/client/useLink.js +7 -3
  50. package/dist/client/useLink.js.map +1 -1
  51. package/dist/client/useMetaData.d.ts.map +1 -1
  52. package/dist/client/useMetaData.js +5 -2
  53. package/dist/client/useMetaData.js.map +1 -1
  54. package/dist/client/usePage.d.ts.map +1 -1
  55. package/dist/client/usePage.js +5 -2
  56. package/dist/client/usePage.js.map +1 -1
  57. package/dist/client/useUser.d.ts.map +1 -1
  58. package/dist/client/useUser.js +5 -2
  59. package/dist/client/useUser.js.map +1 -1
  60. package/dist/client/user.d.ts.map +1 -1
  61. package/dist/client/user.js +17 -11
  62. package/dist/client/user.js.map +1 -1
  63. package/dist/exports/client.js +2 -1
  64. package/dist/exports/instrumentation.js +2 -1
  65. package/dist/exports/proxy.js +2 -1
  66. package/dist/exports/server.js +2 -1
  67. package/dist/index.js +2 -1
  68. package/dist/instrumentation/client.d.ts.map +1 -1
  69. package/dist/instrumentation/client.js +2 -1
  70. package/dist/instrumentation/client.js.map +1 -1
  71. package/dist/instrumentation/sentry/capture.requestError.js +4 -1
  72. package/dist/instrumentation/sentry/capture.requestError.js.map +1 -1
  73. package/dist/instrumentation/sentry/capture.routerTransitionStart.js +2 -1
  74. package/dist/instrumentation/sentry/capture.routerTransitionStart.js.map +1 -1
  75. package/dist/instrumentation/sentry/config.client.js +10 -2
  76. package/dist/instrumentation/sentry/config.client.js.map +1 -0
  77. package/dist/instrumentation/sentry/config.edge.js +10 -2
  78. package/dist/instrumentation/sentry/config.edge.js.map +1 -0
  79. package/dist/instrumentation/sentry/config.server.js +10 -2
  80. package/dist/instrumentation/sentry/config.server.js.map +1 -0
  81. package/dist/instrumentation/server.d.ts.map +1 -1
  82. package/dist/instrumentation/server.js +8 -5
  83. package/dist/instrumentation/server.js.map +1 -1
  84. package/dist/instrumentation/types.d.ts.map +1 -1
  85. package/dist/lib/breadcrumb.d.ts.map +1 -1
  86. package/dist/lib/breadcrumb.js +6 -1
  87. package/dist/lib/breadcrumb.js.map +1 -1
  88. package/dist/lib/const.d.ts.map +1 -1
  89. package/dist/lib/const.js +1 -1
  90. package/dist/lib/const.js.map +1 -1
  91. package/dist/lib/http.d.ts.map +1 -1
  92. package/dist/lib/http.js +6 -3
  93. package/dist/lib/http.js.map +1 -1
  94. package/dist/lib/label.d.ts.map +1 -1
  95. package/dist/lib/label.js +4 -3
  96. package/dist/lib/label.js.map +1 -1
  97. package/dist/lib/layout.defaults.d.ts.map +1 -1
  98. package/dist/lib/layout.defaults.js +1 -1
  99. package/dist/lib/layout.defaults.js.map +1 -1
  100. package/dist/lib/link.d.ts.map +1 -1
  101. package/dist/lib/link.js +2 -1
  102. package/dist/lib/link.js.map +1 -1
  103. package/dist/lib/meta-data.d.ts.map +1 -1
  104. package/dist/lib/open-graph.d.ts.map +1 -1
  105. package/dist/lib/pagination.d.ts.map +1 -1
  106. package/dist/lib/pagination.js +4 -2
  107. package/dist/lib/pagination.js.map +1 -1
  108. package/dist/lib/route.d.ts.map +1 -1
  109. package/dist/lib/route.js +9 -3
  110. package/dist/lib/route.js.map +1 -1
  111. package/dist/lib/store.d.ts.map +1 -1
  112. package/dist/lib/store.js +31 -31
  113. package/dist/lib/store.js.map +1 -1
  114. package/dist/lib/structured-data.d.ts.map +1 -1
  115. package/dist/lib/twitter-card.d.ts.map +1 -1
  116. package/dist/lib/utils.d.ts.map +1 -1
  117. package/dist/lib/utils.js +3 -2
  118. package/dist/lib/utils.js.map +1 -1
  119. package/dist/mock.d.ts.map +1 -1
  120. package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js +3 -2
  121. package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js.map +1 -1
  122. package/dist/node_modules/deepmerge/dist/cjs.js +17 -9
  123. package/dist/node_modules/deepmerge/dist/cjs.js.map +1 -1
  124. package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js +2 -2
  125. package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js.map +1 -1
  126. package/dist/node_modules/dom-serializer/lib/esm/index.js +10 -15
  127. package/dist/node_modules/dom-serializer/lib/esm/index.js.map +1 -1
  128. package/dist/node_modules/domelementtype/lib/esm/index.js +12 -12
  129. package/dist/node_modules/domelementtype/lib/esm/index.js.map +1 -1
  130. package/dist/node_modules/domhandler/lib/esm/index.js +4 -3
  131. package/dist/node_modules/domhandler/lib/esm/index.js.map +1 -1
  132. package/dist/node_modules/domhandler/lib/esm/node.js +8 -7
  133. package/dist/node_modules/domhandler/lib/esm/node.js.map +1 -1
  134. package/dist/node_modules/entities/lib/esm/decode.js +33 -32
  135. package/dist/node_modules/entities/lib/esm/decode.js.map +1 -1
  136. package/dist/node_modules/entities/lib/esm/decode_codepoint.js +5 -5
  137. package/dist/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -1
  138. package/dist/node_modules/entities/lib/esm/escape.js +14 -6
  139. package/dist/node_modules/entities/lib/esm/escape.js.map +1 -1
  140. package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js +2 -2
  141. package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -1
  142. package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js +2 -2
  143. package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -1
  144. package/dist/node_modules/html-to-text/lib/html-to-text.js +45 -33
  145. package/dist/node_modules/html-to-text/lib/html-to-text.js.map +1 -1
  146. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js +25 -25
  147. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js.map +1 -1
  148. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js +76 -73
  149. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js.map +1 -1
  150. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js +4 -3
  151. package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js.map +1 -1
  152. package/dist/node_modules/leac/lib/leac.js +72 -72
  153. package/dist/node_modules/leac/lib/leac.js.map +1 -1
  154. package/dist/node_modules/parseley/lib/parseley.js +37 -33
  155. package/dist/node_modules/parseley/lib/parseley.js.map +1 -1
  156. package/dist/node_modules/peberminta/lib/core.js +4 -4
  157. package/dist/node_modules/peberminta/lib/core.js.map +1 -1
  158. package/dist/node_modules/selderee/lib/selderee.js +16 -10
  159. package/dist/node_modules/selderee/lib/selderee.js.map +1 -1
  160. package/dist/proxy/protected-route.d.ts.map +1 -1
  161. package/dist/proxy/protected-route.js +11 -6
  162. package/dist/proxy/protected-route.js.map +1 -1
  163. package/dist/proxy/proxy.d.ts.map +1 -1
  164. package/dist/proxy/proxy.js +17 -2
  165. package/dist/proxy/proxy.js.map +1 -1
  166. package/dist/proxy/route-auto-detection.d.ts.map +1 -1
  167. package/dist/proxy/route-auto-detection.js +26 -14
  168. package/dist/proxy/route-auto-detection.js.map +1 -1
  169. package/dist/proxy/route-proxy.d.ts.map +1 -1
  170. package/dist/proxy/route-proxy.js +22 -5
  171. package/dist/proxy/route-proxy.js.map +1 -1
  172. package/dist/server/context.d.ts.map +1 -1
  173. package/dist/server/context.js +20 -2
  174. package/dist/server/context.js.map +1 -1
  175. package/dist/server/handlers/auth.handler.d.ts.map +1 -1
  176. package/dist/server/handlers/auth.handler.js +4 -2
  177. package/dist/server/handlers/auth.handler.js.map +1 -1
  178. package/dist/server/handlers/captions.handler.d.ts.map +1 -1
  179. package/dist/server/handlers/captions.handler.js +4 -2
  180. package/dist/server/handlers/captions.handler.js.map +1 -1
  181. package/dist/server/handlers/collection.handler.d.ts.map +1 -1
  182. package/dist/server/handlers/collection.handler.js +2 -1
  183. package/dist/server/handlers/collection.handler.js.map +1 -1
  184. package/dist/server/handlers/error-response.js +6 -2
  185. package/dist/server/handlers/error-response.js.map +1 -1
  186. package/dist/server/handlers/index.handler.d.ts.map +1 -1
  187. package/dist/server/handlers/index.handler.js +2 -1
  188. package/dist/server/handlers/index.handler.js.map +1 -1
  189. package/dist/server/handlers/preview.handler.d.ts.map +1 -1
  190. package/dist/server/handlers/preview.handler.js +6 -3
  191. package/dist/server/handlers/preview.handler.js.map +1 -1
  192. package/dist/server/handlers/registry.handler.d.ts.map +1 -1
  193. package/dist/server/handlers/registry.handler.js +14 -9
  194. package/dist/server/handlers/registry.handler.js.map +1 -1
  195. package/dist/server/handlers/route.handler.d.ts.map +1 -1
  196. package/dist/server/handlers/route.handler.js +12 -3
  197. package/dist/server/handlers/route.handler.js.map +1 -1
  198. package/dist/server/handlers/sitemap.handler.d.ts.map +1 -1
  199. package/dist/server/handlers/sitemap.handler.js +12 -9
  200. package/dist/server/handlers/sitemap.handler.js.map +1 -1
  201. package/dist/server/handlers/static-params.handler.d.ts.map +1 -1
  202. package/dist/server/handlers/static-params.handler.js +13 -8
  203. package/dist/server/handlers/static-params.handler.js.map +1 -1
  204. package/dist/server/handlers/vars.handler.d.ts.map +1 -1
  205. package/dist/server/handlers/vars.handler.js +5 -4
  206. package/dist/server/handlers/vars.handler.js.map +1 -1
  207. package/dist/server/layout.js +34 -12
  208. package/dist/server/layout.js.map +1 -1
  209. package/dist/server/lazy.d.ts.map +1 -1
  210. package/dist/server/lazy.js +5 -2
  211. package/dist/server/lazy.js.map +1 -1
  212. package/dist/server/local-api.d.ts.map +1 -1
  213. package/dist/server/local-api.js +12 -6
  214. package/dist/server/local-api.js.map +1 -1
  215. package/dist/server/metadata.d.ts.map +1 -1
  216. package/dist/server/metadata.js +5 -1
  217. package/dist/server/metadata.js.map +1 -1
  218. package/dist/server/mixer-payload.d.ts +1 -1
  219. package/dist/server/mixer-payload.d.ts.map +1 -1
  220. package/dist/server/mixer.d.ts.map +1 -1
  221. package/dist/server/mixer.js +183 -57
  222. package/dist/server/mixer.js.map +1 -1
  223. package/dist/server/page.d.ts.map +1 -1
  224. package/dist/server/page.js +15 -4
  225. package/dist/server/page.js.map +1 -1
  226. package/dist/server/utils.d.ts.map +1 -1
  227. package/dist/server/utils.js +4 -2
  228. package/dist/server/utils.js.map +1 -1
  229. package/dist/server/utmz.d.ts.map +1 -1
  230. package/dist/server/utmz.js +1 -1
  231. package/dist/server/utmz.js.map +1 -1
  232. package/dist/types.d.ts +1 -1
  233. package/dist/types.d.ts.map +1 -1
  234. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"route-proxy.js","names":[],"sources":["../../src/proxy/route-proxy.ts"],"sourcesContent":["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
+ {"version":3,"file":"route-proxy.js","names":["error: unknown"],"sources":["../../src/proxy/route-proxy.ts"],"sourcesContent":["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 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/server/context.ts"],"mappings":";;;;;iBAoBsB,6BAA6B,iBAAiB,mBAAmB,QAAQ,iBAAiB;iBAU1F,6BAA6B,sBAAsB,iBAAiB,SAAM;AAVhG;AAAoC;AAAe;AAAiB;AAA4C,iBAqB1F,qBArB0F,CAAA,cAqBtD,cArBsD,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,IAAA,EAwBxG,KAxBwG,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EA0BtG,OA1BsG,CA0B9F,eA1B8F,CAAA,EAAA,OAAA,CAAA,EA2BpG,OA3BoG,CA2B5F,UA3B4F,CAAA,OA2B1E,OA3B0E,CAAA,CAAA,CAAA,EA4B7G,OA5B6G,CA4BrG,gBA5BqG,CA4BpF,KA5BoF,CAAA,CAAA;AAAjB;AAAR;AAAO;AAU9F;AAAoC;AAAe;AAAuC;AAAjB;AAAuB,iBAiD1E,iBAjD0E,CAAA,cAiD1C,cAjD0C,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,IAAA,EAoDxF,KApDwF,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAsDtF,OAtDsF,CAsD9E,eAtD8E,CAAA,EAAA,OAAA,CAAA,EAuDpF,OAvDoF,CAuD5E,UAvD4E,CAAA,OAuD1D,OAvD0D,CAAA,CAAA,CAAA,EAwD7F,OAxD6F,CAwDrF,gBAxDqF,CAwDpE,KAxDoE,CAAA,CAAA;AAAA;AAWhG;AAA2C;AAAe,iBAiFpC,mBAAA,CAjFoC,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAoFhD,OApFgD,CAoFxC,eApFwC,CAAA,EAAA,OAAA,CAAA,EAqF9C,OArF8C,CAqFtC,UArFsC,CAAA,OAqFpB,OArFoB,CAAA,CAAA,CAAA,EAqFR,OArFQ,CAqFR,YArFQ,CAAA;AAGlD"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/server/context.ts"],"sourcesContent":[],"mappings":";;;;;iBAoBsB,6BAA6B,iBAAiB,mBAAmB,QAAQ,iBAAiB;iBAU1F,6BAA6B,sBAAsB,iBAAiB,SAAM;AAVhG;;;;AAAgH,iBAqB1F,qBArB0F,CAAA,cAqBtD,cArBsD,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,IAAA,EAwBxG,KAxBwG,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EA0BtG,OA1BsG,CA0B9F,eA1B8F,CAAA,EAAA,OAAA,CAAA,EA2BpG,OA3BoG,CA2B5F,UA3B4F,CAAA,OA2B1E,OA3B0E,CAAA,CAAA,CAAA,EA4B7G,OA5B6G,CA4BrG,gBA5BqG,CA4BpF,KA5BoF,CAAA,CAAA;;;AAAlB;AAU9F;;;;;AAAgG,iBAiD1E,iBAjD0E,CAAA,cAiD1C,cAjD0C,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,IAAA,EAoDxF,KApDwF,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAsDtF,OAtDsF,CAsD9E,eAtD8E,CAAA,EAAA,OAAA,CAAA,EAuDpF,OAvDoF,CAuD5E,UAvD4E,CAAA,OAuD1D,OAvD0D,CAAA,CAAA,CAAA,EAwD7F,OAxD6F,CAwDrF,gBAxDqF,CAwDpE,KAxDoE,CAAA,CAAA;AAAA;AAWhG;;AAA0D,iBAiFpC,mBAAA,CAjFoC,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAoFhD,OApFgD,CAoFxC,eApFwC,CAAA,EAAA,OAAA,CAAA,EAqF9C,OArF8C,CAqFtC,UArFsC,CAAA,OAqFpB,OArFoB,CAAA,CAAA,CAAA,EAqFR,OArFQ,CAqFR,YArFQ,CAAA"}
@@ -1,14 +1,20 @@
1
- "use server";
1
+ 'use server';
2
+
3
+
2
4
  import { getLabelFromLabels } from "../lib/label.js";
3
5
  import { getLink } from "../lib/link.js";
4
6
  import { getPayload } from "./mixer.js";
5
7
  import { getLayout } from "./layout.js";
6
8
  import { getPage } from "./page.js";
7
9
  import { cache } from "react";
10
+
8
11
  //#region src/server/context.ts
9
12
  /**
13
+
10
14
  * Per-request context store (React.cache ensures a fresh Map per RSC render).
15
+
11
16
  * Safe to use inside Next.js server components — do NOT call this at build time.
17
+
12
18
  */
13
19
  const PageContext = cache(() => {
14
20
  return /* @__PURE__ */ new Map();
@@ -27,8 +33,11 @@ async function setPageContext(data) {
27
33
  for (const key in data) context.set(key, data[key]);
28
34
  }
29
35
  /**
36
+
30
37
  * Same as createPageContext but without draft mode — used for error/not-found pages
38
+
31
39
  * that should always show published content regardless of draft mode state.
40
+
32
41
  */
33
42
  async function createNotFoundContext(market, locale, slug, id, config, headers) {
34
43
  const { payload, user, getContext } = await getPayload({
@@ -51,12 +60,19 @@ async function createNotFoundContext(market, locale, slug, id, config, headers)
51
60
  return pageContext;
52
61
  }
53
62
  /**
63
+
54
64
  * Initialises the full page context using Payload local API.
65
+
55
66
  *
67
+
56
68
  * Replaces the @websolutespa/bom-next/server createPageContext that goes through the store
69
+
57
70
  * abstraction. All data is fetched directly from Payload; the mixer context
71
+
58
72
  * (routes + categories) is passed to every payload.find call so that
73
+
59
74
  * payload-plugin-bowl can enrich responses.
75
+
60
76
  */
61
77
  async function createPageContext(market, locale, slug, id, config, headers) {
62
78
  const draft = { isEnabled: false };
@@ -80,7 +96,9 @@ async function createPageContext(market, locale, slug, id, config, headers) {
80
96
  return pageContext;
81
97
  }
82
98
  /**
99
+
83
100
  * Layout-only context — no page fetch. Used by RootLayout server components.
101
+
84
102
  */
85
103
  async function createLayoutContext(market, locale, config, headers) {
86
104
  const { payload, user, getContext } = await getPayload({
@@ -100,7 +118,7 @@ async function createLayoutContext(market, locale, config, headers) {
100
118
  setPageContext(pageContext);
101
119
  return pageContext;
102
120
  }
121
+
103
122
  //#endregion
104
123
  export { createLayoutContext, createNotFoundContext, createPageContext, getPageContext, setPageContext };
105
-
106
124
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../src/server/context.ts"],"sourcesContent":["'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"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,cAAc,YAAY;CAC9B,uBAAO,IAAI,IAAiB;AAC9B,CAAC;AAED,eAAsB,iBAAkG;CACtH,OAAO;EACL,QAAQ,YAAY,CAAC,CAAC,IAAI,QAAQ;EAClC,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM;EAC9B,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,KAAK;EACnC,OAAO,YAAY,CAAC,CAAC,IAAI,OAAO;EAChC,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM;CAChC;AACF;AAEA,eAAsB,eAA6C,MAA+B;CAChG,MAAM,UAAU,YAAY;CAC5B,KAAK,MAAM,OAAO,MAChB,QAAQ,IAAI,KAAK,KAAK,IAA0B;AAEpD;;;;;AAMA,eAAsB,sBACpB,QACA,QACA,MACA,IACA,QACA,SACkC;CAClC,MAAM,EAAE,SAAS,MAAM,eAAe,MAAM,WAAW;EAAE;EAAQ;CAAQ,CAAC;CAC1E,MAAM,UAAU,MAAM,WAAW,QAAQ,MAAM;CAE/C,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,OAAO;CACrE,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ,SAAS,MAAM,OAAO;CAE3E,MAAM,QAAQ,mBAAmB,OAAO,MAAM;CAC9C,MAAM,QAAQ,aAAqB,QAAQ,UAAU,MAAM;CAE3D,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;CACF;CAEA,eAAe,WAAW;CAE1B,OAAO;AACT;;;;;;;;;AAUA,eAAsB,kBACpB,QACA,QACA,MACA,IACA,QACA,SACkC;CAGlC,MAAM,QAAQ,EAAE,WAAW,MAAM;CAEjC,MAAM,EAAE,SAAS,MAAM,eAAe,MAAM,WAAW;EAAE;EAAQ;CAAQ,CAAC;CAC1E,MAAM,UAAU,MAAM,WAAW,QAAQ,MAAM;CAE/C,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,SAAS,MAAM,SAAS;CACtF,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ,SAAS,MAAM,SAAS,MAAM,SAAS;CAE5F,MAAM,QAAQ,mBAAmB,OAAO,MAAM;CAC9C,MAAM,QAAQ,aAAqB,QAAQ,UAAU,MAAM;CAE3D,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;CACF;CAEA,eAAe,WAAW;CAQ1B,OAAO;AACT;;;;AAKA,eAAsB,oBACpB,QACA,QACA,QACA,SACA;CACA,MAAM,EAAE,SAAS,MAAM,eAAe,MAAM,WAAW;EAAE;EAAQ;CAAQ,CAAC;CAC1E,MAAM,UAAU,MAAM,WAAW,QAAQ,MAAM;CAE/C,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,OAAO;CAErE,MAAM,QAAQ,mBAAmB,OAAO,MAAM;CAC9C,MAAM,QAAQ,aAAqB,QAAQ,UAAU,MAAM;CAE3D,MAAM,cAAc;EAClB;EACA;EACA;EACA;CACF;CAEA,eAAe,WAAW;CAE1B,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":["data: TypedPageContext<TSlug>","market: string","locale: string","slug: TSlug","id: string","config: Promise<SanitizedConfig>","headers?: Awaited<ReturnType<typeof getHeaders>>","category: string"],"sources":["../../src/server/context.ts"],"sourcesContent":["'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"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,MAAM,cAAc,MAAM,MAAM;AAC9B,wBAAO,IAAI;AACZ,EAAC;AAEF,eAAsB,iBAAkG;AACtH,QAAO;EACL,QAAQ,aAAa,CAAC,IAAI,SAAS;EACnC,MAAM,aAAa,CAAC,IAAI,OAAO;EAC/B,MAAM,aAAa,CAAC,IAAI,OAAO,IAAI;EACnC,OAAO,aAAa,CAAC,IAAI,QAAQ;EACjC,MAAM,aAAa,CAAC,IAAI,OAAO;CAChC;AACF;AAED,eAAsB,eAA6CA,MAA+B;CAChG,MAAM,UAAU,aAAa;AAC7B,MAAK,MAAM,OAAO,MAChB,QAAQ,IAAI,KAAK,KAAK,KAA2B;AAEpD;;;;;;;;AAMD,eAAsB,sBACpBC,QACAC,QACAC,MACAC,IACAC,QACAC,SACkC;CAClC,MAAM,EAAE,SAAS,MAAM,YAAY,GAAG,MAAM,WAAW;EAAE;EAAQ;CAAS,EAAC;CAC3E,MAAM,UAAU,MAAM,WAAW,QAAQ,OAAO;CAEhD,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,QAAQ;CACtE,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ,SAAS,MAAM,QAAQ;CAE5E,MAAM,QAAQ,mBAAmB,OAAO,OAAO;CAC/C,MAAM,OAAO,CAACC,aAAqB,QAAQ,UAAU,OAAO;CAE5D,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;CACD;CAED,eAAe,YAAY;AAE3B,QAAO;AACR;;;;;;;;;;;;;;;;AAUD,eAAsB,kBACpBN,QACAC,QACAC,MACAC,IACAC,QACAC,SACkC;CAGlC,MAAM,QAAQ,EAAE,WAAW,MAAO;CAElC,MAAM,EAAE,SAAS,MAAM,YAAY,GAAG,MAAM,WAAW;EAAE;EAAQ;CAAS,EAAC;CAC3E,MAAM,UAAU,MAAM,WAAW,QAAQ,OAAO;CAEhD,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,SAAS,MAAM,UAAU;CACvF,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ,SAAS,MAAM,SAAS,MAAM,UAAU;CAE7F,MAAM,QAAQ,mBAAmB,OAAO,OAAO;CAC/C,MAAM,OAAO,CAACC,aAAqB,QAAQ,UAAU,OAAO;CAE5D,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;CACD;CAED,eAAe,YAAY;AAQ3B,QAAO;AACR;;;;;;AAKD,eAAsB,oBACpBN,QACAC,QACAG,QACAC,SACA;CACA,MAAM,EAAE,SAAS,MAAM,YAAY,GAAG,MAAM,WAAW;EAAE;EAAQ;CAAS,EAAC;CAC3E,MAAM,UAAU,MAAM,WAAW,QAAQ,OAAO;CAEhD,MAAM,SAAS,MAAM,UAAU,QAAQ,QAAQ,SAAS,MAAM,QAAQ;CAEtE,MAAM,QAAQ,mBAAmB,OAAO,OAAO;CAC/C,MAAM,OAAO,CAACC,aAAqB,QAAQ,UAAU,OAAO;CAE5D,MAAM,cAAc;EAClB;EACA;EACA;EACA;CACD;CAED,eAAe,YAAY;AAE3B,QAAO;AACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.handler.d.ts","names":[],"sources":["../../../src/server/handlers/auth.handler.ts"],"mappings":";;;;iBAMgB,gBAAA,SAAyB,QAAQ,6BACf,gBAAW,QAAA"}
1
+ {"version":3,"file":"auth.handler.d.ts","names":[],"sources":["../../../src/server/handlers/auth.handler.ts"],"sourcesContent":[],"mappings":";;;;iBAMgB,gBAAA,SAAyB,QAAQ,6BACf,gBAAW,QAAA"}
@@ -1,6 +1,7 @@
1
1
  import { getPayload } from "../mixer.js";
2
2
  import { getHandlerErrorResponse } from "./error-response.js";
3
3
  import { headers } from "next/headers";
4
+
4
5
  //#region src/server/handlers/auth.handler.ts
5
6
  function getAuthMeHandler(config) {
6
7
  return async function(request) {
@@ -10,7 +11,8 @@ function getAuthMeHandler(config) {
10
11
  config,
11
12
  headers: headers$1
12
13
  });
13
- if ((user?.roles || []).includes("user") && "firstName" in user) return Response.json({
14
+ const roles = user?.roles || [];
15
+ if (roles.includes("user") && "firstName" in user) return Response.json({
14
16
  id: user.id,
15
17
  email: user.email,
16
18
  firstName: user.firstName,
@@ -23,7 +25,7 @@ function getAuthMeHandler(config) {
23
25
  }
24
26
  };
25
27
  }
28
+
26
29
  //#endregion
27
30
  export { getAuthMeHandler };
28
-
29
31
  //# sourceMappingURL=auth.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.handler.js","names":["headers","getHeaders"],"sources":["../../../src/server/handlers/auth.handler.ts"],"sourcesContent":["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"],"mappings":";;;;AAMA,SAAgB,iBAAiB,QAAkC;CACjE,OAAO,eAAgB,SAAsB;EAC3C,IAAI;GACF,MAAMA,YAAU,MAAMC,QAAW;GACjC,MAAM,EAAE,SAAS,MAAM,WAAW;IAAE;IAAQ,SAAA;GAAQ,CAAC;GAErD,KADe,MAAM,SAAS,CAAC,EAAA,CACrB,SAAS,MAAM,KAAK,eAAe,MAC3C,OAAO,SAAS,KAAK;IACnB,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,WAAW,KAAK;IAChB,UAAU,KAAK;GACjB,GAAG,EAAE,QAAQ,IAAI,CAAC;GAEpB,OAAO,SAAS,KAAK,MAAM,EAAE,QAAQ,IAAI,CAAC;EAC5C,SAAS,OAAO;GACd,QAAQ,IAAI,0BAA0B,KAAK;GAC3C,OAAO,wBAAwB,KAAK;EACtC;CACF;AACF"}
1
+ {"version":3,"file":"auth.handler.js","names":["config: Promise<SanitizedConfig>","request: NextRequest","headers","getHeaders"],"sources":["../../../src/server/handlers/auth.handler.ts"],"sourcesContent":["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"],"mappings":";;;;;AAMA,SAAgB,iBAAiBA,QAAkC;AACjE,QAAO,eAAgBC,SAAsB;AAC3C,MAAI;GACF,MAAMC,YAAU,MAAMC,SAAY;GAClC,MAAM,EAAE,MAAM,GAAG,MAAM,WAAW;IAAE;IAAQ;GAAS,EAAC;GACtD,MAAM,QAAS,MAAM,SAAS,CAAE;AAChC,OAAI,MAAM,SAAS,OAAO,IAAI,eAAe,KAC3C,QAAO,SAAS,KAAK;IACnB,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,WAAW,KAAK;IAChB,UAAU,KAAK;GAChB,GAAE,EAAE,QAAQ,IAAK,EAAC;AAErB,UAAO,SAAS,KAAK,MAAM,EAAE,QAAQ,IAAK,EAAC;EAC5C,SAAQ,OAAO;GACd,QAAQ,IAAI,0BAA0B,MAAM;AAC5C,UAAO,wBAAwB,MAAM;EACtC;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"captions.handler.d.ts","names":[],"sources":["../../../src/server/handlers/captions.handler.ts"],"mappings":";;;;iBAIgB,cAAA,SAAuB,QAAQ,6BACb,gBAAW,QAAA"}
1
+ {"version":3,"file":"captions.handler.d.ts","names":[],"sources":["../../../src/server/handlers/captions.handler.ts"],"sourcesContent":[],"mappings":";;;;iBAIgB,cAAA,SAAuB,QAAQ,6BACb,gBAAW,QAAA"}
@@ -1,9 +1,11 @@
1
1
  import { getHandlerErrorResponse } from "./error-response.js";
2
+
2
3
  //#region src/server/handlers/captions.handler.ts
3
4
  function getCaptionsVTT(config) {
4
5
  return async function(request) {
5
6
  try {
6
- const title = request.nextUrl.searchParams.get("title") || "Untitled";
7
+ const searchParams = request.nextUrl.searchParams;
8
+ const title = searchParams.get("title") || "Untitled";
7
9
  const body = `WEBVTT
8
10
 
9
11
  00:00:01.000 --> 00:00:03.000
@@ -27,7 +29,7 @@ ${title ? `
27
29
  }
28
30
  };
29
31
  }
32
+
30
33
  //#endregion
31
34
  export { getCaptionsVTT };
32
-
33
35
  //# sourceMappingURL=captions.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"captions.handler.js","names":[],"sources":["../../../src/server/handlers/captions.handler.ts"],"sourcesContent":["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"],"mappings":";;AAIA,SAAgB,eAAe,QAAkC;CAC/D,OAAO,eAAgB,SAAsB;EAC3C,IAAI;GAEF,MAAM,QADe,QAAQ,QAAQ,aACV,IAAI,OAAO,KAAK;GAC3C,MAAM,OAAiB;;;;;EAK3B,QAAQ;;+BAEqB,MAAM;IACjC;GACE,OAAO,IAAI,SAAS,MAAM;IACxB,QAAQ;IACR,SAAS;KACP,gBAAgB;KAChB,mBAAmB;KACnB,gBAAgB;IAClB;GACF,CAAC;EACH,SAAS,OAAgB;GACvB,QAAQ,MAAM,wBAAwB,KAAK;GAC3C,OAAO,wBAAwB,KAAK;EACtC;CACF;AACF"}
1
+ {"version":3,"file":"captions.handler.js","names":["config: Promise<SanitizedConfig>","request: NextRequest","error: unknown"],"sources":["../../../src/server/handlers/captions.handler.ts"],"sourcesContent":["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"],"mappings":";;;AAIA,SAAgB,eAAeA,QAAkC;AAC/D,QAAO,eAAgBC,SAAsB;AAC3C,MAAI;GACF,MAAM,eAAe,QAAQ,QAAQ;GACrC,MAAM,QAAQ,aAAa,IAAI,QAAQ,IAAI;GAC3C,MAAM,OAAiB,CAAC;;;;;AAK9B,EAAE,QAAQ,CAAC;;6BAEkB,EAAE,MAAM;AACrC,CAAC,GAAG,IAAI;AACF,UAAO,IAAI,SAAS,MAAM;IACxB,QAAQ;IACR,SAAS;KACP,gBAAgB;KAChB,mBAAmB;KACnB,gBAAgB;IACjB;GACF;EACF,SAAQC,OAAgB;GACvB,QAAQ,MAAM,wBAAwB,MAAM;AAC5C,UAAO,wBAAwB,MAAM;EACtC;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"collection.handler.d.ts","names":[],"sources":["../../../src/server/handlers/collection.handler.ts"],"mappings":";;;iBAUgB,oBAAA,SAA6B,QAAQ,6BACnB;UAAS;AADU;UAIzC;IAJI,WAAA,EAAA,MAAoB,EAAA;EAAA,CAAA,CAAA;AAAiB,CAAA,EAAA,GAKlD,OALkD,CAKlD,QALkD,CAAA;AAAR,iBAgF7B,qBAAA,CAhF6B,MAAA,EAgFC,OAhFD,CAgFS,eAhFT,CAAA,CAAA,EAAA,CAAA,OAAA,EAiFX,OAjFW,EAAA;EAAA,MAAA,EAiFF;AA5ExC,CAL0C,EAAA;EACX,MAAA,EAmFtB,OAnFsB,CAAA;IAAS,WAAA,EAAA,MAAA,EAAA;EAG/B,CAAA,CAAA;AACT,CAAA,EAAA,GAgFA,OAhFA,CAgFA,QAhFA,GAAA,SAAA,CAAA;AAAA,iBAwHa,sBAAA,CAxHb,MAAA,EAwH4C,OAxH5C,CAwHoD,eAxHpD,CAAA,CAAA,EAAA,CAAA,OAAA,EAyH+B,OAzH/B,EAAA;EAAA,MAAA,EAyHwC;AA9CW,CA3EnD,EAAA;EAAA,MAAA,EA4HS,OA5HT,CAAA;IA2Ea,WAAA,EAAA,MAAA,EAAqB;EAAA,CAAA,CAAA;AAAiB,CAAA,EAAA,GAkDnD,OAlDmD,CAkDnD,QAlDmD,GAAA,SAAA,CAAA;AAAR,iBAoF9B,uBAAA,CApF8B,MAAA,EAoFE,OApFF,CAoFU,eApFV,CAAA,CAAA,EAAA,CAAA,OAAA,EAqFZ,OArFY,EAAA;EAAA,MAAA,EAqFH;AAhFxC,CAL2C,EAAA;EACZ,MAAA,EAuFtB,OAvFsB,CAAA;IAAS,WAAA,EAAA,MAAA,EAAA;EAG/B,CAAA,CAAA;AACT,CAAA,EAAA,GAoFA,OApFA,CAoFA,QApFA,GAAA,SAAA,CAAA;AAAA"}
1
+ {"version":3,"file":"collection.handler.d.ts","names":[],"sources":["../../../src/server/handlers/collection.handler.ts"],"sourcesContent":[],"mappings":";;;iBAUgB,oBAAA,SAA6B,QAAQ,6BACnB;UAAS;;UAG/B;IAJI,WAAA,EAAA,MAAoB,EAAA;EAAA,CAAA,CAAA;CAAA,EAAA,GAKjC,OALkD,CAKlD,QALkD,CAAA;AAAR,iBAgF7B,qBAAA,CAhF6B,MAAA,EAgFC,OAhFD,CAgFS,eAhFT,CAAA,CAAA,EAAA,CAAA,OAAA,EAiFX,OAjFW,EAAA;EAAA,MAAA,EAiFF;CAjFE,EAAA;EAAO,MAClB,EAmFtB,OAnFsB,CAAA;IAAS,WAAA,EAAA,MAAA,EAAA;EAAA,CAAA,CAAA;CAGxB,EAAA,GAiFhB,OAhFA,CAgFA,QAhFA,GAAA,SAAA,CAAA;AAAA,iBAwHa,sBAAA,CAxHb,MAAA,EAwH4C,OAxH5C,CAwHoD,eAxHpD,CAAA,CAAA,EAAA,CAAA,OAAA,EAyH+B,OAzH/B,EAAA;EAAA,MAAA,EAyHwC;CAzHxC,EAAA;EAAA,MAAA,EA4HS,OA5HT,CAAA;IA2Ea,WAAA,EAAA,MAAA,EAAqB;EAAA,CAAA,CAAA;CAAA,EAAA,GAkDlC,OAlDmD,CAkDnD,QAlDmD,GAAA,SAAA,CAAA;AAAR,iBAoF9B,uBAAA,CApF8B,MAAA,EAoFE,OApFF,CAoFU,eApFV,CAAA,CAAA,EAAA,CAAA,OAAA,EAqFZ,OArFY,EAAA;EAAA,MAAA,EAqFH;CArFG,EAAA;EAAO,MACnB,EAuFtB,OAvFsB,CAAA;IAAS,WAAA,EAAA,MAAA,EAAA;EAAA,CAAA,CAAA;CAGxB,EAAA,GAqFhB,OApFA,CAoFA,QApFA,GAAA,SAAA,CAAA"}
@@ -3,6 +3,7 @@ import { getHandlerErrorResponse } from "./error-response.js";
3
3
  import { getLocalApi } from "../local-api.js";
4
4
  import { qsDeserialize } from "@websolutespa/bom-core";
5
5
  import { headers } from "next/headers";
6
+
6
7
  //#region src/server/handlers/collection.handler.ts
7
8
  function collectionGetHandler(config) {
8
9
  return async function(request, { params: getParams }) {
@@ -160,7 +161,7 @@ function collectionDeleteHandler(config) {
160
161
  }
161
162
  };
162
163
  }
164
+
163
165
  //#endregion
164
166
  export { collectionDeleteHandler, collectionGetHandler, collectionPatchHandler, collectionPostHandler };
165
-
166
167
  //# sourceMappingURL=collection.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.handler.js","names":["headers","getHeaders"],"sources":["../../../src/server/handlers/collection.handler.ts"],"sourcesContent":["\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"],"mappings":"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"}
1
+ {"version":3,"file":"collection.handler.js","names":["config: Promise<SanitizedConfig>","request: Request","headers","getHeaders","id: string","error: unknown"],"sources":["../../../src/server/handlers/collection.handler.ts"],"sourcesContent":["\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"],"mappings":"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"}
@@ -6,19 +6,23 @@ const isPublic = (error, status) => {
6
6
  return error.isPublic === true || error.isPublic === void 0 && status >= 400 && status < 500;
7
7
  };
8
8
  /**
9
+
9
10
  * Converts errors thrown by Next or Payload handlers into Payload-compatible
11
+
10
12
  * API responses without exposing messages or data from non-public errors.
13
+
11
14
  */
12
15
  function getHandlerErrorResponse(error) {
13
16
  const statusError = error && typeof error === "object" ? error : {};
14
17
  const status = getStatus(statusError);
15
18
  const publicError = isPublic(statusError, status);
16
- const payloadError = { message: publicError && typeof statusError.message === "string" ? statusError.message : publicError && typeof statusError.statusText === "string" ? statusError.statusText : "Something went wrong." };
19
+ const message = publicError && typeof statusError.message === "string" ? statusError.message : publicError && typeof statusError.statusText === "string" ? statusError.statusText : "Something went wrong.";
20
+ const payloadError = { message };
17
21
  if (publicError && typeof statusError.name === "string") payloadError.name = statusError.name;
18
22
  if (publicError && statusError.data !== null && statusError.data !== void 0) payloadError.data = statusError.data;
19
23
  return Response.json({ errors: [payloadError] }, { status });
20
24
  }
25
+
21
26
  //#endregion
22
27
  export { getHandlerErrorResponse };
23
-
24
28
  //# sourceMappingURL=error-response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-response.js","names":[],"sources":["../../../src/server/handlers/error-response.ts"],"sourcesContent":["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"],"mappings":";AAeA,MAAM,aAAa,UAA+B;CAC9C,OAAO,OAAO,MAAM,WAAW,YAAY,MAAM,UAAU,OAAO,MAAM,SAAS,MAAM,MAAM,SAAS;AAC1G;AAEA,MAAM,YAAY,OAAoB,WAA4B;CAC9D,OAAO,MAAM,aAAa,QAAS,MAAM,aAAa,KAAA,KAAa,UAAU,OAAO,SAAS;AACjG;;;;;AAMA,SAAgB,wBAAwB,OAA0B;CAC9D,MAAM,cAAc,SAAS,OAAO,UAAU,WAAW,QAAuB,CAAC;CACjF,MAAM,SAAS,UAAU,WAAW;CACpC,MAAM,cAAc,SAAS,aAAa,MAAM;CAIhD,MAAM,eAAiC,EAAE,SAHzB,eAAe,OAAO,YAAY,YAAY,WAC1D,YAAY,UACZ,eAAe,OAAO,YAAY,eAAe,WAAW,YAAY,aAAa,wBACxC;CAEjD,IAAI,eAAe,OAAO,YAAY,SAAS,UAC3C,aAAa,OAAO,YAAY;CAEpC,IAAI,eAAe,YAAY,SAAS,QAAQ,YAAY,SAAS,KAAA,GACjE,aAAa,OAAO,YAAY;CAGpC,OAAO,SAAS,KAAK,EAAE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC;AAC/D"}
1
+ {"version":3,"file":"error-response.js","names":["error: StatusError","status: number","error: unknown","payloadError: PayloadErrorItem"],"sources":["../../../src/server/handlers/error-response.ts"],"sourcesContent":["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"],"mappings":";AAeA,MAAM,YAAY,CAACA,UAA+B;AAC9C,QAAO,OAAO,MAAM,WAAW,YAAY,MAAM,UAAU,OAAO,MAAM,SAAS,MAAM,MAAM,SAAS;AACzG;AAED,MAAM,WAAW,CAACA,OAAoBC,WAA4B;AAC9D,QAAO,MAAM,aAAa,QAAS,MAAM,aAAa,UAAa,UAAU,OAAO,SAAS;AAChG;;;;;;;;AAMD,SAAgB,wBAAwBC,OAA0B;CAC9D,MAAM,cAAc,SAAS,OAAO,UAAU,WAAW,QAAuB,CAAE;CAClF,MAAM,SAAS,UAAU,YAAY;CACrC,MAAM,cAAc,SAAS,aAAa,OAAO;CACjD,MAAM,UAAU,eAAe,OAAO,YAAY,YAAY,WAC1D,YAAY,UACZ,eAAe,OAAO,YAAY,eAAe,WAAW,YAAY,aAAa;CACzF,MAAMC,eAAiC,EAAE,QAAS;AAElD,KAAI,eAAe,OAAO,YAAY,SAAS,UAC3C,aAAa,OAAO,YAAY;AAEpC,KAAI,eAAe,YAAY,SAAS,QAAQ,YAAY,SAAS,QACjE,aAAa,OAAO,YAAY;AAGpC,QAAO,SAAS,KAAK,EAAE,QAAQ,CAAC,YAAa,EAAE,GAAE,EAAE,OAAQ,EAAC;AAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.handler.d.ts","names":[],"sources":["../../../src/server/handlers/index.handler.ts"],"mappings":";;;iBAIgB,eAAA,SAAwB,QAAQ,6BACd,YAAO,QAAA"}
1
+ {"version":3,"file":"index.handler.d.ts","names":[],"sources":["../../../src/server/handlers/index.handler.ts"],"sourcesContent":[],"mappings":";;;iBAIgB,eAAA,SAAwB,QAAQ,6BACd,YAAO,QAAA"}
@@ -1,6 +1,7 @@
1
1
  import { getHandlerErrorResponse } from "./error-response.js";
2
2
  import { defaultLocale, defaultMarket } from "@websolutespa/bom-core";
3
3
  import { getPayload } from "payload";
4
+
4
5
  //#region src/server/handlers/index.handler.ts
5
6
  function indexGetHandler(config) {
6
7
  return async function(request) {
@@ -139,7 +140,7 @@ function indexGetHandler(config) {
139
140
  }
140
141
  };
141
142
  }
143
+
142
144
  //#endregion
143
145
  export { indexGetHandler };
144
-
145
146
  //# sourceMappingURL=index.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.handler.js","names":[],"sources":["../../../src/server/handlers/index.handler.ts"],"sourcesContent":["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"],"mappings":";;;;AAIA,SAAgB,gBAAgB,QAAkC;CAChE,OAAO,eAAgB,SAAkB;EACvC,IAAI;GACF,MAAM,UAAU,MAAM,WAAW,EAAE,OAAO,CAAC;GAC3C,MAAM,OAAO,CACX,GAAG,QAAQ,OAAO,YAAY,KAAI,MAAK,EAAE,IAAI,GAC7C,GAAG,QAAQ,OAAO,QAAQ,KAAI,MAAK,EAAE,IAAI,CAC3C;GACA,KAAK,KAAK;GACV,MAAM,SAAS;GACf,MAAM,SAAS;GACf,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,MAAM,WAAW,GAAG;IAC9C,QAAQ,MAAM,yBAAyB,yBAAyB,IAAI;IACpE,OAAO,IAAI,SAAS,sBAAsB;KACxC,QAAQ;KACR,YAAY;IACd,CAAC;GACH;GACA,OAAO,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA8Fd,KAAK,KAAI,MAAM;;;oBAGP,EAAE;kCACY,EAAE,UAAU,OAAO,UAAU,OAAO,yBAAyB,EAAE;;;;oBAI7E,EAAE;kCACY,EAAE,YAAY,OAAO,UAAU,OAAO,yBAAyB,EAAE;;WAEvF,CAAC,CAAC,KAAK,IAAI,EAAE;;;;;OAKlB,EACC,SAAS;IACP,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;GAClB,EACF,CAAC;EACH,SAAS,OAAgB;GACvB,MAAM,WAAW,wBAAwB,KAAK;GAC9C,QAAQ,MAAM,+BAA+B,SAAS,QAAQ,KAAK;GACnE,OAAO;EACT;CACF;AACF"}
1
+ {"version":3,"file":"index.handler.js","names":["config: Promise<SanitizedConfig>","request: Request","error: unknown"],"sources":["../../../src/server/handlers/index.handler.ts"],"sourcesContent":["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"],"mappings":";;;;;AAIA,SAAgB,gBAAgBA,QAAkC;AAChE,QAAO,eAAgBC,SAAkB;AACvC,MAAI;GACF,MAAM,UAAU,MAAM,WAAW,EAAE,OAAQ,EAAC;GAC5C,MAAM,OAAO,CACX,GAAG,QAAQ,OAAO,YAAY,IAAI,OAAK,EAAE,KAAK,EAC9C,GAAG,QAAQ,OAAO,QAAQ,IAAI,OAAK,EAAE,KAAK,AAC3C;GACD,KAAK,MAAM;GACX,MAAM,SAAS;GACf,MAAM,SAAS;AACf,OAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,MAAM,WAAW,GAAG;IAC9C,QAAQ,MAAM,yBAAyB,yBAAyB,KAAK;AACrE,WAAO,IAAI,SAAS,sBAAsB;KACxC,QAAQ;KACR,YAAY;IACb;GACF;AACD,UAAO,IAAI,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA8FjB,EAAE,KAAK,IAAI,OAAM,CAAC;;;kBAGV,EAAE,EAAE;gCACU,EAAE,EAAE,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,uBAAuB,EAAE,EAAE;;;;kBAI/E,EAAE,EAAE;gCACU,EAAE,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE,OAAO,uBAAuB,EAAE,EAAE;;UAEzF,CAAC,CAAE,CAAC,KAAK,KAAK,CAAC;;;;;IAKrB,CAAC,EAAE,EACC,SAAS;IACP,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;GACjB,EACF;EACF,SAAQC,OAAgB;GACvB,MAAM,WAAW,wBAAwB,MAAM;GAC/C,QAAQ,MAAM,+BAA+B,SAAS,QAAQ,MAAM;AACpE,UAAO;EACR;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.handler.d.ts","names":[],"sources":["../../../src/server/handlers/preview.handler.ts"],"mappings":";;;iBAKsB,cAAA,UAAwB,cAAW,QAAA"}
1
+ {"version":3,"file":"preview.handler.d.ts","names":[],"sources":["../../../src/server/handlers/preview.handler.ts"],"sourcesContent":[],"mappings":";;;iBAKsB,cAAA,UAAwB,cAAW,QAAA"}
@@ -1,15 +1,18 @@
1
1
  import { NextResponse } from "next/server";
2
2
  import { draftMode } from "next/headers";
3
+
3
4
  //#region src/server/handlers/preview.handler.ts
4
5
  async function previewHandler(request) {
5
6
  const { searchParams } = new URL(request.url);
6
- const { marketId, localeId, templateId, documentId, _status, _live } = Object.fromEntries(searchParams);
7
+ const params = Object.fromEntries(searchParams);
8
+ const { marketId, localeId, templateId, documentId, _status, _live } = params;
7
9
  const destination = `/${marketId}/${localeId}/${templateId}/${documentId}${_live ? "?_live=true" : ""}`;
8
- (await draftMode()).enable();
10
+ const draft = await draftMode();
11
+ draft.enable();
9
12
  const path = `${process.env.NEXT_PUBLIC_URL}${destination}`;
10
13
  return NextResponse.redirect(path, { status: 303 });
11
14
  }
15
+
12
16
  //#endregion
13
17
  export { previewHandler };
14
-
15
18
  //# sourceMappingURL=preview.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preview.handler.js","names":[],"sources":["../../../src/server/handlers/preview.handler.ts"],"sourcesContent":["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"],"mappings":";;;AAKA,eAAsB,eAAe,SAAsB;CACzD,MAAM,EAAE,iBAAiB,IAAI,IAAI,QAAQ,GAAG;CAmB5C,MAAM,EAAE,UAAU,UAAU,YAAY,YAAY,SAAS,UAlB9C,OAAO,YAAY,YAkB0C;CAC5E,MAAM,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,QAAQ,gBAAgB;CAQnG,CAAA,MADoB,UAAU,EAAA,CACxB,OAAO;CACb,MAAM,OAAO,GAAG,QAAQ,IAAI,kBAAkB;CAC9C,OAAO,aAAa,SAAS,MAAM,EACjC,QAAQ,IACV,CAAC;AAwBH"}
1
+ {"version":3,"file":"preview.handler.js","names":["request: NextRequest"],"sources":["../../../src/server/handlers/preview.handler.ts"],"sourcesContent":["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"],"mappings":";;;;AAKA,eAAsB,eAAeA,SAAsB;CACzD,MAAM,EAAE,cAAc,GAAG,IAAI,IAAI,QAAQ;CACzC,MAAM,SAAS,OAAO,YAAY,aAAa;CAkB/C,MAAM,EAAE,UAAU,UAAU,YAAY,YAAY,SAAS,OAAO,GAAG;CACvE,MAAM,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE,aAAa,QAAQ,gBAAgB,IAAI;CAOvG,MAAM,QAAQ,MAAM,WAAW;CAC/B,MAAM,QAAQ;CACd,MAAM,OAAO,GAAG,QAAQ,IAAI,kBAAkB,aAAa;AAC3D,QAAO,aAAa,SAAS,MAAM,EACjC,QAAQ,IACT,EAAC;AAwBH"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.handler.d.ts","names":[],"sources":["../../../src/server/handlers/registry.handler.ts"],"mappings":";;;iBA+OgB,WAAA,CAAA,aACkB,gBAAW,QAAA;iBAQ7B,eAAA,CAAA,aACkB;UAAa;AATF;EAD7B,MAAA,EAUgE,OAVrD,CAAA;IAAA,IAAA,EAAA,MAAA,EAAA;EACO,CAAA,CAAA;AAAW,CAAA,EAAA,GASgE,OAThE,CASgE,QAThE,CAAA;AAAA"}
1
+ {"version":3,"file":"registry.handler.d.ts","names":[],"sources":["../../../src/server/handlers/registry.handler.ts"],"sourcesContent":[],"mappings":";;;iBA+OgB,WAAA,CAAA,aACkB,gBAAW,QAAA;iBAQ7B,eAAA,CAAA,aACkB;UAAa;;EAV/B,MAAA,EAUgE,OAVrD,CAAA;IAAA,IAAA,EAAA,MAAA,EAAA;EAAA,CAAA,CAAA;CACkB,EAAA,GASgE,OAThE,CASgE,QAThE,CAAA"}
@@ -1,15 +1,16 @@
1
1
  import { readFile, readdir, stat } from "node:fs/promises";
2
2
  import { basename, dirname, extname, join, relative, resolve } from "node:path";
3
+
3
4
  //#region src/server/handlers/registry.handler.ts
4
5
  const REGISTRY_SCHEMA = "https://ui.shadcn.com/schema/registry.json";
5
6
  const REGISTRY_ITEM_SCHEMA = "https://ui.shadcn.com/schema/registry-item.json";
6
- const SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
7
+ const SOURCE_EXTENSIONS = new Set([
7
8
  ".css",
8
9
  ".json",
9
10
  ".ts",
10
11
  ".tsx"
11
12
  ]);
12
- const PUBLISHED_DIRECTORIES = /* @__PURE__ */ new Set([
13
+ const PUBLISHED_DIRECTORIES = new Set([
13
14
  "components",
14
15
  "examples",
15
16
  "hooks",
@@ -18,7 +19,7 @@ const PUBLISHED_DIRECTORIES = /* @__PURE__ */ new Set([
18
19
  "sections",
19
20
  "theme"
20
21
  ]);
21
- const SHADCN_COMPONENTS = /* @__PURE__ */ new Set([
22
+ const SHADCN_COMPONENTS = new Set([
22
23
  "accordion",
23
24
  "alert-dialog",
24
25
  "alert",
@@ -102,7 +103,7 @@ async function getUiSourceDirectory() {
102
103
  }
103
104
  async function getSourceFiles(directory, sourceDirectory = directory) {
104
105
  const entries = await readdir(directory, { withFileTypes: true });
105
- return (await Promise.all(entries.map(async (entry) => {
106
+ const files = await Promise.all(entries.map(async (entry) => {
106
107
  const absolutePath = join(directory, entry.name);
107
108
  if (entry.isDirectory()) return getSourceFiles(absolutePath, sourceDirectory);
108
109
  if (!SOURCE_EXTENSIONS.has(extname(entry.name)) || entry.name.endsWith(".d.ts") || /\.(test|spec)\.[^.]+$/.test(entry.name)) return [];
@@ -110,7 +111,8 @@ async function getSourceFiles(directory, sourceDirectory = directory) {
110
111
  absolutePath,
111
112
  relativePath: entry.name
112
113
  }];
113
- }))).flat().map((file) => ({
114
+ }));
115
+ return files.flat().map((file) => ({
114
116
  ...file,
115
117
  relativePath: relative(sourceDirectory, file.absolutePath).replaceAll("\\", "/")
116
118
  }));
@@ -158,7 +160,8 @@ function isPublishedFile(file) {
158
160
  }
159
161
  function getRegistryItemName(file) {
160
162
  const [directory, ...path] = file.relativePath.split("/");
161
- const name = toKebabCase(path.join("/").replace(extname(file.relativePath), "").replaceAll("/", "-"));
163
+ const filename = path.join("/").replace(extname(file.relativePath), "");
164
+ const name = toKebabCase(filename.replaceAll("/", "-"));
162
165
  return directory === "components" ? name : `${directory}-${name}`;
163
166
  }
164
167
  async function createRegistryCatalog(sourceDirectory, origin) {
@@ -235,7 +238,8 @@ function jsonResponse(body, status = 200) {
235
238
  }
236
239
  function getRegistry() {
237
240
  return async function(request) {
238
- const catalog = await createRegistryCatalog(await getUiSourceDirectory(), getOrigin(request));
241
+ const sourceDirectory = await getUiSourceDirectory();
242
+ const catalog = await createRegistryCatalog(sourceDirectory, getOrigin(request));
239
243
  const items = (await Promise.all([...catalog.items].sort().map((name) => catalog.getCatalogItem(name)))).filter(Boolean);
240
244
  return jsonResponse({
241
245
  $schema: REGISTRY_SCHEMA,
@@ -250,11 +254,12 @@ function getRegistryItem() {
250
254
  const { slug } = await getParams;
251
255
  const name = slug.at(-1)?.replace(/\.json$/, "");
252
256
  if (!name) return jsonResponse({ error: "Registry item name is required." }, 404);
253
- const item = await (await createRegistryCatalog(await getUiSourceDirectory(), getOrigin(request))).getItem(name);
257
+ const sourceDirectory = await getUiSourceDirectory();
258
+ const item = await (await createRegistryCatalog(sourceDirectory, getOrigin(request))).getItem(name);
254
259
  return item ? jsonResponse(item) : jsonResponse({ error: `Registry item not found: ${name}` }, 404);
255
260
  };
256
261
  }
262
+
257
263
  //#endregion
258
264
  export { getRegistry, getRegistryItem };
259
-
260
265
  //# sourceMappingURL=registry.handler.js.map