@justanarthur/payload-www 0.3.3 → 0.3.5
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/dist/blocks.js +6 -2
- package/dist/collections.js +47 -15
- package/dist/components.js +1 -0
- package/dist/config.js +79 -21
- package/dist/core-blocks.js +6 -2
- package/dist/core-utils.js +5 -1
- package/dist/data-collections.js +47 -15
- package/dist/data-test.js +79 -21
- package/dist/globals.js +10 -1
- package/dist/hooks.js +47 -15
- package/dist/index.js +1 -0
- package/dist/metadata.js +64 -21
- package/dist/pages.js +118 -36
- package/dist/render-components.js +13 -3
- package/dist/render-metadata.js +64 -21
- package/dist/render-pages.js +178 -53
- package/dist/render-utils.js +58 -15
- package/dist/server.js +179 -56
- package/dist/test.js +79 -21
- package/dist/utils.js +5 -1
- package/dist/with-www-config.js +79 -21
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -30,6 +30,7 @@ function PageShowcase({
|
|
|
30
30
|
metadataHeading = "Page metadata",
|
|
31
31
|
jsonLdHeading = "JSON-LD"
|
|
32
32
|
}) {
|
|
33
|
+
console.log("[WWW] render/components:PageShowcase jsonLdEntries=", jsonLd.length, "hasOg=", Boolean(metadata.openGraph), "hasTwitter=", Boolean(metadata.twitter), "canonical=", metadata.alternates?.canonical);
|
|
33
34
|
const og = metadata.openGraph;
|
|
34
35
|
const twitter = metadata.twitter;
|
|
35
36
|
const rows = [
|
|
@@ -147,6 +148,7 @@ function LocaleSwitcher({
|
|
|
147
148
|
labels
|
|
148
149
|
}) {
|
|
149
150
|
const locales = Object.keys(hreflangAlternates).filter((k) => k !== "x-default");
|
|
151
|
+
console.log("[WWW] render/components:LocaleSwitcher currentLocale=", currentLocale, "locales=", JSON.stringify(locales), "hasXDefault=", Boolean(hreflangAlternates["x-default"]));
|
|
150
152
|
return /* @__PURE__ */ jsx6("nav", {
|
|
151
153
|
"aria-label": "Language",
|
|
152
154
|
className: "locale-switcher",
|
|
@@ -223,30 +225,45 @@ var slugField = (options = {}) => {
|
|
|
223
225
|
|
|
224
226
|
// src/render/_locale.ts
|
|
225
227
|
function prefixFor(locale, defaultLocale, mode) {
|
|
228
|
+
let result;
|
|
226
229
|
if (mode === "never")
|
|
227
|
-
|
|
228
|
-
if (mode === "as-needed" && locale === defaultLocale)
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
result = "";
|
|
231
|
+
else if (mode === "as-needed" && locale === defaultLocale)
|
|
232
|
+
result = "";
|
|
233
|
+
else
|
|
234
|
+
result = `/${locale}`;
|
|
235
|
+
console.log("[WWW] render/_locale:prefixFor locale=", locale, "default=", defaultLocale, "mode=", mode, "->", JSON.stringify(result));
|
|
236
|
+
return result;
|
|
231
237
|
}
|
|
232
238
|
function resolveLocale(req) {
|
|
233
|
-
if (!req || typeof req !== "object")
|
|
239
|
+
if (!req || typeof req !== "object") {
|
|
240
|
+
console.log('[WWW] render/_locale:resolveLocale -> "" (no req)');
|
|
234
241
|
return "";
|
|
242
|
+
}
|
|
235
243
|
const r = req;
|
|
236
|
-
if (typeof r.locale === "string" && r.locale.length > 0)
|
|
244
|
+
if (typeof r.locale === "string" && r.locale.length > 0) {
|
|
245
|
+
console.log("[WWW] render/_locale:resolveLocale ->", r.locale, "(from req.locale)");
|
|
237
246
|
return r.locale;
|
|
247
|
+
}
|
|
238
248
|
const fallback = r.payload?.config?.localization?.defaultLocale;
|
|
239
|
-
if (typeof fallback === "string" && fallback.length > 0)
|
|
249
|
+
if (typeof fallback === "string" && fallback.length > 0) {
|
|
250
|
+
console.log("[WWW] render/_locale:resolveLocale ->", fallback, "(from config.localization.defaultLocale)");
|
|
240
251
|
return fallback;
|
|
252
|
+
}
|
|
253
|
+
console.log('[WWW] render/_locale:resolveLocale -> "" (no locale anywhere)');
|
|
241
254
|
return "";
|
|
242
255
|
}
|
|
243
256
|
function allLocales(req) {
|
|
244
|
-
if (!req || typeof req !== "object")
|
|
257
|
+
if (!req || typeof req !== "object") {
|
|
258
|
+
console.log("[WWW] render/_locale:allLocales -> [] (no req)");
|
|
245
259
|
return [];
|
|
260
|
+
}
|
|
246
261
|
const r = req;
|
|
247
262
|
const list = r.payload?.config?.localization?.locales;
|
|
248
|
-
if (!Array.isArray(list) || list.length === 0)
|
|
263
|
+
if (!Array.isArray(list) || list.length === 0) {
|
|
264
|
+
console.log("[WWW] render/_locale:allLocales -> [] (no locales declared)");
|
|
249
265
|
return [];
|
|
266
|
+
}
|
|
250
267
|
const out = [];
|
|
251
268
|
for (const entry of list) {
|
|
252
269
|
if (typeof entry === "string" && entry.length > 0) {
|
|
@@ -257,6 +274,7 @@ function allLocales(req) {
|
|
|
257
274
|
out.push(code);
|
|
258
275
|
}
|
|
259
276
|
}
|
|
277
|
+
console.log("[WWW] render/_locale:allLocales ->", JSON.stringify(out));
|
|
260
278
|
return out;
|
|
261
279
|
}
|
|
262
280
|
|
|
@@ -266,21 +284,28 @@ function nextCacheImport() {
|
|
|
266
284
|
return cachePromise ??= import("next/cache");
|
|
267
285
|
}
|
|
268
286
|
function shouldSkipRevalidate(context) {
|
|
269
|
-
|
|
287
|
+
const skip = Boolean(context?.disableRevalidate);
|
|
288
|
+
if (skip)
|
|
289
|
+
console.log("[WWW] render/hooks:_shared:shouldSkipRevalidate -> skip");
|
|
290
|
+
return skip;
|
|
270
291
|
}
|
|
271
292
|
async function safeRevalidatePath(payload, path) {
|
|
293
|
+
console.log("[WWW] render/hooks:_shared:safeRevalidatePath path=", path);
|
|
272
294
|
try {
|
|
273
295
|
const { revalidatePath } = await nextCacheImport();
|
|
274
296
|
revalidatePath(path);
|
|
275
297
|
} catch (error) {
|
|
298
|
+
console.error("[WWW] render/hooks:_shared:safeRevalidatePath failed path=", path, "err=", String(error));
|
|
276
299
|
payload.logger.error(`revalidatePath("${path}") failed: ${String(error)}`);
|
|
277
300
|
}
|
|
278
301
|
}
|
|
279
302
|
async function safeRevalidateTag(payload, tag, profile = "max") {
|
|
303
|
+
console.log("[WWW] render/hooks:_shared:safeRevalidateTag tag=", tag, "profile=", profile);
|
|
280
304
|
try {
|
|
281
305
|
const { revalidateTag } = await nextCacheImport();
|
|
282
306
|
revalidateTag(tag, profile);
|
|
283
307
|
} catch (error) {
|
|
308
|
+
console.error("[WWW] render/hooks:_shared:safeRevalidateTag failed tag=", tag, "err=", String(error));
|
|
284
309
|
payload.logger.error(`revalidateTag("${tag}") failed: ${String(error)}`);
|
|
285
310
|
}
|
|
286
311
|
}
|
|
@@ -296,6 +321,7 @@ function createRevalidateCollectionHook(options) {
|
|
|
296
321
|
pathMode = "url"
|
|
297
322
|
} = options;
|
|
298
323
|
const resolvedSitemapTag = sitemapTag === false ? false : sitemapTag ?? `${collectionSlug}-sitemap`;
|
|
324
|
+
console.log("[WWW] render/hooks:createRevalidateCollectionHook collectionSlug=", collectionSlug, "urlPathPrefix=", urlPathPrefix, "sitemapTag=", resolvedSitemapTag, "pathMode=", pathMode);
|
|
299
325
|
const resolveDefaults = (req) => {
|
|
300
326
|
const mode = modeOption ?? "always";
|
|
301
327
|
const defaultLocale = defaultLocaleOption ?? req?.payload?.config?.localization?.defaultLocale ?? "";
|
|
@@ -324,6 +350,7 @@ function createRevalidateCollectionHook(options) {
|
|
|
324
350
|
}
|
|
325
351
|
};
|
|
326
352
|
const fireCollectionTags = async (payload, docId, req) => {
|
|
353
|
+
console.log("[WWW] render/hooks:fireCollectionTags collectionSlug=", collectionSlug, "docId=", docId);
|
|
327
354
|
if (typeof docId === "string" || typeof docId === "number") {
|
|
328
355
|
await safeRevalidateTag(payload, `collection_${collectionSlug}_${docId}`);
|
|
329
356
|
}
|
|
@@ -337,6 +364,7 @@ function createRevalidateCollectionHook(options) {
|
|
|
337
364
|
const { payload } = req;
|
|
338
365
|
const typed = doc;
|
|
339
366
|
const prev = previousDoc;
|
|
367
|
+
console.log("[WWW] render/hooks:afterChange collectionSlug=", collectionSlug, "id=", typed.id, "slug=", typed.slug, "prevSlug=", prev?.slug);
|
|
340
368
|
const isPublished = typed._status === "published";
|
|
341
369
|
const wasPublished = prev?._status === "published";
|
|
342
370
|
const prevSlugIsString = typeof prev?.slug === "string";
|
|
@@ -360,6 +388,7 @@ function createRevalidateCollectionHook(options) {
|
|
|
360
388
|
return doc ?? null;
|
|
361
389
|
const { payload } = req;
|
|
362
390
|
const typed = doc;
|
|
391
|
+
console.log("[WWW] render/hooks:afterDelete collectionSlug=", collectionSlug, "id=", typed?.id, "slug=", typed?.slug);
|
|
363
392
|
if (pathMode !== "tag-only") {
|
|
364
393
|
await fanOutPaths(payload, req, typed?.slug, `Revalidating deleted ${collectionSlug} at path:`);
|
|
365
394
|
}
|
|
@@ -368,11 +397,14 @@ function createRevalidateCollectionHook(options) {
|
|
|
368
397
|
};
|
|
369
398
|
return { afterChange, afterDelete };
|
|
370
399
|
}
|
|
371
|
-
var createRevalidatePageHooks = (opts = {}) =>
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
400
|
+
var createRevalidatePageHooks = (opts = {}) => {
|
|
401
|
+
console.log("[WWW] render/hooks:createRevalidatePageHooks (deprecated alias) opts=", JSON.stringify(opts));
|
|
402
|
+
return createRevalidateCollectionHook({
|
|
403
|
+
collectionSlug: "pages",
|
|
404
|
+
urlPathPrefix: "",
|
|
405
|
+
...opts
|
|
406
|
+
});
|
|
407
|
+
};
|
|
376
408
|
|
|
377
409
|
// src/config/constants.ts
|
|
378
410
|
var PAGES_RENDER_PATH = "@justanarthur/payload-www/render-pages#PagesPage";
|
|
@@ -680,10 +712,12 @@ var link = (options = {}) => {
|
|
|
680
712
|
|
|
681
713
|
// src/render/hooks/revalidateGlobal.ts
|
|
682
714
|
function createRevalidateGlobalHook(slug) {
|
|
715
|
+
console.log("[WWW] render/hooks:createRevalidateGlobalHook slug=", slug);
|
|
683
716
|
return async ({ doc, req: { payload, context, locale } }) => {
|
|
684
717
|
if (shouldSkipRevalidate(context))
|
|
685
718
|
return doc;
|
|
686
719
|
const tags = [`global_${slug}`, `global_${slug}_${locale}`];
|
|
720
|
+
console.log("[WWW] render/hooks:revalidateGlobal slug=", slug, "locale=", locale, "tags=", JSON.stringify(tags));
|
|
687
721
|
payload.logger.info?.(`Revalidating global: ${tags.join(", ")}`);
|
|
688
722
|
for (const tag of tags) {
|
|
689
723
|
await safeRevalidateTag(payload, tag);
|
|
@@ -778,11 +812,14 @@ function createPreviewHandler(options) {
|
|
|
778
812
|
const url = new URL(req.url);
|
|
779
813
|
const path = url.searchParams.get("path") ?? "/";
|
|
780
814
|
const previewSecret = url.searchParams.get("previewSecret");
|
|
815
|
+
console.log("[WWW] render/preview:createPreviewHandler:GET path=", path, "hasSecret=", Boolean(previewSecret), "enableDraftMode=", enableDraftMode);
|
|
781
816
|
if (!previewSecret || previewSecret !== secret) {
|
|
817
|
+
console.warn("[WWW] render/preview:createPreviewHandler:GET invalid preview secret (401)");
|
|
782
818
|
return new Response("Invalid preview secret", { status: 401 });
|
|
783
819
|
}
|
|
784
820
|
if (enableDraftMode) {
|
|
785
821
|
(await draftMode()).enable();
|
|
822
|
+
console.log("[WWW] render/preview:createPreviewHandler:GET draftMode enabled");
|
|
786
823
|
}
|
|
787
824
|
redirect(path);
|
|
788
825
|
return new Response(null, { status: 204 });
|
|
@@ -802,6 +839,7 @@ async function buildHreflangAlternates({
|
|
|
802
839
|
localePrefix = "always"
|
|
803
840
|
}) {
|
|
804
841
|
const allLocaleSlugs = await queryAllLocaleSlugs(storedSlug, locale);
|
|
842
|
+
console.log("[WWW] render/metadata:buildHreflangAlternates storedSlug=", storedSlug, "locale=", locale, "allLocaleSlugs=", JSON.stringify(allLocaleSlugs));
|
|
805
843
|
const languages = {};
|
|
806
844
|
const urlFor = (l, slug) => {
|
|
807
845
|
const trimmedPrefix = urlPrefix.replace(/^\/|\/$/g, "");
|
|
@@ -819,6 +857,7 @@ async function buildHreflangAlternates({
|
|
|
819
857
|
if (allLocaleSlugs?.[defaultLocale]) {
|
|
820
858
|
languages["x-default"] = urlFor(defaultLocale, allLocaleSlugs[defaultLocale]);
|
|
821
859
|
}
|
|
860
|
+
console.log("[WWW] render/metadata:buildHreflangAlternates ->", JSON.stringify(languages));
|
|
822
861
|
return languages;
|
|
823
862
|
}
|
|
824
863
|
|
|
@@ -840,6 +879,7 @@ var queryDocBySlug = cache(async function queryDocBySlug2({
|
|
|
840
879
|
draft = false,
|
|
841
880
|
config
|
|
842
881
|
}) {
|
|
882
|
+
console.log("[WWW] render/metadata:queryDocBySlug collection=", collectionSlug, "slug=", slug, "slugField=", slugField2, "locale=", locale, "draft=", draft);
|
|
843
883
|
const payload = await getPayload({ config });
|
|
844
884
|
const result = await payload.find({
|
|
845
885
|
collection: collectionSlug,
|
|
@@ -850,7 +890,9 @@ var queryDocBySlug = cache(async function queryDocBySlug2({
|
|
|
850
890
|
where: { [slugField2]: { equals: slug } },
|
|
851
891
|
locale
|
|
852
892
|
});
|
|
853
|
-
|
|
893
|
+
const doc = result.docs?.[0] ?? null;
|
|
894
|
+
console.log("[WWW] render/metadata:queryDocBySlug ->", doc ? "hit" : "miss");
|
|
895
|
+
return doc;
|
|
854
896
|
});
|
|
855
897
|
var queryAllDocs = cache(async function queryAllDocs2({
|
|
856
898
|
collectionSlug,
|
|
@@ -858,6 +900,7 @@ var queryAllDocs = cache(async function queryAllDocs2({
|
|
|
858
900
|
locale,
|
|
859
901
|
config
|
|
860
902
|
}) {
|
|
903
|
+
console.log("[WWW] render/metadata:queryAllDocs collection=", collectionSlug, "locale=", locale);
|
|
861
904
|
const payload = await getPayload({ config });
|
|
862
905
|
const result = await payload.find({
|
|
863
906
|
collection: collectionSlug,
|
|
@@ -868,7 +911,9 @@ var queryAllDocs = cache(async function queryAllDocs2({
|
|
|
868
911
|
select: { [slugField2]: true },
|
|
869
912
|
locale
|
|
870
913
|
});
|
|
871
|
-
|
|
914
|
+
const docs = result.docs ?? [];
|
|
915
|
+
console.log("[WWW] render/metadata:queryAllDocs -> count=", docs.length);
|
|
916
|
+
return docs;
|
|
872
917
|
});
|
|
873
918
|
var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
874
919
|
collectionSlug,
|
|
@@ -877,6 +922,7 @@ var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
|
877
922
|
locale,
|
|
878
923
|
config
|
|
879
924
|
}) {
|
|
925
|
+
console.log("[WWW] render/metadata:queryAllLocaleSlugs collection=", collectionSlug, "slug=", slug, "locale=", locale);
|
|
880
926
|
const payload = await getPayload({ config });
|
|
881
927
|
const result = await payload.find({
|
|
882
928
|
collection: collectionSlug,
|
|
@@ -889,8 +935,10 @@ var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
|
889
935
|
select: { [slugField2]: true }
|
|
890
936
|
});
|
|
891
937
|
const doc = result.docs?.[0];
|
|
892
|
-
if (!doc)
|
|
938
|
+
if (!doc) {
|
|
939
|
+
console.log("[WWW] render/metadata:queryAllLocaleSlugs -> undefined (no doc)");
|
|
893
940
|
return;
|
|
941
|
+
}
|
|
894
942
|
let fieldValue = doc[slugField2];
|
|
895
943
|
if (doc.id != null) {
|
|
896
944
|
const allLocales2 = await payload.findByID({
|
|
@@ -905,6 +953,7 @@ var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
|
905
953
|
fieldValue = allLocales2[slugField2];
|
|
906
954
|
}
|
|
907
955
|
if (fieldValue && typeof fieldValue === "object") {
|
|
956
|
+
console.log("[WWW] render/metadata:queryAllLocaleSlugs -> localized map=", JSON.stringify(fieldValue));
|
|
908
957
|
return fieldValue;
|
|
909
958
|
}
|
|
910
959
|
const resolved = await config;
|
|
@@ -912,6 +961,7 @@ var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
|
912
961
|
const out = {};
|
|
913
962
|
for (const l of rawLocales)
|
|
914
963
|
out[l] = String(fieldValue ?? slug);
|
|
964
|
+
console.log("[WWW] render/metadata:queryAllLocaleSlugs -> flat-fanout locales=", rawLocales.length, "slug=", JSON.stringify(fieldValue ?? slug));
|
|
915
965
|
return out;
|
|
916
966
|
});
|
|
917
967
|
var queryGlobal = cache(async function queryGlobal2({
|
|
@@ -921,6 +971,7 @@ var queryGlobal = cache(async function queryGlobal2({
|
|
|
921
971
|
draft = false,
|
|
922
972
|
config
|
|
923
973
|
}) {
|
|
974
|
+
console.log("[WWW] render/metadata:queryGlobal global=", globalSlug, "locale=", locale, "depth=", depth, "draft=", draft);
|
|
924
975
|
const payload = await getPayload({ config });
|
|
925
976
|
try {
|
|
926
977
|
const global = await payload.findGlobal({
|
|
@@ -929,27 +980,35 @@ var queryGlobal = cache(async function queryGlobal2({
|
|
|
929
980
|
draft,
|
|
930
981
|
locale
|
|
931
982
|
});
|
|
983
|
+
console.log("[WWW] render/metadata:queryGlobal -> hit");
|
|
932
984
|
return global;
|
|
933
|
-
} catch {
|
|
985
|
+
} catch (error) {
|
|
986
|
+
console.warn("[WWW] render/metadata:queryGlobal failed for slug=", globalSlug, "err=", String(error));
|
|
934
987
|
return null;
|
|
935
988
|
}
|
|
936
989
|
});
|
|
937
990
|
function getRenderModuleExports(exportName, collection, importMap) {
|
|
938
991
|
const path = collection?.custom?.path;
|
|
939
|
-
if (!path)
|
|
992
|
+
if (!path) {
|
|
993
|
+
console.log("[WWW] render/metadata:getRenderModuleExports no custom.path exportName=", exportName);
|
|
940
994
|
return;
|
|
995
|
+
}
|
|
941
996
|
const mod = getFromImportMap(path, importMap);
|
|
942
|
-
|
|
997
|
+
const value = mod?.[exportName];
|
|
998
|
+
console.log("[WWW] render/metadata:getRenderModuleExports exportName=", exportName, "path=", path, "hit=", Boolean(value));
|
|
999
|
+
return value;
|
|
943
1000
|
}
|
|
944
1001
|
|
|
945
1002
|
// src/render/sitemap/createSitemapFile.ts
|
|
946
1003
|
function createSitemapFile(options) {
|
|
947
1004
|
const { collections } = options;
|
|
948
1005
|
return async function sitemap() {
|
|
1006
|
+
console.log("[WWW] render/sitemap:createSitemapFile:sitemap collections=", JSON.stringify(options.collections), "localePrefix=", options.localePrefix ?? "always");
|
|
949
1007
|
const cfg = await options.config;
|
|
950
1008
|
const allLocales2 = Array.isArray(cfg.localization?.locales) ? cfg.localization.locales.map((l) => typeof l === "string" ? l : l.code) : [cfg.localization?.defaultLocale ?? "en"];
|
|
951
1009
|
const defaultLocale = cfg.localization?.defaultLocale ?? allLocales2[0];
|
|
952
1010
|
const activeLocales = Array.isArray(options.locales) && options.locales.length > 0 ? options.locales.filter((l) => allLocales2.includes(l)) : allLocales2;
|
|
1011
|
+
console.log("[WWW] render/sitemap:createSitemapFile:sitemap allLocales=", JSON.stringify(allLocales2), "default=", defaultLocale, "active=", JSON.stringify(activeLocales));
|
|
953
1012
|
const entries = [];
|
|
954
1013
|
const seen = new Set;
|
|
955
1014
|
for (const collectionSlug of collections) {
|
|
@@ -1005,6 +1064,7 @@ function createSitemapFile(options) {
|
|
|
1005
1064
|
}
|
|
1006
1065
|
}
|
|
1007
1066
|
}
|
|
1067
|
+
console.log("[WWW] render/sitemap:createSitemapFile:sitemap -> entries=", entries.length);
|
|
1008
1068
|
return entries;
|
|
1009
1069
|
};
|
|
1010
1070
|
}
|
|
@@ -1133,13 +1193,17 @@ function generateImportName(type, slug) {
|
|
|
1133
1193
|
import { jsx } from "react/jsx-runtime";
|
|
1134
1194
|
function renderCollectionModule(collection = [], slug, importMap, props) {
|
|
1135
1195
|
const renderPath = collection?.find((c) => c.slug === slug)?.custom?.path;
|
|
1136
|
-
if (!renderPath)
|
|
1196
|
+
if (!renderPath) {
|
|
1197
|
+
console.log("[WWW] render/utils:renderCollectionModule no custom.path slug=", slug);
|
|
1137
1198
|
return null;
|
|
1199
|
+
}
|
|
1138
1200
|
const CollectionRenderModule = getFromImportMap(renderPath, importMap);
|
|
1139
1201
|
if (!CollectionRenderModule) {
|
|
1202
|
+
console.error("[WWW] render/utils:renderCollectionModule not found slug=", slug, "path=", renderPath);
|
|
1140
1203
|
if (false) {}
|
|
1141
1204
|
return null;
|
|
1142
1205
|
}
|
|
1206
|
+
console.log("[WWW] render/utils:renderCollectionModule rendering slug=", slug, "path=", renderPath);
|
|
1143
1207
|
return /* @__PURE__ */ jsx(CollectionRenderModule, {
|
|
1144
1208
|
importMap,
|
|
1145
1209
|
...props
|
|
@@ -1150,13 +1214,17 @@ function renderCollectionModule(collection = [], slug, importMap, props) {
|
|
|
1150
1214
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
1151
1215
|
function renderGlobalModule(globals = [], slug, importMap, props) {
|
|
1152
1216
|
const renderPath = globals?.find((g) => g.slug === slug)?.custom?.path;
|
|
1153
|
-
if (!renderPath)
|
|
1217
|
+
if (!renderPath) {
|
|
1218
|
+
console.log("[WWW] render/utils:renderGlobalModule no custom.path slug=", slug);
|
|
1154
1219
|
return null;
|
|
1220
|
+
}
|
|
1155
1221
|
const GlobalRenderModule = getFromImportMap(renderPath, importMap);
|
|
1156
1222
|
if (!GlobalRenderModule) {
|
|
1223
|
+
console.error("[WWW] render/utils:renderGlobalModule not found slug=", slug, "path=", renderPath);
|
|
1157
1224
|
if (false) {}
|
|
1158
1225
|
return null;
|
|
1159
1226
|
}
|
|
1227
|
+
console.log("[WWW] render/utils:renderGlobalModule rendering slug=", slug, "path=", renderPath);
|
|
1160
1228
|
return /* @__PURE__ */ jsx2(GlobalRenderModule, {
|
|
1161
1229
|
importMap,
|
|
1162
1230
|
...props
|
|
@@ -1165,12 +1233,15 @@ function renderGlobalModule(globals = [], slug, importMap, props) {
|
|
|
1165
1233
|
|
|
1166
1234
|
// src/render/utils/getCachedGlobal.ts
|
|
1167
1235
|
import { unstable_cache } from "next/cache";
|
|
1168
|
-
var getCachedGlobal = (config, slug, depth = 0) =>
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1236
|
+
var getCachedGlobal = (config, slug, depth = 0) => {
|
|
1237
|
+
console.log("[WWW] render/utils:getCachedGlobal slug=", slug, "depth=", depth);
|
|
1238
|
+
return unstable_cache(async () => queryGlobal({
|
|
1239
|
+
globalSlug: slug,
|
|
1240
|
+
locale: "__ALL__",
|
|
1241
|
+
depth,
|
|
1242
|
+
config
|
|
1243
|
+
}), [slug], { tags: [`global_${slug}`] });
|
|
1244
|
+
};
|
|
1174
1245
|
|
|
1175
1246
|
// src/render/metadata/jsonld.ts
|
|
1176
1247
|
function getImageUrl(doc, siteUrl) {
|
|
@@ -1183,6 +1254,11 @@ function getImageUrl(doc, siteUrl) {
|
|
|
1183
1254
|
return img.url.startsWith("http") ? img.url : `${siteUrl}${img.url}`;
|
|
1184
1255
|
return null;
|
|
1185
1256
|
}
|
|
1257
|
+
function getImageUrlWithLog(doc, siteUrl) {
|
|
1258
|
+
const result = getImageUrl(doc, siteUrl);
|
|
1259
|
+
console.log("[WWW] render/metadata:jsonld:getImageUrl ->", result);
|
|
1260
|
+
return result;
|
|
1261
|
+
}
|
|
1186
1262
|
function resolveLocalizedField(value, locale) {
|
|
1187
1263
|
if (value == null)
|
|
1188
1264
|
return "";
|
|
@@ -1204,6 +1280,13 @@ function resolveLocalizedField(value, locale) {
|
|
|
1204
1280
|
}
|
|
1205
1281
|
return Object.values(obj).filter((v) => typeof v === "string" && v.length > 0).join(" / ");
|
|
1206
1282
|
}
|
|
1283
|
+
function resolveLocalizedFieldWithLog(value, locale) {
|
|
1284
|
+
const result = resolveLocalizedField(value, locale);
|
|
1285
|
+
if (value && typeof value === "object") {
|
|
1286
|
+
console.log("[WWW] render/metadata:jsonld:resolveLocalizedField locale=", locale, "->", JSON.stringify(result));
|
|
1287
|
+
}
|
|
1288
|
+
return result;
|
|
1289
|
+
}
|
|
1207
1290
|
function buildArticleLd({
|
|
1208
1291
|
doc,
|
|
1209
1292
|
url,
|
|
@@ -1214,12 +1297,13 @@ function buildArticleLd({
|
|
|
1214
1297
|
publisherLogo
|
|
1215
1298
|
}) {
|
|
1216
1299
|
const name = publisherName ?? new URL(siteUrl).hostname;
|
|
1300
|
+
console.log("[WWW] render/metadata:buildArticleLd url=", url, "locale=", locale, "type=", type, "publisherName=", name);
|
|
1217
1301
|
const ld = {
|
|
1218
1302
|
"@context": "https://schema.org",
|
|
1219
1303
|
"@type": type,
|
|
1220
1304
|
"@id": `${url}#article`,
|
|
1221
|
-
headline:
|
|
1222
|
-
description:
|
|
1305
|
+
headline: resolveLocalizedFieldWithLog(doc.title, locale),
|
|
1306
|
+
description: resolveLocalizedFieldWithLog(doc.meta?.description ?? doc.description ?? doc.excerpt, locale),
|
|
1223
1307
|
inLanguage: locale,
|
|
1224
1308
|
url,
|
|
1225
1309
|
dateModified: doc.updatedAt ? new Date(doc.updatedAt).toISOString() : undefined
|
|
@@ -1227,7 +1311,7 @@ function buildArticleLd({
|
|
|
1227
1311
|
const datePublished = doc.publishedAt ?? doc.createdAt;
|
|
1228
1312
|
if (datePublished)
|
|
1229
1313
|
ld.datePublished = new Date(datePublished).toISOString();
|
|
1230
|
-
const imgUrl =
|
|
1314
|
+
const imgUrl = getImageUrlWithLog(doc, siteUrl);
|
|
1231
1315
|
if (imgUrl)
|
|
1232
1316
|
ld.image = imgUrl;
|
|
1233
1317
|
ld.author = { "@type": "Organization", name, url: siteUrl };
|
|
@@ -1243,6 +1327,7 @@ function buildBreadcrumbsLd({
|
|
|
1243
1327
|
items,
|
|
1244
1328
|
currentUrl
|
|
1245
1329
|
}) {
|
|
1330
|
+
console.log("[WWW] render/metadata:buildBreadcrumbsLd items=", items.length, "currentUrl=", currentUrl);
|
|
1246
1331
|
return {
|
|
1247
1332
|
"@context": "https://schema.org",
|
|
1248
1333
|
"@type": "BreadcrumbList",
|
|
@@ -1260,6 +1345,7 @@ function buildOrganizationLd({
|
|
|
1260
1345
|
logo,
|
|
1261
1346
|
sameAs
|
|
1262
1347
|
}) {
|
|
1348
|
+
console.log("[WWW] render/metadata:buildOrganizationLd siteUrl=", siteUrl, "name=", name, "logo?", Boolean(logo), "sameAs?", Boolean(sameAs));
|
|
1263
1349
|
const org = {
|
|
1264
1350
|
"@context": "https://schema.org",
|
|
1265
1351
|
"@type": "Organization",
|
|
@@ -1275,23 +1361,29 @@ function buildOrganizationLd({
|
|
|
1275
1361
|
// src/render/metadata/slug.ts
|
|
1276
1362
|
var SLUG_NESTED_DIVIDER = "_";
|
|
1277
1363
|
function segmentsToStoredSlug(segments, nested) {
|
|
1278
|
-
if (!Array.isArray(segments))
|
|
1364
|
+
if (!Array.isArray(segments)) {
|
|
1365
|
+
console.log("[WWW] render/metadata:segmentsToStoredSlug string passthrough:", JSON.stringify(segments));
|
|
1279
1366
|
return segments;
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1367
|
+
}
|
|
1368
|
+
const result = nested ? segments.join(SLUG_NESTED_DIVIDER) : segments[0] ?? "";
|
|
1369
|
+
console.log("[WWW] render/metadata:segmentsToStoredSlug nested=", nested, "segments=", JSON.stringify(segments), "->", result);
|
|
1370
|
+
return result;
|
|
1283
1371
|
}
|
|
1284
1372
|
function segmentsToUrlPath(segments, nested) {
|
|
1373
|
+
let result;
|
|
1285
1374
|
if (!Array.isArray(segments))
|
|
1286
|
-
|
|
1287
|
-
if (nested)
|
|
1288
|
-
|
|
1289
|
-
|
|
1375
|
+
result = "/" + segments;
|
|
1376
|
+
else if (nested)
|
|
1377
|
+
result = "/" + segments.join("/");
|
|
1378
|
+
else
|
|
1379
|
+
result = "/" + (segments[0] ?? "");
|
|
1380
|
+
console.log("[WWW] render/metadata:segmentsToUrlPath nested=", nested, "segments=", JSON.stringify(segments), "->", result);
|
|
1381
|
+
return result;
|
|
1290
1382
|
}
|
|
1291
1383
|
function storedSlugToSegments(storedSlug, nested) {
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
return
|
|
1384
|
+
const result = nested ? storedSlug.split(SLUG_NESTED_DIVIDER) : storedSlug;
|
|
1385
|
+
console.log("[WWW] render/metadata:storedSlugToSegments nested=", nested, "storedSlug=", storedSlug, "->", JSON.stringify(result));
|
|
1386
|
+
return result;
|
|
1295
1387
|
}
|
|
1296
1388
|
function buildCanonicalUrl({
|
|
1297
1389
|
siteUrl,
|
|
@@ -1301,7 +1393,9 @@ function buildCanonicalUrl({
|
|
|
1301
1393
|
}) {
|
|
1302
1394
|
const trimmedPrefix = urlPrefix.replace(/^\/|\/$/g, "");
|
|
1303
1395
|
const prefixSegment = trimmedPrefix ? `/${trimmedPrefix}` : "";
|
|
1304
|
-
|
|
1396
|
+
const result = `${siteUrl}/${locale}${prefixSegment}${urlPath}`;
|
|
1397
|
+
console.log("[WWW] render/metadata:buildCanonicalUrl siteUrl=", siteUrl, "locale=", locale, "urlPrefix=", urlPrefix, "urlPath=", urlPath, "->", result);
|
|
1398
|
+
return result;
|
|
1305
1399
|
}
|
|
1306
1400
|
function getUrlPath(segments, nested, homeSlug) {
|
|
1307
1401
|
const urlPath = segmentsToUrlPath(segments, nested);
|
|
@@ -1326,8 +1420,11 @@ var RenderBlocks = ({
|
|
|
1326
1420
|
locale,
|
|
1327
1421
|
searchParams
|
|
1328
1422
|
}) => {
|
|
1329
|
-
if (!blocks || !Array.isArray(blocks) || blocks.length === 0)
|
|
1423
|
+
if (!blocks || !Array.isArray(blocks) || blocks.length === 0) {
|
|
1424
|
+
console.log("[WWW] render/blocks:RenderBlocks no blocks (locale=", locale, ")");
|
|
1330
1425
|
return null;
|
|
1426
|
+
}
|
|
1427
|
+
console.log("[WWW] render/blocks:RenderBlocks rendering count=", blocks.length, "locale=", locale);
|
|
1331
1428
|
const rendered = [];
|
|
1332
1429
|
for (let i = 0;i < blocks.length; i++) {
|
|
1333
1430
|
const block = blocks[i];
|
|
@@ -1335,9 +1432,10 @@ var RenderBlocks = ({
|
|
|
1335
1432
|
const importMapPath = config.admin?.dependencies?.[blockType]?.path ?? generateImportName("block", blockType);
|
|
1336
1433
|
const Block = getFromImportMap(importMapPath, importMap);
|
|
1337
1434
|
if (!Block) {
|
|
1338
|
-
console.warn(`
|
|
1435
|
+
console.warn(`[WWW] render/blocks:RenderBlocks no block for type=${blockType} importMapPath=${importMapPath} (locale=${locale})`);
|
|
1339
1436
|
continue;
|
|
1340
1437
|
}
|
|
1438
|
+
console.log("[WWW] render/blocks:RenderBlocks [", i, "] blockType=", blockType, "importMapPath=", importMapPath);
|
|
1341
1439
|
rendered.push(/* @__PURE__ */ jsx3(Block, {
|
|
1342
1440
|
index: i,
|
|
1343
1441
|
...blockProps,
|
|
@@ -1650,9 +1748,12 @@ import { RichText } from "@payloadcms/richtext-lexical/react";
|
|
|
1650
1748
|
// src/render/pages/PagesPage.tsx
|
|
1651
1749
|
import { jsx as jsx4, Fragment as Fragment2 } from "react/jsx-runtime";
|
|
1652
1750
|
async function PagesPage({ doc, ...props }) {
|
|
1653
|
-
if (!doc)
|
|
1751
|
+
if (!doc) {
|
|
1752
|
+
console.log("[WWW] render/pages:PagesPage no doc");
|
|
1654
1753
|
return /* @__PURE__ */ jsx4(Fragment2, {});
|
|
1754
|
+
}
|
|
1655
1755
|
const blocks = doc.blocks ?? [];
|
|
1756
|
+
console.log("[WWW] render/pages:PagesPage blocks=", blocks.length, "locale=", props.locale);
|
|
1656
1757
|
return /* @__PURE__ */ jsx4(Fragment2, {
|
|
1657
1758
|
children: /* @__PURE__ */ jsx4(RenderBlocks, {
|
|
1658
1759
|
blocks,
|
|
@@ -1690,11 +1791,15 @@ function createCollectionPageExports({
|
|
|
1690
1791
|
const localePrefixMode = typeof routing.localePrefix === "string" ? routing.localePrefix : routing.localePrefix?.mode ?? "always";
|
|
1691
1792
|
const buildLocalePath = (locale, storedSlug) => {
|
|
1692
1793
|
const urlPath = getUrlPath(storedSlugToSegments(storedSlug, nested), nested, HOME_SLUG);
|
|
1794
|
+
let result;
|
|
1693
1795
|
if (localePrefixMode === "never")
|
|
1694
|
-
|
|
1695
|
-
if (localePrefixMode === "as-needed" && locale === defaultLocale)
|
|
1696
|
-
|
|
1697
|
-
|
|
1796
|
+
result = urlPath;
|
|
1797
|
+
else if (localePrefixMode === "as-needed" && locale === defaultLocale)
|
|
1798
|
+
result = urlPath;
|
|
1799
|
+
else
|
|
1800
|
+
result = `/${locale}${urlPath}`;
|
|
1801
|
+
console.log("[WWW] render/pages:createCollectionPageExports:buildLocalePath locale=", locale, "storedSlug=", storedSlug, "->", result);
|
|
1802
|
+
return result;
|
|
1698
1803
|
};
|
|
1699
1804
|
async function fetchDoc(locale, storedSlug, draft = false) {
|
|
1700
1805
|
return queryDocBySlug({
|
|
@@ -1725,14 +1830,16 @@ function createCollectionPageExports({
|
|
|
1725
1830
|
for (const [key, url] of Object.entries(languages)) {
|
|
1726
1831
|
alternates[key] = url;
|
|
1727
1832
|
}
|
|
1833
|
+
console.log("[WWW] render/pages:createCollectionPageExports:resolveHreflangAlternates canonical=", canonical, "alts=", JSON.stringify(alternates));
|
|
1728
1834
|
return { alternates, canonical };
|
|
1729
1835
|
}
|
|
1730
1836
|
const default_ = async (props) => {
|
|
1731
1837
|
const { slug: rawSlugSegments, locale: incomingLocale } = await props.params ?? {};
|
|
1732
1838
|
const slugSegments = Array.isArray(rawSlugSegments) ? rawSlugSegments : [];
|
|
1733
1839
|
const locale = typeof incomingLocale === "string" ? incomingLocale : defaultLocale;
|
|
1840
|
+
console.log("[WWW] render/pages:createCollectionPageExports:default_ collectionSlug=", slug, "locale=", locale, "segments=", JSON.stringify(slugSegments), "showcase=", showcaseEnabled);
|
|
1734
1841
|
if (!locales.includes(locale)) {
|
|
1735
|
-
console.error(`[WWW
|
|
1842
|
+
console.error(`[WWW] render/pages:createCollectionPageExports:default_ notFound invalid-locale collection=${slug} locale=${locale} segments=${JSON.stringify(slugSegments)}`);
|
|
1736
1843
|
const { notFound } = await import("next/navigation");
|
|
1737
1844
|
notFound();
|
|
1738
1845
|
}
|
|
@@ -1740,16 +1847,18 @@ function createCollectionPageExports({
|
|
|
1740
1847
|
setRequestLocale(locale);
|
|
1741
1848
|
const { draftMode } = await import("next/headers");
|
|
1742
1849
|
const { isEnabled: draft } = await draftMode();
|
|
1850
|
+
console.log("[WWW] render/pages:createCollectionPageExports:default_ draftMode=", draft);
|
|
1743
1851
|
const storedSlug = segmentsToStoredSlug(slugSegments, nested);
|
|
1744
1852
|
const doc = await fetchDoc(locale, storedSlug, draft);
|
|
1745
1853
|
if (!doc) {
|
|
1746
|
-
console.error(`[WWW
|
|
1854
|
+
console.error(`[WWW] render/pages:createCollectionPageExports:default_ notFound no-doc collection=${slug} locale=${locale} storedSlug="${storedSlug}" segments=${JSON.stringify(slugSegments)} draft=${draft}`);
|
|
1747
1855
|
const { notFound } = await import("next/navigation");
|
|
1748
1856
|
notFound();
|
|
1749
1857
|
}
|
|
1750
1858
|
const cfg = await configPromise;
|
|
1751
1859
|
const collectionCustomPath = cfg.collections.find((c) => c.slug === slug)?.custom?.path;
|
|
1752
1860
|
const effectivePath = renderPath ?? collectionCustomPath ?? defaultRenderPath;
|
|
1861
|
+
console.log("[WWW] render/pages:createCollectionPageExports:default_ effectivePath=", effectivePath);
|
|
1753
1862
|
const render = effectivePath === PAGES_RENDER_PATH ? /* @__PURE__ */ jsx7(PagesPage, {
|
|
1754
1863
|
doc,
|
|
1755
1864
|
importMap,
|
|
@@ -1811,15 +1920,22 @@ function createCollectionPageExports({
|
|
|
1811
1920
|
const { slug: rawSlugSegments, locale: incomingLocale } = await props.params ?? {};
|
|
1812
1921
|
const slugSegments = Array.isArray(rawSlugSegments) ? rawSlugSegments : [];
|
|
1813
1922
|
const locale = typeof incomingLocale === "string" ? incomingLocale : defaultLocale;
|
|
1814
|
-
|
|
1923
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateMetadata collectionSlug=", slug, "locale=", locale, "segments=", JSON.stringify(slugSegments));
|
|
1924
|
+
if (!locales.includes(locale)) {
|
|
1925
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateMetadata invalid locale -> not found meta");
|
|
1815
1926
|
return { title: "Not found", robots: { index: false, follow: false } };
|
|
1927
|
+
}
|
|
1816
1928
|
const storedSlug = segmentsToStoredSlug(slugSegments, nested);
|
|
1817
1929
|
const doc = await fetchDoc(locale, storedSlug);
|
|
1818
|
-
if (!doc)
|
|
1930
|
+
if (!doc) {
|
|
1931
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateMetadata no doc -> not found meta");
|
|
1819
1932
|
return { title: "Not found", robots: { index: false, follow: false } };
|
|
1933
|
+
}
|
|
1820
1934
|
const collection = cfg.collections.find((c) => c.slug === slug);
|
|
1821
|
-
if (!collection)
|
|
1935
|
+
if (!collection) {
|
|
1936
|
+
console.warn("[WWW] render/pages:createCollectionPageExports:generateMetadata collection not in config slug=", slug);
|
|
1822
1937
|
return {};
|
|
1938
|
+
}
|
|
1823
1939
|
const { canonical, alternates } = await resolveHreflangAlternates(locale, storedSlug);
|
|
1824
1940
|
const meta = await generateMeta({
|
|
1825
1941
|
doc,
|
|
@@ -1841,6 +1957,7 @@ function createCollectionPageExports({
|
|
|
1841
1957
|
const urlPath = buildLocalePath(locale, storedSlug);
|
|
1842
1958
|
const canonical = `${siteUrl}${urlPath}`;
|
|
1843
1959
|
const entries = Array.isArray(jsonLdOption) ? jsonLdOption : metadataType === "article" ? [{ type: "article" }] : [{ type: "website" }];
|
|
1960
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateJsonLd collection=", slug, "locale=", locale, "entries=", entries.map((e) => e.type).join(","));
|
|
1844
1961
|
const outputs = [];
|
|
1845
1962
|
for (const entry of entries) {
|
|
1846
1963
|
const id = entry.id ?? `jsonld-${entry.type}-${outputs.length}`;
|
|
@@ -1901,6 +2018,7 @@ function createCollectionPageExports({
|
|
|
1901
2018
|
return outputs;
|
|
1902
2019
|
}
|
|
1903
2020
|
async function generateStaticParams() {
|
|
2021
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateStaticParams collection=", slug, "locales=", JSON.stringify(locales));
|
|
1904
2022
|
const params = [];
|
|
1905
2023
|
for (const locale of locales) {
|
|
1906
2024
|
const docs = await queryAllDocs({ collectionSlug: slug, slugField: "slug", locale, config: configPromise });
|
|
@@ -1912,9 +2030,11 @@ function createCollectionPageExports({
|
|
|
1912
2030
|
params.push({ slug: Array.isArray(segments) ? segments : [segments], locale });
|
|
1913
2031
|
}
|
|
1914
2032
|
}
|
|
2033
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateStaticParams -> count=", params.length);
|
|
1915
2034
|
return params;
|
|
1916
2035
|
}
|
|
1917
2036
|
async function generateSitemap() {
|
|
2037
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateSitemap collection=", slug, "locales=", JSON.stringify(locales));
|
|
1918
2038
|
const docs = await queryAllDocs({
|
|
1919
2039
|
collectionSlug: slug,
|
|
1920
2040
|
slugField: "slug",
|
|
@@ -1934,6 +2054,7 @@ function createCollectionPageExports({
|
|
|
1934
2054
|
urls.push({ url: `${siteUrl}${urlPath}`, lastModified: lastmod, changeFrequency: changefreq, priority });
|
|
1935
2055
|
}
|
|
1936
2056
|
}
|
|
2057
|
+
console.log("[WWW] render/pages:createCollectionPageExports:generateSitemap -> urls=", urls.length);
|
|
1937
2058
|
return urls;
|
|
1938
2059
|
}
|
|
1939
2060
|
return {
|
|
@@ -1995,6 +2116,7 @@ function createStaticPageExports({
|
|
|
1995
2116
|
const default_ = async () => {
|
|
1996
2117
|
const { getLocale } = await import("next-intl/server");
|
|
1997
2118
|
const locale = await getLocale();
|
|
2119
|
+
console.log("[WWW] render/pages:createStaticPageExports:default_ kind=", kind, "locale=", locale);
|
|
1998
2120
|
dbgRenderCount++;
|
|
1999
2121
|
{
|
|
2000
2122
|
let reqUrl = "?";
|
|
@@ -2027,6 +2149,7 @@ function createStaticPageExports({
|
|
|
2027
2149
|
});
|
|
2028
2150
|
}
|
|
2029
2151
|
const cfg = await configPromise;
|
|
2152
|
+
console.log("[WWW] render/pages:createStaticPageExports:default_ -> rendering via PagesPage kind=", kind, "locale=", locale);
|
|
2030
2153
|
return /* @__PURE__ */ jsx8(PagesPage, {
|
|
2031
2154
|
doc,
|
|
2032
2155
|
locale,
|