@websolutespa/bom-next 3.0.1 → 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.
- package/CHANGELOG.md +17 -7
- package/dist/_virtual/rolldown_runtime.js +27 -0
- package/dist/client/client.d.ts +9 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +29 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/extra.d.ts +17 -0
- package/dist/client/extra.d.ts.map +1 -0
- package/dist/client/extra.js +18 -0
- package/dist/client/extra.js.map +1 -0
- package/dist/client/label.d.ts +15 -0
- package/dist/client/label.d.ts.map +1 -0
- package/dist/client/label.js +25 -0
- package/dist/client/label.js.map +1 -0
- package/dist/client/layout.d.ts +18 -0
- package/dist/client/layout.d.ts.map +1 -0
- package/dist/client/layout.js +18 -0
- package/dist/client/layout.js.map +1 -0
- package/dist/client/local.collection.d.ts +32 -0
- package/dist/client/local.collection.d.ts.map +1 -0
- package/dist/client/local.collection.js +51 -0
- package/dist/client/local.collection.js.map +1 -0
- package/dist/client/metadata.d.ts +43 -0
- package/dist/client/metadata.d.ts.map +1 -0
- package/dist/client/metadata.js +154 -0
- package/dist/client/metadata.js.map +1 -0
- package/dist/client/page.d.ts +404 -0
- package/dist/client/page.d.ts.map +1 -0
- package/dist/client/page.js +18 -0
- package/dist/client/page.js.map +1 -0
- package/dist/client/useApi.d.ts +21 -0
- package/dist/client/useApi.d.ts.map +1 -0
- package/dist/client/useApi.js +66 -0
- package/dist/client/useApi.js.map +1 -0
- package/dist/client/useCollectionApi.d.ts +21 -0
- package/dist/client/useCollectionApi.d.ts.map +1 -0
- package/dist/client/useCollectionApi.js +67 -0
- package/dist/client/useCollectionApi.js.map +1 -0
- package/dist/client/useExtra.d.ts +9 -0
- package/dist/client/useExtra.d.ts.map +1 -0
- package/dist/client/useExtra.js +16 -0
- package/dist/client/useExtra.js.map +1 -0
- package/dist/client/useHttp.d.ts +15 -0
- package/dist/client/useHttp.d.ts.map +1 -0
- package/dist/client/useHttp.js +73 -0
- package/dist/client/useHttp.js.map +1 -0
- package/dist/client/useLabel.d.ts +9 -0
- package/dist/client/useLabel.d.ts.map +1 -0
- package/dist/client/useLabel.js +16 -0
- package/dist/client/useLabel.js.map +1 -0
- package/dist/client/useLayout.d.ts +9 -0
- package/dist/client/useLayout.d.ts.map +1 -0
- package/dist/client/useLayout.js +16 -0
- package/dist/client/useLayout.js.map +1 -0
- package/dist/client/useLink.d.ts +7 -0
- package/dist/client/useLink.d.ts.map +1 -0
- package/dist/client/useLink.js +19 -0
- package/dist/client/useLink.js.map +1 -0
- package/dist/client/useMetaData.d.ts +9 -0
- package/dist/client/useMetaData.d.ts.map +1 -0
- package/dist/client/useMetaData.js +16 -0
- package/dist/client/useMetaData.js.map +1 -0
- package/dist/client/usePage.d.ts +394 -0
- package/dist/client/usePage.d.ts.map +1 -0
- package/dist/client/usePage.js +16 -0
- package/dist/client/usePage.js.map +1 -0
- package/dist/client/useUser.d.ts +9 -0
- package/dist/client/useUser.d.ts.map +1 -0
- package/dist/client/useUser.js +16 -0
- package/dist/client/useUser.js.map +1 -0
- package/dist/client/user.d.ts +20 -0
- package/dist/client/user.d.ts.map +1 -0
- package/dist/client/user.js +39 -0
- package/dist/client/user.js.map +1 -0
- package/dist/exports/client.d.ts +20 -979
- package/dist/exports/client.js +20 -5734
- package/dist/exports/instrumentation.d.ts +2 -13
- package/dist/exports/instrumentation.js +2 -24
- package/dist/exports/proxy.d.ts +5 -71
- package/dist/exports/proxy.js +5 -253
- package/dist/exports/server.d.ts +19 -402
- package/dist/exports/server.js +20 -1974
- package/dist/index.d.ts +18 -499
- package/dist/index.js +11 -200
- package/dist/instrumentation/client.d.ts +8 -0
- package/dist/instrumentation/client.d.ts.map +1 -0
- package/dist/instrumentation/client.js +16 -0
- package/dist/instrumentation/client.js.map +1 -0
- package/dist/instrumentation/sentry/capture.requestError.js +13 -0
- package/dist/instrumentation/sentry/capture.requestError.js.map +1 -0
- package/dist/instrumentation/sentry/capture.routerTransitionStart.js +8 -0
- package/dist/instrumentation/sentry/capture.routerTransitionStart.js.map +1 -0
- package/dist/instrumentation/sentry/config.client.js +10 -0
- package/dist/instrumentation/sentry/config.client.js.map +1 -0
- package/dist/instrumentation/sentry/config.edge.js +10 -0
- package/dist/instrumentation/sentry/config.edge.js.map +1 -0
- package/dist/instrumentation/sentry/config.server.js +10 -0
- package/dist/instrumentation/sentry/config.server.js.map +1 -0
- package/dist/instrumentation/server.d.ts +13 -0
- package/dist/instrumentation/server.d.ts.map +1 -0
- package/dist/instrumentation/server.js +22 -0
- package/dist/instrumentation/server.js.map +1 -0
- package/dist/{types2.d.ts → instrumentation/types.d.ts} +2 -2
- package/dist/instrumentation/types.d.ts.map +1 -0
- package/dist/lib/breadcrumb.d.ts +15 -0
- package/dist/lib/breadcrumb.d.ts.map +1 -0
- package/dist/lib/breadcrumb.js +25 -0
- package/dist/lib/breadcrumb.js.map +1 -0
- package/dist/lib/const.d.ts +9 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/const.js +9 -0
- package/dist/lib/const.js.map +1 -0
- package/dist/lib/http.d.ts +36 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/{http.js → lib/http.js} +7 -4
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/label.d.ts +16 -0
- package/dist/lib/label.d.ts.map +1 -0
- package/dist/lib/label.js +34 -0
- package/dist/lib/label.js.map +1 -0
- package/dist/lib/layout.defaults.d.ts +9 -0
- package/dist/lib/layout.defaults.d.ts.map +1 -0
- package/dist/lib/layout.defaults.js +161 -0
- package/dist/lib/layout.defaults.js.map +1 -0
- package/dist/lib/link.d.ts +9 -0
- package/dist/lib/link.d.ts.map +1 -0
- package/dist/lib/link.js +17 -0
- package/dist/lib/link.js.map +1 -0
- package/dist/lib/meta-data.d.ts +56 -0
- package/dist/lib/meta-data.d.ts.map +1 -0
- package/dist/lib/open-graph.d.ts +143 -0
- package/dist/lib/open-graph.d.ts.map +1 -0
- package/dist/lib/pagination.d.ts +27 -0
- package/dist/lib/pagination.d.ts.map +1 -0
- package/dist/lib/pagination.js +41 -0
- package/dist/lib/pagination.js.map +1 -0
- package/dist/lib/route.d.ts +17 -0
- package/dist/lib/route.d.ts.map +1 -0
- package/dist/{route.js → lib/route.js} +10 -4
- package/dist/lib/route.js.map +1 -0
- package/dist/lib/store.d.ts +27 -0
- package/dist/lib/store.d.ts.map +1 -0
- package/dist/lib/store.js +50 -0
- package/dist/lib/store.js.map +1 -0
- package/dist/lib/structured-data.d.ts +9 -0
- package/dist/lib/structured-data.d.ts.map +1 -0
- package/dist/lib/twitter-card.d.ts +43 -0
- package/dist/lib/twitter-card.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +13 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +36 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/mock.d.ts +127 -0
- package/dist/mock.d.ts.map +1 -0
- package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js +76 -0
- package/dist/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js.map +1 -0
- package/dist/node_modules/deepmerge/dist/cjs.js +94 -0
- package/dist/node_modules/deepmerge/dist/cjs.js.map +1 -0
- package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js +105 -0
- package/dist/node_modules/dom-serializer/lib/esm/foreignNames.js.map +1 -0
- package/dist/node_modules/dom-serializer/lib/esm/index.js +141 -0
- package/dist/node_modules/dom-serializer/lib/esm/index.js.map +1 -0
- package/dist/node_modules/domelementtype/lib/esm/index.js +53 -0
- package/dist/node_modules/domelementtype/lib/esm/index.js.map +1 -0
- package/dist/node_modules/domhandler/lib/esm/index.js +131 -0
- package/dist/node_modules/domhandler/lib/esm/index.js.map +1 -0
- package/dist/node_modules/domhandler/lib/esm/node.js +308 -0
- package/dist/node_modules/domhandler/lib/esm/node.js.map +1 -0
- package/dist/node_modules/entities/lib/esm/decode.js +364 -0
- package/dist/node_modules/entities/lib/esm/decode.js.map +1 -0
- package/dist/node_modules/entities/lib/esm/decode_codepoint.js +59 -0
- package/dist/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -0
- package/dist/node_modules/entities/lib/esm/escape.js +93 -0
- package/dist/node_modules/entities/lib/esm/escape.js.map +1 -0
- package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js +6 -0
- package/dist/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -0
- package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js +6 -0
- package/dist/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -0
- package/dist/node_modules/html-to-text/lib/html-to-text.js +1828 -0
- package/dist/node_modules/html-to-text/lib/html-to-text.js.map +1 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js +435 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Parser.js.map +1 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js +739 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/Tokenizer.js.map +1 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js +20 -0
- package/dist/node_modules/html-to-text/node_modules/htmlparser2/lib/esm/index.js.map +1 -0
- package/dist/node_modules/leac/lib/leac.js +101 -0
- package/dist/node_modules/leac/lib/leac.js.map +1 -0
- package/dist/node_modules/parseley/lib/parseley.js +314 -0
- package/dist/node_modules/parseley/lib/parseley.js.map +1 -0
- package/dist/node_modules/peberminta/lib/core.js +149 -0
- package/dist/node_modules/peberminta/lib/core.js.map +1 -0
- package/dist/node_modules/selderee/lib/selderee.js +325 -0
- package/dist/node_modules/selderee/lib/selderee.js.map +1 -0
- package/dist/proxy/protected-route.d.ts +9 -0
- package/dist/proxy/protected-route.d.ts.map +1 -0
- package/dist/proxy/protected-route.js +45 -0
- package/dist/proxy/protected-route.js.map +1 -0
- package/dist/proxy/proxy.d.ts +31 -0
- package/dist/proxy/proxy.d.ts.map +1 -0
- package/dist/proxy/proxy.js +64 -0
- package/dist/proxy/proxy.js.map +1 -0
- package/dist/proxy/route-auto-detection.d.ts +12 -0
- package/dist/proxy/route-auto-detection.d.ts.map +1 -0
- package/dist/proxy/route-auto-detection.js +94 -0
- package/dist/proxy/route-auto-detection.js.map +1 -0
- package/dist/proxy/route-proxy.d.ts +36 -0
- package/dist/proxy/route-proxy.d.ts.map +1 -0
- package/dist/proxy/route-proxy.js +120 -0
- package/dist/proxy/route-proxy.js.map +1 -0
- package/dist/server/context.d.ts +30 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +124 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/handlers/auth.handler.d.ts +10 -0
- package/dist/server/handlers/auth.handler.d.ts.map +1 -0
- package/dist/server/handlers/auth.handler.js +31 -0
- package/dist/server/handlers/auth.handler.js.map +1 -0
- package/dist/server/handlers/captions.handler.d.ts +10 -0
- package/dist/server/handlers/captions.handler.d.ts.map +1 -0
- package/dist/server/handlers/captions.handler.js +35 -0
- package/dist/server/handlers/captions.handler.js.map +1 -0
- package/dist/server/handlers/collection.handler.d.ts +36 -0
- package/dist/server/handlers/collection.handler.d.ts.map +1 -0
- package/dist/server/handlers/collection.handler.js +167 -0
- package/dist/server/handlers/collection.handler.js.map +1 -0
- package/dist/server/handlers/error-response.js +28 -0
- package/dist/server/handlers/error-response.js.map +1 -0
- package/dist/server/handlers/index.handler.d.ts +9 -0
- package/dist/server/handlers/index.handler.d.ts.map +1 -0
- package/dist/server/handlers/index.handler.js +146 -0
- package/dist/server/handlers/index.handler.js.map +1 -0
- package/dist/server/handlers/preview.handler.d.ts +9 -0
- package/dist/server/handlers/preview.handler.d.ts.map +1 -0
- package/dist/server/handlers/preview.handler.js +18 -0
- package/dist/server/handlers/preview.handler.js.map +1 -0
- package/dist/server/handlers/registry.handler.d.ts +16 -0
- package/dist/server/handlers/registry.handler.d.ts.map +1 -0
- package/dist/server/handlers/registry.handler.js +265 -0
- package/dist/server/handlers/registry.handler.js.map +1 -0
- package/dist/server/handlers/route.handler.d.ts +20 -0
- package/dist/server/handlers/route.handler.d.ts.map +1 -0
- package/dist/server/handlers/route.handler.js +131 -0
- package/dist/server/handlers/route.handler.js.map +1 -0
- package/dist/server/handlers/sitemap.handler.d.ts +30 -0
- package/dist/server/handlers/sitemap.handler.d.ts.map +1 -0
- package/dist/server/handlers/sitemap.handler.js +341 -0
- package/dist/server/handlers/sitemap.handler.js.map +1 -0
- package/dist/server/handlers/static-params.handler.d.ts +24 -0
- package/dist/server/handlers/static-params.handler.d.ts.map +1 -0
- package/dist/server/handlers/static-params.handler.js +61 -0
- package/dist/server/handlers/static-params.handler.js.map +1 -0
- package/dist/server/handlers/vars.handler.d.ts +10 -0
- package/dist/server/handlers/vars.handler.d.ts.map +1 -0
- package/dist/server/handlers/vars.handler.js +160 -0
- package/dist/server/handlers/vars.handler.js.map +1 -0
- package/dist/server/layout.js +110 -0
- package/dist/server/layout.js.map +1 -0
- package/dist/server/lazy.d.ts +11 -0
- package/dist/server/lazy.d.ts.map +1 -0
- package/dist/server/lazy.js +36 -0
- package/dist/server/lazy.js.map +1 -0
- package/dist/server/local-api.d.ts +9 -0
- package/dist/server/local-api.d.ts.map +1 -0
- package/dist/server/local-api.js +66 -0
- package/dist/server/local-api.js.map +1 -0
- package/dist/server/metadata.d.ts +21 -0
- package/dist/server/metadata.d.ts.map +1 -0
- package/dist/server/metadata.js +24 -0
- package/dist/server/metadata.js.map +1 -0
- package/dist/server/mixer-payload.d.ts +63 -0
- package/dist/server/mixer-payload.d.ts.map +1 -0
- package/dist/server/mixer.d.ts +214 -0
- package/dist/server/mixer.d.ts.map +1 -0
- package/dist/server/mixer.js +481 -0
- package/dist/server/mixer.js.map +1 -0
- package/dist/server/page.d.ts +22 -0
- package/dist/server/page.d.ts.map +1 -0
- package/dist/server/page.js +68 -0
- package/dist/server/page.js.map +1 -0
- package/dist/server/utils.d.ts +12 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/{utils2.js → server/utils.js} +7 -5
- package/dist/server/utils.js.map +1 -0
- package/dist/server/utmz.d.ts +9 -0
- package/dist/server/utmz.d.ts.map +1 -0
- package/dist/server/utmz.js +14 -0
- package/dist/server/utmz.js.map +1 -0
- package/dist/types.d.ts +6 -61
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -11
- package/dist/config.client.js +0 -2
- package/dist/config.edge.js +0 -2
- package/dist/config.server.js +0 -2
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js.map +0 -1
- package/dist/exports/instrumentation.d.ts.map +0 -1
- package/dist/exports/instrumentation.js.map +0 -1
- package/dist/exports/proxy.d.ts.map +0 -1
- package/dist/exports/proxy.js.map +0 -1
- package/dist/exports/server.d.ts.map +0 -1
- package/dist/exports/server.js.map +0 -1
- package/dist/http.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index2.d.ts +0 -4
- package/dist/route.js.map +0 -1
- package/dist/store.js +0 -73
- package/dist/store.js.map +0 -1
- package/dist/types2.d.ts.map +0 -1
- package/dist/utils.js +0 -78
- package/dist/utils.js.map +0 -1
- package/dist/utils2.js.map +0 -1
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
import { guest } from "../lib/const.js";
|
|
2
|
+
import { collectRoutes, defaultLocale, defaultMarket, isDevelopment, isObject } from "@websolutespa/bom-core";
|
|
3
|
+
import { cache } from "react";
|
|
4
|
+
import { InMemoryCache } from "@websolutespa/payload-plugin-bowl";
|
|
5
|
+
import { getPayload } from "payload";
|
|
6
|
+
|
|
7
|
+
//#region src/server/mixer.ts
|
|
8
|
+
const USE_CACHE = true;
|
|
9
|
+
const getRouteCache = () => {
|
|
10
|
+
let cache$1 = globalThis._route;
|
|
11
|
+
if (!cache$1) {
|
|
12
|
+
cache$1 = new InMemoryCache();
|
|
13
|
+
globalThis._route = cache$1;
|
|
14
|
+
}
|
|
15
|
+
return cache$1;
|
|
16
|
+
};
|
|
17
|
+
const getMixerCache = () => {
|
|
18
|
+
let cache$1 = globalThis._mixer;
|
|
19
|
+
if (!cache$1) {
|
|
20
|
+
cache$1 = new InMemoryCache();
|
|
21
|
+
globalThis._mixer = cache$1;
|
|
22
|
+
}
|
|
23
|
+
return cache$1;
|
|
24
|
+
};
|
|
25
|
+
function getCacheKey({ market = "all", locale = "all", user = guest, draft = "false" }) {
|
|
26
|
+
const roles = user?.roles || ["guest"];
|
|
27
|
+
const tenants = "tenants" in user && Array.isArray(user.tenants) ? user.tenants.map((x) => isObject(x) ? x.id : x) : [];
|
|
28
|
+
roles.sort();
|
|
29
|
+
tenants.sort();
|
|
30
|
+
const keys = [
|
|
31
|
+
market,
|
|
32
|
+
locale,
|
|
33
|
+
draft === "false" ? "published" : "draft",
|
|
34
|
+
...roles,
|
|
35
|
+
...tenants
|
|
36
|
+
];
|
|
37
|
+
const key = `context-${keys.join("-")}`;
|
|
38
|
+
return key;
|
|
39
|
+
}
|
|
40
|
+
async function getContext() {
|
|
41
|
+
let context = globalThis._context;
|
|
42
|
+
if (!context) {
|
|
43
|
+
context = {
|
|
44
|
+
payload: void 0,
|
|
45
|
+
context: void 0
|
|
46
|
+
};
|
|
47
|
+
globalThis._context = context;
|
|
48
|
+
}
|
|
49
|
+
return context;
|
|
50
|
+
}
|
|
51
|
+
async function setContext(data) {
|
|
52
|
+
const context = await getContext();
|
|
53
|
+
if (data.payload) context.payload = data.payload;
|
|
54
|
+
if (data.context) context.context = data.context;
|
|
55
|
+
}
|
|
56
|
+
function getSearchParams(request) {
|
|
57
|
+
const searchParams = request.nextUrl.searchParams;
|
|
58
|
+
const params = Object.fromEntries(searchParams.entries());
|
|
59
|
+
return {
|
|
60
|
+
market: params.market || defaultMarket,
|
|
61
|
+
locale: params.locale || defaultLocale,
|
|
62
|
+
defaultMarket,
|
|
63
|
+
defaultLocale,
|
|
64
|
+
params,
|
|
65
|
+
searchParams: request.nextUrl.searchParams
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const getPayloadInstance = cache(async (props) => await getPayload(props));
|
|
69
|
+
function getOptions({ locale = "all", user = guest, draft = false }) {
|
|
70
|
+
const localized = {
|
|
71
|
+
locale,
|
|
72
|
+
fallbackLocale: defaultLocale,
|
|
73
|
+
draft,
|
|
74
|
+
depth: 0,
|
|
75
|
+
pagination: false,
|
|
76
|
+
limit: 1e4,
|
|
77
|
+
user,
|
|
78
|
+
overrideAccess: false
|
|
79
|
+
};
|
|
80
|
+
const unlocalized = {
|
|
81
|
+
locale: "all",
|
|
82
|
+
fallbackLocale: defaultLocale,
|
|
83
|
+
draft,
|
|
84
|
+
depth: 0,
|
|
85
|
+
pagination: false,
|
|
86
|
+
limit: 1e4,
|
|
87
|
+
user,
|
|
88
|
+
overrideAccess: false
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
localized,
|
|
92
|
+
unlocalized
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async function getRoutes$1({ payload, market = "all", locale = "all", user = guest, draft = false }) {
|
|
96
|
+
const cacheKey = getCacheKey({
|
|
97
|
+
market,
|
|
98
|
+
locale,
|
|
99
|
+
user,
|
|
100
|
+
draft: draft ? "true" : "false"
|
|
101
|
+
});
|
|
102
|
+
const routeCache = getRouteCache();
|
|
103
|
+
if (routeCache.has(cacheKey)) {
|
|
104
|
+
console.log("getRoutes from cache", cacheKey);
|
|
105
|
+
return routeCache.get(cacheKey);
|
|
106
|
+
}
|
|
107
|
+
let routes = [];
|
|
108
|
+
if (!user) return routes;
|
|
109
|
+
const { localized, unlocalized } = getOptions({
|
|
110
|
+
locale,
|
|
111
|
+
user,
|
|
112
|
+
draft
|
|
113
|
+
});
|
|
114
|
+
const marketRequest = await payload.find({
|
|
115
|
+
...localized,
|
|
116
|
+
collection: "market",
|
|
117
|
+
where: { isActive: { equals: true } }
|
|
118
|
+
});
|
|
119
|
+
const markets = marketRequest.docs;
|
|
120
|
+
const localeResult = await payload.findGlobal({
|
|
121
|
+
...localized,
|
|
122
|
+
slug: "locale"
|
|
123
|
+
});
|
|
124
|
+
const locales = localeResult.items.filter((x) => x.isActive);
|
|
125
|
+
if (locales.length > 0 && markets.length > 0) {
|
|
126
|
+
const pageCollections = payload.config.collections.filter((x) => {
|
|
127
|
+
return x.fields.find((x$1) => "name" in x$1 && x$1.name === "slug");
|
|
128
|
+
});
|
|
129
|
+
const keys = pageCollections.map((x) => x.slug);
|
|
130
|
+
const pages = Object.fromEntries(keys.map((x) => [x, []]));
|
|
131
|
+
for (const key of keys) {
|
|
132
|
+
const pageResult = await payload.find({
|
|
133
|
+
...unlocalized,
|
|
134
|
+
collection: key
|
|
135
|
+
});
|
|
136
|
+
pages[key] = pageResult.docs;
|
|
137
|
+
}
|
|
138
|
+
const categoryRequest = await payload.find({
|
|
139
|
+
...unlocalized,
|
|
140
|
+
collection: "category",
|
|
141
|
+
depth: 1
|
|
142
|
+
});
|
|
143
|
+
const categories = categoryRequest.docs;
|
|
144
|
+
const mediaRequest = await payload.find({
|
|
145
|
+
...unlocalized,
|
|
146
|
+
collection: "media",
|
|
147
|
+
depth: 1
|
|
148
|
+
});
|
|
149
|
+
const medias = mediaRequest.docs;
|
|
150
|
+
routes = collectRoutes(pages, categories, markets, locales, medias);
|
|
151
|
+
}
|
|
152
|
+
routeCache.set(cacheKey, routes);
|
|
153
|
+
return routes;
|
|
154
|
+
}
|
|
155
|
+
async function getMixerContext({ payload, market, locale, user = guest, draft = false }) {
|
|
156
|
+
const cacheKey = getCacheKey({
|
|
157
|
+
market,
|
|
158
|
+
locale,
|
|
159
|
+
user,
|
|
160
|
+
draft: draft ? "true" : "false"
|
|
161
|
+
});
|
|
162
|
+
const mixerCache = getMixerCache();
|
|
163
|
+
if (mixerCache.has(cacheKey) && USE_CACHE) {
|
|
164
|
+
console.log("getContext from cache", cacheKey);
|
|
165
|
+
return mixerCache.get(cacheKey);
|
|
166
|
+
}
|
|
167
|
+
const { localized } = getOptions({
|
|
168
|
+
locale,
|
|
169
|
+
user,
|
|
170
|
+
draft
|
|
171
|
+
});
|
|
172
|
+
const localeResult = await payload.findGlobal({
|
|
173
|
+
...localized,
|
|
174
|
+
slug: "locale"
|
|
175
|
+
});
|
|
176
|
+
const locales = localeResult.items.filter((x) => x.isActive);
|
|
177
|
+
const localeIds = locales.map((x) => x.id);
|
|
178
|
+
const marketRequest = await payload.find({
|
|
179
|
+
...localized,
|
|
180
|
+
collection: "market"
|
|
181
|
+
});
|
|
182
|
+
const marketItems = marketRequest.docs;
|
|
183
|
+
const markets = marketItems.filter((x) => x.isActive);
|
|
184
|
+
const marketIds = markets.map((x) => x.id);
|
|
185
|
+
const categoryRequest = await payload.find({
|
|
186
|
+
...localized,
|
|
187
|
+
collection: "category",
|
|
188
|
+
depth: 2
|
|
189
|
+
});
|
|
190
|
+
const categories = categoryRequest.docs;
|
|
191
|
+
const routes = await getRoutes$1({
|
|
192
|
+
payload,
|
|
193
|
+
market,
|
|
194
|
+
locale,
|
|
195
|
+
user,
|
|
196
|
+
draft
|
|
197
|
+
});
|
|
198
|
+
const currentRoutes = filterRoutes(routes, market, locale);
|
|
199
|
+
const richText = false;
|
|
200
|
+
const context = {
|
|
201
|
+
locale,
|
|
202
|
+
localeIds,
|
|
203
|
+
locales,
|
|
204
|
+
market,
|
|
205
|
+
marketIds,
|
|
206
|
+
markets,
|
|
207
|
+
routes,
|
|
208
|
+
currentRoutes,
|
|
209
|
+
categories,
|
|
210
|
+
richText
|
|
211
|
+
};
|
|
212
|
+
mixerCache.set(cacheKey, context);
|
|
213
|
+
await setContext({ context });
|
|
214
|
+
return context;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
|
|
218
|
+
* Runtime (request-time) payload accessor.
|
|
219
|
+
|
|
220
|
+
*
|
|
221
|
+
|
|
222
|
+
* By default, operates as the guest user for static generation. For auth:
|
|
223
|
+
|
|
224
|
+
* call getHeaders() directly in your page/route/layout, then pass it here.
|
|
225
|
+
|
|
226
|
+
*
|
|
227
|
+
|
|
228
|
+
* Example:
|
|
229
|
+
|
|
230
|
+
* const headers = await getHeaders();
|
|
231
|
+
|
|
232
|
+
* const { payload, user, getContext } = await getPayload({ config, headers });
|
|
233
|
+
|
|
234
|
+
*/
|
|
235
|
+
async function getPayload$1({ config, headers }) {
|
|
236
|
+
const payload = await getPayload({ config });
|
|
237
|
+
await setContext({ payload });
|
|
238
|
+
let user = guest;
|
|
239
|
+
if (headers) try {
|
|
240
|
+
const auth = await payload.auth({
|
|
241
|
+
headers,
|
|
242
|
+
canSetHeaders: false
|
|
243
|
+
});
|
|
244
|
+
if (auth.user) user = auth.user;
|
|
245
|
+
} catch (error) {
|
|
246
|
+
console.log("getPayload.error", error);
|
|
247
|
+
}
|
|
248
|
+
const draft = false;
|
|
249
|
+
return {
|
|
250
|
+
payload,
|
|
251
|
+
user,
|
|
252
|
+
getContext: (market, locale) => getMixerContext({
|
|
253
|
+
payload,
|
|
254
|
+
market,
|
|
255
|
+
locale,
|
|
256
|
+
user,
|
|
257
|
+
draft
|
|
258
|
+
})
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function filterRoutes(routes, market, locale) {
|
|
262
|
+
market = market === "all" ? defaultMarket : market;
|
|
263
|
+
locale = locale === "all" ? defaultLocale : locale;
|
|
264
|
+
return routes.filter((x) => x.market === market && x.locale === locale);
|
|
265
|
+
}
|
|
266
|
+
function getAuthHeaders(token) {
|
|
267
|
+
if (token) return new Headers({ Authorization: `JWT ${token.value}` });
|
|
268
|
+
else return new Headers({ Authorization: `users API-Key ${process.env.STORE_API_KEY}` });
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
|
|
272
|
+
* Produces the common option block shared across all payload.find / payload.findGlobal calls.
|
|
273
|
+
|
|
274
|
+
* For payload.find, add pagination: false and limit: 10000 at the call site.
|
|
275
|
+
|
|
276
|
+
* For payload.findByID, spread directly — extra find-only fields are ignored.
|
|
277
|
+
|
|
278
|
+
*/
|
|
279
|
+
function buildBaseOptions(user, locale, draft) {
|
|
280
|
+
return {
|
|
281
|
+
locale,
|
|
282
|
+
fallbackLocale: defaultLocale,
|
|
283
|
+
draft: draft ?? false,
|
|
284
|
+
depth: 0,
|
|
285
|
+
user,
|
|
286
|
+
overrideAccess: false
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
|
|
291
|
+
* Payload proxy example
|
|
292
|
+
|
|
293
|
+
*
|
|
294
|
+
|
|
295
|
+
*
|
|
296
|
+
|
|
297
|
+
* import type { Payload, PayloadRequest } from '../types/index.js'
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
import { commitTransaction } from './commitTransaction.js'
|
|
302
|
+
|
|
303
|
+
import { initTransaction } from './initTransaction.js'
|
|
304
|
+
|
|
305
|
+
import { killTransaction } from './killTransaction.js'
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
const localOperations = [
|
|
310
|
+
|
|
311
|
+
'count',
|
|
312
|
+
|
|
313
|
+
'countGlobalVersions',
|
|
314
|
+
|
|
315
|
+
'countVersions',
|
|
316
|
+
|
|
317
|
+
'create',
|
|
318
|
+
|
|
319
|
+
'delete',
|
|
320
|
+
|
|
321
|
+
'duplicate',
|
|
322
|
+
|
|
323
|
+
'find',
|
|
324
|
+
|
|
325
|
+
'findByID',
|
|
326
|
+
|
|
327
|
+
'delete',
|
|
328
|
+
|
|
329
|
+
'duplicate',
|
|
330
|
+
|
|
331
|
+
'find',
|
|
332
|
+
|
|
333
|
+
'findByID',
|
|
334
|
+
|
|
335
|
+
'findGlobal',
|
|
336
|
+
|
|
337
|
+
'findGlobalVersionByID',
|
|
338
|
+
|
|
339
|
+
'findGlobalVersions',
|
|
340
|
+
|
|
341
|
+
'findVersionByID',
|
|
342
|
+
|
|
343
|
+
'findVersionByID',
|
|
344
|
+
|
|
345
|
+
'login',
|
|
346
|
+
|
|
347
|
+
'update',
|
|
348
|
+
|
|
349
|
+
'updateGlobal',
|
|
350
|
+
|
|
351
|
+
'restoreVersion',
|
|
352
|
+
|
|
353
|
+
'restoreGlobalVersion',
|
|
354
|
+
|
|
355
|
+
] satisfies (keyof Payload)[]
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
type LocalOperation = (typeof localOperations)[number]
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
const isLocalOperation = (key: string): key is LocalOperation => {
|
|
364
|
+
|
|
365
|
+
return localOperations.includes(key as LocalOperation)
|
|
366
|
+
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
export const withTransaction = async <T>(
|
|
372
|
+
|
|
373
|
+
payload: Payload,
|
|
374
|
+
|
|
375
|
+
callback: (transaction: Payload) => Promise<T>,
|
|
376
|
+
|
|
377
|
+
) => {
|
|
378
|
+
|
|
379
|
+
const transactionReq = { payload } as PayloadRequest
|
|
380
|
+
|
|
381
|
+
await initTransaction(transactionReq)
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
const proxy = new Proxy(payload, {
|
|
386
|
+
|
|
387
|
+
get(target, property: keyof Payload, receiver) {
|
|
388
|
+
|
|
389
|
+
if (isLocalOperation(property)) {
|
|
390
|
+
|
|
391
|
+
const operation = Reflect.get(target, property, receiver)
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
return function (options) {
|
|
396
|
+
|
|
397
|
+
let req: Partial<PayloadRequest> = options.req
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
if (!req) {
|
|
402
|
+
|
|
403
|
+
req = {}
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
if (!req.transactionID) {
|
|
410
|
+
|
|
411
|
+
req = { ...req, transactionID: transactionReq.transactionID }
|
|
412
|
+
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
return (operation as (...args: unknown[]) => void)({
|
|
418
|
+
|
|
419
|
+
...options,
|
|
420
|
+
|
|
421
|
+
req,
|
|
422
|
+
|
|
423
|
+
})
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
return Reflect.get(target, property, receiver)
|
|
432
|
+
|
|
433
|
+
},
|
|
434
|
+
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
try {
|
|
440
|
+
|
|
441
|
+
const result = await callback(proxy)
|
|
442
|
+
|
|
443
|
+
await commitTransaction(transactionReq)
|
|
444
|
+
|
|
445
|
+
return result
|
|
446
|
+
|
|
447
|
+
} catch (e) {
|
|
448
|
+
|
|
449
|
+
await killTransaction(transactionReq)
|
|
450
|
+
|
|
451
|
+
throw e
|
|
452
|
+
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
// -----------------
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
const { one, two } = await withTransaction(payload, async (transaction) => {
|
|
464
|
+
|
|
465
|
+
const one = await transaction.create({ collection: 'posts', data: { title: 'one' } })
|
|
466
|
+
|
|
467
|
+
const two = await transaction.create({ collection: 'posts', data: { title: 'two' } })
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
return { one, two }
|
|
472
|
+
|
|
473
|
+
})
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
*/
|
|
478
|
+
|
|
479
|
+
//#endregion
|
|
480
|
+
export { buildBaseOptions, filterRoutes, getAuthHeaders, getCacheKey, getContext, getMixerContext, getOptions, getPayload$1 as getPayload, getPayloadInstance, getRoutes$1 as getRoutes, getSearchParams, setContext };
|
|
481
|
+
//# sourceMappingURL=mixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mixer.js","names":["cache: InMemoryCache<IRoute[]> | undefined","cache","cache: InMemoryCache<MixerContext> | undefined","x: any","context: IContext | undefined","data: Partial<IContext>","request: NextRequest","props: { config: SanitizedConfig | Promise<SanitizedConfig> }","getPayload_","localized: BaseOptions","unlocalized: BaseOptions","getRoutes","routes: IRoute[]","x","pages: Record<string, any[]>","context: MixerContext","getPayload","user: User & Config['user']","market: string","locale: string","token: { value: string } | undefined","user: any","draft?: boolean"],"sources":["../../src/server/mixer.ts"],"sourcesContent":["import { collectRoutes, defaultLocale, defaultMarket, ICategory, ILocale, IMarket, IMedia, IRoute, isDevelopment, isObject } from '@websolutespa/bom-core';\r\nimport type { Config, User } from '@websolutespa/payload-plugin-bowl';\r\nimport { InMemoryCache } from '@websolutespa/payload-plugin-bowl';\r\nimport { NextRequest } from 'next/server';\r\nimport { BasePayload, getPayload as getPayload_, SanitizedConfig, TypedFallbackLocale, TypedLocale } from 'payload';\r\nimport { cache } from 'react';\r\nimport { guest } from '../lib/const';\r\nimport type { BaseOptions, IContext, MixerContext, ReadonlyHeaders } from '../types';\r\nimport type { MixerPayload } from './mixer-payload';\r\n\r\n// !!! todo check when to use in memory cache\r\n\r\nconst USE_CACHE = true || !(isDevelopment);\r\n\r\nconst getRouteCache = (): InMemoryCache<IRoute[]> => {\r\n let cache: InMemoryCache<IRoute[]> | undefined = (globalThis as any)._route;\r\n if (!cache) {\r\n cache = new InMemoryCache<IRoute[]>();\r\n (globalThis as any)._route = cache;\r\n }\r\n return cache;\r\n};\r\n\r\nconst getMixerCache = (): InMemoryCache<MixerContext> => {\r\n let cache: InMemoryCache<MixerContext> | undefined = (globalThis as any)._mixer;\r\n if (!cache) {\r\n cache = new InMemoryCache<MixerContext>();\r\n (globalThis as any)._mixer = cache;\r\n }\r\n return cache;\r\n};\r\n\r\nexport function getCacheKey({\r\n market = 'all',\r\n locale = 'all',\r\n user = guest,\r\n draft = 'false',\r\n}: {\r\n market?: string;\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: string;\r\n}) {\r\n const roles = (user?.roles || ['guest']) as string[];\r\n const tenants = ('tenants' in user && Array.isArray(user.tenants) ?\r\n user.tenants.map((x: any) => isObject(x) ? x.id : x) :\r\n []\r\n ) as string[];\r\n roles.sort();\r\n tenants.sort();\r\n const keys = [market, locale, draft === 'false' ? 'published' : 'draft', ...roles, ...tenants];\r\n const key = `context-${keys.join('-')}`;\r\n return key;\r\n}\r\n\r\nexport async function getContext() {\r\n let context: IContext | undefined = (globalThis as any)._context;\r\n if (!context) {\r\n context = {\r\n payload: undefined,\r\n context: undefined,\r\n } as unknown as IContext;\r\n (globalThis as any)._context = context;\r\n }\r\n return context;\r\n}\r\n\r\nexport async function setContext(data: Partial<IContext>) {\r\n const context = await getContext();\r\n if (data.payload) {\r\n context.payload = data.payload;\r\n }\r\n if (data.context) {\r\n context.context = data.context;\r\n }\r\n}\r\n\r\nexport function getSearchParams(request: NextRequest) {\r\n const searchParams = request.nextUrl.searchParams;\r\n const params = Object.fromEntries(searchParams.entries());\r\n return {\r\n market: params.market || defaultMarket,\r\n locale: params.locale || defaultLocale,\r\n defaultMarket,\r\n defaultLocale,\r\n params,\r\n searchParams: request.nextUrl.searchParams,\r\n };\r\n}\r\n\r\nexport const getPayloadInstance = cache(\r\n async (props: { config: SanitizedConfig | Promise<SanitizedConfig> }) => await getPayload_(props)\r\n);\r\n\r\nexport function getOptions({\r\n locale = 'all',\r\n user = guest,\r\n draft = false,\r\n}: {\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}) {\r\n const localized: BaseOptions = {\r\n locale: locale as TypedLocale,\r\n fallbackLocale: defaultLocale as TypedLocale,\r\n draft,\r\n depth: 0,\r\n pagination: false,\r\n limit: 10000,\r\n user,\r\n overrideAccess: false,\r\n };\r\n const unlocalized: BaseOptions = {\r\n locale: 'all',\r\n fallbackLocale: defaultLocale as TypedLocale,\r\n draft,\r\n depth: 0,\r\n pagination: false,\r\n limit: 10000,\r\n user,\r\n overrideAccess: false,\r\n };\r\n return { localized, unlocalized };\r\n}\r\n\r\nexport async function getRoutes({\r\n payload,\r\n market = 'all',\r\n locale = 'all',\r\n user = guest,\r\n draft = false,\r\n}: {\r\n payload: BasePayload;\r\n market?: string;\r\n locale?: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}): Promise<IRoute[]> {\r\n const cacheKey = getCacheKey({ market, locale, user, draft: draft ? 'true' : 'false' });\r\n\r\n const routeCache = getRouteCache();\r\n if (USE_CACHE && routeCache.has(cacheKey)) {\r\n console.log('getRoutes from cache', cacheKey);\r\n return routeCache.get(cacheKey);\r\n }\r\n\r\n let routes: IRoute[] = [];\r\n if (!user) {\r\n return routes;\r\n }\r\n\r\n const { localized, unlocalized } = getOptions({ locale, user, draft });\r\n\r\n const marketRequest = await payload.find({\r\n ...localized,\r\n collection: 'market',\r\n where: { isActive: { equals: true } },\r\n });\r\n const markets = marketRequest.docs;\r\n\r\n const localeResult = await payload.findGlobal({\r\n ...localized,\r\n slug: 'locale',\r\n }) as { items: ILocale[] };\r\n const locales = localeResult.items.filter(x => x.isActive);\r\n\r\n if (locales.length > 0 && markets.length > 0) {\r\n const pageCollections = payload.config.collections.filter(x => {\r\n return x.fields.find(x => 'name' in x && x.name === 'slug');\r\n });\r\n const keys = pageCollections.map(x => x.slug);\r\n // console.log(payload.config.collections.find(x => x.slug === 'homepage'));\r\n // const keys = Object.keys(store.pages) as CollectionSlug[];\r\n const pages: Record<string, any[]> = Object.fromEntries(keys.map(x => [x, []]));\r\n for (const key of keys) {\r\n const pageResult = await payload.find({ ...unlocalized, collection: key });\r\n pages[key] = pageResult.docs;\r\n }\r\n const categoryRequest = await payload.find({\r\n ...unlocalized,\r\n collection: 'category',\r\n depth: 1,\r\n });\r\n const categories = categoryRequest.docs;\r\n const mediaRequest = await payload.find({\r\n ...unlocalized,\r\n collection: 'media',\r\n depth: 1,\r\n });\r\n const medias = mediaRequest.docs;\r\n routes = collectRoutes(\r\n pages,\r\n categories as unknown as ICategory[],\r\n markets as unknown as IMarket[],\r\n locales,\r\n medias as unknown as IMedia[]\r\n );\r\n }\r\n routeCache.set(cacheKey, routes);\r\n return routes;\r\n}\r\n\r\nexport async function getMixerContext({\r\n payload,\r\n market,\r\n locale,\r\n user = guest,\r\n draft = false,\r\n}: {\r\n payload: BasePayload;\r\n market: string;\r\n locale: string;\r\n user?: User & Config['user'];\r\n draft?: boolean;\r\n}): Promise<MixerContext> {\r\n const cacheKey = getCacheKey({ market, locale, user, draft: draft ? 'true' : 'false' });\r\n\r\n const mixerCache = getMixerCache();\r\n if (mixerCache.has(cacheKey) && USE_CACHE) {\r\n console.log('getContext from cache', cacheKey);\r\n return mixerCache.get(cacheKey);\r\n }\r\n\r\n const { localized } = getOptions({ locale, user, draft });\r\n const localeResult = await payload.findGlobal({\r\n ...localized,\r\n slug: 'locale',\r\n }) as { items: ILocale[] };\r\n const locales = localeResult.items.filter(x => x.isActive) as unknown as ILocale[];\r\n const localeIds = locales.map(x => x.id) as string[];\r\n\r\n const marketRequest = await payload.find({\r\n ...localized,\r\n collection: 'market',\r\n });\r\n const marketItems = marketRequest.docs;\r\n const markets = marketItems.filter(x => x.isActive) as unknown as IMarket[];\r\n const marketIds = markets.map(x => x.id);\r\n\r\n const categoryRequest = await payload.find({\r\n ...localized,\r\n collection: 'category',\r\n depth: 2,\r\n });\r\n const categories = categoryRequest.docs;\r\n\r\n const routes = await getRoutes({ payload, market, locale, user, draft });\r\n const currentRoutes = filterRoutes(routes, market, locale);\r\n\r\n const richText = false;\r\n\r\n const context: MixerContext = {\r\n locale,\r\n localeIds,\r\n locales,\r\n market,\r\n marketIds,\r\n markets,\r\n routes,\r\n currentRoutes,\r\n categories: categories as unknown as MixerContext['categories'],\r\n richText,\r\n };\r\n\r\n mixerCache.set(cacheKey, context);\r\n await setContext({ context });\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Runtime (request-time) payload accessor.\r\n *\r\n * By default, operates as the guest user for static generation. For auth:\r\n * call getHeaders() directly in your page/route/layout, then pass it here.\r\n *\r\n * Example:\r\n * const headers = await getHeaders();\r\n * const { payload, user, getContext } = await getPayload({ config, headers });\r\n */\r\nexport async function getPayload({\r\n config,\r\n headers,\r\n}: {\r\n config: Promise<SanitizedConfig>;\r\n headers?: ReadonlyHeaders;\r\n}) {\r\n const payload = await getPayload_({ config });\r\n await setContext({ payload: payload as MixerPayload });\r\n\r\n let user: User & Config['user'] = guest;\r\n if (headers) {\r\n try {\r\n const auth = await payload.auth({ headers, canSetHeaders: false });\r\n if (auth.user) {\r\n user = auth.user as typeof user;\r\n }\r\n // console.log('getPayload', user, token);\r\n } catch (error) {\r\n console.log('getPayload.error', error);\r\n }\r\n }\r\n\r\n const draft = false;\r\n\r\n return {\r\n payload: payload as MixerPayload,\r\n user,\r\n getContext: (market: string, locale: string) => getMixerContext({ payload, market, locale, user, draft }),\r\n };\r\n}\r\n\r\nexport function filterRoutes(routes: IRoute[], market: string, locale: string): IRoute[] {\r\n market = market === 'all' ? defaultMarket : market;\r\n locale = locale === 'all' ? defaultLocale : locale;\r\n return routes.filter(x => x.market === market && x.locale === locale);\r\n}\r\n\r\nexport function getAuthHeaders(token: { value: string } | undefined): Headers {\r\n if (token) {\r\n return new Headers({ Authorization: `JWT ${token.value}` });\r\n } else {\r\n return new Headers({ Authorization: `users API-Key ${process.env.STORE_API_KEY}` });\r\n }\r\n}\r\n\r\n/**\r\n * Produces the common option block shared across all payload.find / payload.findGlobal calls.\r\n * For payload.find, add pagination: false and limit: 10000 at the call site.\r\n * For payload.findByID, spread directly — extra find-only fields are ignored.\r\n */\r\nexport function buildBaseOptions(user: any, locale: string, draft?: boolean) {\r\n return {\r\n locale: locale as TypedLocale,\r\n fallbackLocale: defaultLocale as TypedFallbackLocale,\r\n draft: draft ?? false,\r\n depth: 0,\r\n user,\r\n overrideAccess: false,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Payload proxy example\r\n *\r\n *\r\n * import type { Payload, PayloadRequest } from '../types/index.js'\r\n\r\nimport { commitTransaction } from './commitTransaction.js'\r\nimport { initTransaction } from './initTransaction.js'\r\nimport { killTransaction } from './killTransaction.js'\r\n\r\nconst localOperations = [\r\n 'count',\r\n 'countGlobalVersions',\r\n 'countVersions',\r\n 'create',\r\n 'delete',\r\n 'duplicate',\r\n 'find',\r\n 'findByID',\r\n 'delete',\r\n 'duplicate',\r\n 'find',\r\n 'findByID',\r\n 'findGlobal',\r\n 'findGlobalVersionByID',\r\n 'findGlobalVersions',\r\n 'findVersionByID',\r\n 'findVersionByID',\r\n 'login',\r\n 'update',\r\n 'updateGlobal',\r\n 'restoreVersion',\r\n 'restoreGlobalVersion',\r\n] satisfies (keyof Payload)[]\r\n\r\ntype LocalOperation = (typeof localOperations)[number]\r\n\r\nconst isLocalOperation = (key: string): key is LocalOperation => {\r\n return localOperations.includes(key as LocalOperation)\r\n}\r\n\r\nexport const withTransaction = async <T>(\r\n payload: Payload,\r\n callback: (transaction: Payload) => Promise<T>,\r\n) => {\r\n const transactionReq = { payload } as PayloadRequest\r\n await initTransaction(transactionReq)\r\n\r\n const proxy = new Proxy(payload, {\r\n get(target, property: keyof Payload, receiver) {\r\n if (isLocalOperation(property)) {\r\n const operation = Reflect.get(target, property, receiver)\r\n\r\n return function (options) {\r\n let req: Partial<PayloadRequest> = options.req\r\n\r\n if (!req) {\r\n req = {}\r\n }\r\n\r\n if (!req.transactionID) {\r\n req = { ...req, transactionID: transactionReq.transactionID }\r\n }\r\n\r\n return (operation as (...args: unknown[]) => void)({\r\n ...options,\r\n req,\r\n })\r\n }\r\n }\r\n\r\n return Reflect.get(target, property, receiver)\r\n },\r\n })\r\n\r\n try {\r\n const result = await callback(proxy)\r\n await commitTransaction(transactionReq)\r\n return result\r\n } catch (e) {\r\n await killTransaction(transactionReq)\r\n throw e\r\n }\r\n}\r\n\r\n// -----------------\r\n\r\nconst { one, two } = await withTransaction(payload, async (transaction) => {\r\n const one = await transaction.create({ collection: 'posts', data: { title: 'one' } })\r\n const two = await transaction.create({ collection: 'posts', data: { title: 'two' } })\r\n\r\n return { one, two }\r\n})\r\n\r\n */\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MixerPayload } from "./mixer-payload.js";
|
|
2
|
+
import { MixerContext, TypedPage } from "../types.js";
|
|
3
|
+
import { User } from "@websolutespa/payload-plugin-bowl";
|
|
4
|
+
import { CollectionSlug } from "payload";
|
|
5
|
+
|
|
6
|
+
//#region src/server/page.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Fetches a single page document by ID using Payload local API and assembles
|
|
10
|
+
* the IPage envelope (routes, alternates, breadcrumb, parentRoute).
|
|
11
|
+
*
|
|
12
|
+
* All data required for the envelope comes from mixerContext — no store calls.
|
|
13
|
+
* - routes/alternates : mixerContext.routes filtered by schema+id
|
|
14
|
+
* - segments : getCategorySegments() from bom-core (pure)
|
|
15
|
+
* - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes
|
|
16
|
+
*/
|
|
17
|
+
declare function getPage<TSlug extends CollectionSlug>(slug: TSlug, id: string, market: string, locale: string, payload: MixerPayload, user: User, mixerContext: MixerContext, draftMode?: boolean): Promise<TypedPage<TSlug> | undefined>;
|
|
18
|
+
//# sourceMappingURL=page.d.ts.map
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { getPage };
|
|
22
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","names":[],"sources":["../../src/server/page.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAmBA;;;;;;;AASqB,iBATC,OASD,CAAA,cATuB,cASvB,CAAA,CAAA,IAAA,EARb,KAQa,EAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAJV,YAIU,EAAA,IAAA,EAHb,IAGa,EAAA,YAAA,EAFL,YAEK,EAAA,SAAA,CAAA,EAAA,OAAA,CAAA,EAAlB,OAAkB,CAAV,SAAU,CAAA,KAAA,CAAA,GAAA,SAAA,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import { buildBreadcrumb } from "../lib/breadcrumb.js";
|
|
5
|
+
import { buildBaseOptions } from "./mixer.js";
|
|
6
|
+
import { getCategorySegments } from "@websolutespa/bom-core";
|
|
7
|
+
|
|
8
|
+
//#region src/server/page.ts
|
|
9
|
+
/**
|
|
10
|
+
|
|
11
|
+
* Fetches a single page document by ID using Payload local API and assembles
|
|
12
|
+
|
|
13
|
+
* the IPage envelope (routes, alternates, breadcrumb, parentRoute).
|
|
14
|
+
|
|
15
|
+
*
|
|
16
|
+
|
|
17
|
+
* All data required for the envelope comes from mixerContext — no store calls.
|
|
18
|
+
|
|
19
|
+
* - routes/alternates : mixerContext.routes filtered by schema+id
|
|
20
|
+
|
|
21
|
+
* - segments : getCategorySegments() from bom-core (pure)
|
|
22
|
+
|
|
23
|
+
* - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes
|
|
24
|
+
|
|
25
|
+
*/
|
|
26
|
+
async function getPage(slug, id, market, locale, payload, user, mixerContext, draftMode) {
|
|
27
|
+
try {
|
|
28
|
+
const base = buildBaseOptions(user, locale, draftMode);
|
|
29
|
+
const page = await payload.findByID({
|
|
30
|
+
collection: slug,
|
|
31
|
+
id,
|
|
32
|
+
locale: base.locale,
|
|
33
|
+
fallbackLocale: base.fallbackLocale,
|
|
34
|
+
draft: base.draft,
|
|
35
|
+
depth: base.depth,
|
|
36
|
+
user: base.user,
|
|
37
|
+
overrideAccess: base.overrideAccess,
|
|
38
|
+
disableErrors: true,
|
|
39
|
+
context: mixerContext
|
|
40
|
+
});
|
|
41
|
+
if (page) {
|
|
42
|
+
const routes = mixerContext.routes.filter((r) => r.schema === slug && String(r.page) === String(id));
|
|
43
|
+
const currentRoute = routes.find((r) => r.market === market && r.locale === locale);
|
|
44
|
+
const alternates = routes;
|
|
45
|
+
const categories = mixerContext.categories;
|
|
46
|
+
const segments = getCategorySegments(categories, page);
|
|
47
|
+
const currentRoutes = mixerContext.currentRoutes;
|
|
48
|
+
const breadcrumb = currentRoute ? buildBreadcrumb(segments, currentRoute, currentRoutes) : [];
|
|
49
|
+
const parentRoute = breadcrumb.length > 1 ? breadcrumb[breadcrumb.length - 2] : void 0;
|
|
50
|
+
return {
|
|
51
|
+
...page,
|
|
52
|
+
href: currentRoute?.id,
|
|
53
|
+
alternates,
|
|
54
|
+
breadcrumb,
|
|
55
|
+
parentRoute
|
|
56
|
+
};
|
|
57
|
+
} else {
|
|
58
|
+
console.log("PageService.getPage.notfound", slug, id, locale);
|
|
59
|
+
return void 0;
|
|
60
|
+
}
|
|
61
|
+
} catch {
|
|
62
|
+
return void 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { getPage };
|
|
68
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","names":["slug: TSlug","id: string","market: string","locale: string","payload: MixerPayload","user: User","mixerContext: MixerContext","draftMode?: boolean","breadcrumb: IRouteLink[]","parentRoute: IRouteLink | undefined"],"sources":["../../src/server/page.ts"],"sourcesContent":["'use server';\r\n\r\nimport { getCategorySegments, ICategorized, ICategory, IRoute, IRouteLink } from '@websolutespa/bom-core';\r\nimport type { User } from '@websolutespa/payload-plugin-bowl';\r\nimport type { CollectionSlug } from 'payload';\r\nimport { buildBreadcrumb } from '../lib/breadcrumb';\r\nimport type { MixerContext, TypedPage } from '../types';\r\nimport { buildBaseOptions } from './mixer';\r\nimport type { MixerPayload } from './mixer-payload';\r\n\r\n/**\r\n * Fetches a single page document by ID using Payload local API and assembles\r\n * the IPage envelope (routes, alternates, breadcrumb, parentRoute).\r\n *\r\n * All data required for the envelope comes from mixerContext — no store calls.\r\n * - routes/alternates : mixerContext.routes filtered by schema+id\r\n * - segments : getCategorySegments() from bom-core (pure)\r\n * - breadcrumb : findRouteOfCategory() from bom-core + mixerContext.currentRoutes\r\n */\r\nexport async function getPage<TSlug extends CollectionSlug>(\r\n slug: TSlug,\r\n id: string,\r\n market: string,\r\n locale: string,\r\n payload: MixerPayload,\r\n user: User,\r\n mixerContext: MixerContext,\r\n draftMode?: boolean\r\n): Promise<TypedPage<TSlug> | undefined> {\r\n try {\r\n const base = buildBaseOptions(user, locale, draftMode);\r\n const page = await payload.findByID({\r\n collection: slug,\r\n id,\r\n locale: base.locale,\r\n fallbackLocale: base.fallbackLocale,\r\n draft: base.draft,\r\n depth: base.depth,\r\n user: base.user,\r\n overrideAccess: base.overrideAccess,\r\n disableErrors: true,\r\n context: mixerContext,\r\n });\r\n if (page) {\r\n // All routes for this schema+document across every market/locale (for alternates)\r\n const routes = (mixerContext.routes as IRoute[]).filter(\r\n r => r.schema === slug && String(r.page) === String(id)\r\n );\r\n const currentRoute = routes.find(r => r.market === market && r.locale === locale);\r\n const alternates = routes;\r\n\r\n // Segments derived from categories already present in mixerContext (pure, no I/O)\r\n const categories = mixerContext.categories as unknown as ICategory[];\r\n const segments = getCategorySegments(categories, page as unknown as ICategorized);\r\n\r\n // Breadcrumb built from currentRoutes (pre-filtered to market+locale by mixer)\r\n const currentRoutes = mixerContext.currentRoutes as IRoute[];\r\n const breadcrumb: IRouteLink[] = currentRoute\r\n ? buildBreadcrumb(segments, currentRoute, currentRoutes)\r\n : [];\r\n\r\n const parentRoute: IRouteLink | undefined = breadcrumb.length > 1\r\n ? breadcrumb[breadcrumb.length - 2]\r\n : undefined;\r\n\r\n return {\r\n ...page,\r\n href: currentRoute?.id,\r\n alternates,\r\n breadcrumb,\r\n parentRoute,\r\n } as unknown as TypedPage<TSlug>;\r\n } else {\r\n console.log('PageService.getPage.notfound', slug, id, locale);\r\n return undefined;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\n/*\r\nexport function asServerProps(props: any): any {\r\n return JSON.parse(JSON.stringify(props));\r\n}\r\n*/\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,eAAsB,QACpBA,MACAC,IACAC,QACAC,QACAC,SACAC,MACAC,cACAC,WACuC;AACvC,KAAI;EACF,MAAM,OAAO,iBAAiB,MAAM,QAAQ,UAAU;EACtD,MAAM,OAAO,MAAM,QAAQ,SAAS;GAClC,YAAY;GACZ;GACA,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACrB,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,gBAAgB,KAAK;GACrB,eAAe;GACf,SAAS;EACV,EAAC;AACF,MAAI,MAAM;GAER,MAAM,SAAU,aAAa,OAAoB,OAC/C,OAAK,EAAE,WAAW,QAAQ,OAAO,EAAE,KAAK,KAAK,OAAO,GAAG,CACxD;GACD,MAAM,eAAe,OAAO,KAAK,OAAK,EAAE,WAAW,UAAU,EAAE,WAAW,OAAO;GACjF,MAAM,aAAa;GAGnB,MAAM,aAAa,aAAa;GAChC,MAAM,WAAW,oBAAoB,YAAY,KAAgC;GAGjF,MAAM,gBAAgB,aAAa;GACnC,MAAMC,aAA2B,eAC7B,gBAAgB,UAAU,cAAc,cAAc,GACtD,CAAE;GAEN,MAAMC,cAAsC,WAAW,SAAS,IAC5D,WAAW,WAAW,SAAS,KAC/B;AAEJ,UAAO;IACL,GAAG;IACH,MAAM,cAAc;IACpB;IACA;IACA;GACD;EACF,OAAM;GACL,QAAQ,IAAI,gCAAgC,MAAM,IAAI,OAAO;AAC7D,UAAO;EACR;CACF,QAAO;AACN,SAAO;CACR;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IRoute } from "@websolutespa/bom-core";
|
|
2
|
+
import { NextRequest } from "next/server";
|
|
3
|
+
import * as next_dist_server_web_next_url0 from "next/dist/server/web/next-url";
|
|
4
|
+
|
|
5
|
+
//#region src/server/utils.d.ts
|
|
6
|
+
declare function getNextUrl(request: NextRequest, route: IRoute): next_dist_server_web_next_url0.NextURL;
|
|
7
|
+
declare function getHrefBeforeRedirect(request: NextRequest): string | null;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { getHrefBeforeRedirect, getNextUrl };
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/server/utils.ts"],"sourcesContent":[],"mappings":";;;;;iBAIgB,UAAA,UAAoB,oBAAoB,SAAM,8BAAA,CAAA;iBAQ9C,qBAAA,UAA+B"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveRoute } from "../lib/route.js";
|
|
2
2
|
import { getHost } from "@websolutespa/bom-core";
|
|
3
|
+
|
|
3
4
|
//#region src/server/utils.ts
|
|
4
5
|
function getNextUrl(request, route) {
|
|
5
6
|
const nextUrl = request.nextUrl.clone();
|
|
6
|
-
|
|
7
|
+
const resolvedPathname = resolveRoute(route);
|
|
8
|
+
nextUrl.pathname = resolvedPathname;
|
|
7
9
|
return nextUrl;
|
|
8
10
|
}
|
|
9
11
|
function getHrefBeforeRedirect(request) {
|
|
@@ -17,7 +19,7 @@ function getHrefBeforeRedirect(request) {
|
|
|
17
19
|
}
|
|
18
20
|
return hrefBeforeRedirect;
|
|
19
21
|
}
|
|
20
|
-
//#endregion
|
|
21
|
-
export { getNextUrl as n, getHrefBeforeRedirect as t };
|
|
22
22
|
|
|
23
|
-
//#
|
|
23
|
+
//#endregion
|
|
24
|
+
export { getHrefBeforeRedirect, getNextUrl };
|
|
25
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["request: NextRequest","route: IRoute","hrefBeforeRedirect: string | null"],"sources":["../../src/server/utils.ts"],"sourcesContent":["import { getHost, IRoute } from '@websolutespa/bom-core';\r\nimport { NextRequest } from 'next/server';\r\nimport { resolveRoute } from '../lib/route';\r\n\r\nexport function getNextUrl(request: NextRequest, route: IRoute) {\r\n const nextUrl = request.nextUrl.clone();\r\n const resolvedPathname = resolveRoute(route);\r\n // console.log('getNextUrl.resolvedPathname', resolvedPathname);\r\n nextUrl.pathname = resolvedPathname;\r\n return nextUrl;\r\n}\r\n\r\nexport function getHrefBeforeRedirect(request: NextRequest): string | null {\r\n let hrefBeforeRedirect: string | null = null;\r\n const urlBeforeRedirect = request.nextUrl.clone();\r\n const host = getHost(request.headers);\r\n if (host) {\r\n urlBeforeRedirect.host = host;\r\n urlBeforeRedirect.port = host.split(':')[1] || '';\r\n hrefBeforeRedirect = urlBeforeRedirect.href;\r\n }\r\n return hrefBeforeRedirect;\r\n}\r\n"],"mappings":";;;;AAIA,SAAgB,WAAWA,SAAsBC,OAAe;CAC9D,MAAM,UAAU,QAAQ,QAAQ,OAAO;CACvC,MAAM,mBAAmB,aAAa,MAAM;CAE5C,QAAQ,WAAW;AACnB,QAAO;AACR;AAED,SAAgB,sBAAsBD,SAAqC;CACzE,IAAIE,qBAAoC;CACxC,MAAM,oBAAoB,QAAQ,QAAQ,OAAO;CACjD,MAAM,OAAO,QAAQ,QAAQ,QAAQ;AACrC,KAAI,MAAM;EACR,kBAAkB,OAAO;EACzB,kBAAkB,OAAO,KAAK,MAAM,IAAI,CAAC,MAAM;EAC/C,qBAAqB,kBAAkB;CACxC;AACD,QAAO;AACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utmz.d.ts","names":[],"sources":["../../src/server/utmz.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,OAAA,UAAiB"}
|