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