@justanarthur/payload-www 0.1.2 → 0.3.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/README.md +2 -1
- package/dist/collections.d.ts +31 -2
- package/dist/collections.js +28 -38
- package/dist/config.d.ts +8 -0
- package/dist/config.js +55 -50
- package/dist/core-fields.d.ts +38 -1
- package/dist/core-fields.js +35 -2
- package/dist/data-collections.d.ts +31 -2
- package/dist/data-collections.js +28 -38
- package/dist/data-test.js +55 -50
- package/dist/fields.d.ts +38 -1
- package/dist/fields.js +35 -2
- package/dist/globals.d.ts +23 -2
- package/dist/globals.js +21 -7
- package/dist/metadata.js +13 -1
- package/dist/pages.d.ts +14 -1
- package/dist/pages.js +21 -9
- package/dist/render-metadata.js +13 -1
- package/dist/render-pages.d.ts +14 -1
- package/dist/render-pages.js +21 -9
- package/dist/render-utils.d.ts +8 -0
- package/dist/render-utils.js +17 -3
- package/dist/server.d.ts +65 -7
- package/dist/server.js +68 -63
- package/dist/test.js +55 -50
- package/dist/with-www-config.d.ts +8 -0
- package/dist/with-www-config.js +55 -50
- package/package.json +1 -1
package/dist/with-www-config.js
CHANGED
|
@@ -23,7 +23,6 @@ var authenticatedOrPublished = ({ req: { user } }) => {
|
|
|
23
23
|
return true;
|
|
24
24
|
return { _status: { equals: "published" } };
|
|
25
25
|
};
|
|
26
|
-
|
|
27
26
|
// src/render/_locale.ts
|
|
28
27
|
function prefixFor(locale, defaultLocale, mode) {
|
|
29
28
|
if (mode === "never")
|
|
@@ -195,24 +194,9 @@ var createPagesCollection = (blocks, options = {}) => {
|
|
|
195
194
|
renderPath = PAGES_RENDER_PATH,
|
|
196
195
|
slug: collectionSlug = PAGES_SLUG2,
|
|
197
196
|
localePrefix,
|
|
198
|
-
defaultLocale
|
|
197
|
+
defaultLocale,
|
|
198
|
+
nested = false
|
|
199
199
|
} = options;
|
|
200
|
-
const slugField = {
|
|
201
|
-
name: "slug",
|
|
202
|
-
type: "text",
|
|
203
|
-
required: true,
|
|
204
|
-
unique: true,
|
|
205
|
-
index: true,
|
|
206
|
-
admin: { position: "sidebar" },
|
|
207
|
-
validate: (value) => {
|
|
208
|
-
if (typeof value !== "string")
|
|
209
|
-
return "Slug must be a string";
|
|
210
|
-
if (value !== "" && !/^[a-z0-9-]+$/.test(value)) {
|
|
211
|
-
return "Slug must be lowercase, with hyphens (no spaces or special characters)";
|
|
212
|
-
}
|
|
213
|
-
return true;
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
200
|
const baseFields = [
|
|
217
201
|
{
|
|
218
202
|
name: "title",
|
|
@@ -242,7 +226,7 @@ var createPagesCollection = (blocks, options = {}) => {
|
|
|
242
226
|
type: "date",
|
|
243
227
|
admin: { position: "sidebar" }
|
|
244
228
|
},
|
|
245
|
-
slugField
|
|
229
|
+
slugField({ nested })
|
|
246
230
|
];
|
|
247
231
|
const { afterChange: revalidateAfterChange, afterDelete: revalidateAfterDelete } = createRevalidateCollectionHook({
|
|
248
232
|
collectionSlug,
|
|
@@ -277,14 +261,6 @@ var createPostsCollection = (options = {}) => {
|
|
|
277
261
|
localePrefix,
|
|
278
262
|
defaultLocale
|
|
279
263
|
} = options;
|
|
280
|
-
const slugField = {
|
|
281
|
-
name: "slug",
|
|
282
|
-
type: "text",
|
|
283
|
-
required: true,
|
|
284
|
-
unique: true,
|
|
285
|
-
index: true,
|
|
286
|
-
admin: { position: "sidebar" }
|
|
287
|
-
};
|
|
288
264
|
const baseFields = [
|
|
289
265
|
{
|
|
290
266
|
name: "title",
|
|
@@ -309,7 +285,7 @@ var createPostsCollection = (options = {}) => {
|
|
|
309
285
|
type: "date",
|
|
310
286
|
admin: { position: "sidebar" }
|
|
311
287
|
},
|
|
312
|
-
slugField
|
|
288
|
+
slugField()
|
|
313
289
|
];
|
|
314
290
|
const { afterChange, afterDelete } = createRevalidateCollectionHook({
|
|
315
291
|
collectionSlug,
|
|
@@ -410,17 +386,18 @@ var createStaticPagesCollection = (blocks) => {
|
|
|
410
386
|
};
|
|
411
387
|
|
|
412
388
|
// src/core/fields/link.ts
|
|
413
|
-
var
|
|
389
|
+
var appearanceOptions2 = {
|
|
414
390
|
default: { label: "Default", value: "default" },
|
|
415
391
|
outline: { label: "Outline", value: "outline" }
|
|
416
392
|
};
|
|
417
|
-
var
|
|
393
|
+
var link2 = (options = {}) => {
|
|
418
394
|
const {
|
|
419
395
|
appearances,
|
|
420
396
|
disableLabel = false,
|
|
421
397
|
relationTo = [PAGES_SLUG],
|
|
422
398
|
localized = false,
|
|
423
|
-
overrides = {}
|
|
399
|
+
overrides = {},
|
|
400
|
+
extraFields = []
|
|
424
401
|
} = options;
|
|
425
402
|
const result = {
|
|
426
403
|
name: "link",
|
|
@@ -488,7 +465,7 @@ var link = (options = {}) => {
|
|
|
488
465
|
result.fields = [...result.fields, ...linkTypes];
|
|
489
466
|
}
|
|
490
467
|
if (appearances !== false) {
|
|
491
|
-
const opts = appearances ? appearances.map((a) =>
|
|
468
|
+
const opts = appearances ? appearances.map((a) => appearanceOptions2[a]) : [appearanceOptions2.default, appearanceOptions2.outline];
|
|
492
469
|
result.fields.push({
|
|
493
470
|
name: "appearance",
|
|
494
471
|
type: "select",
|
|
@@ -497,6 +474,9 @@ var link = (options = {}) => {
|
|
|
497
474
|
options: opts
|
|
498
475
|
});
|
|
499
476
|
}
|
|
477
|
+
if (extraFields.length) {
|
|
478
|
+
result.fields.push(...extraFields);
|
|
479
|
+
}
|
|
500
480
|
return { ...result, ...overrides };
|
|
501
481
|
};
|
|
502
482
|
|
|
@@ -516,17 +496,22 @@ function createRevalidateGlobalHook(slug) {
|
|
|
516
496
|
|
|
517
497
|
// src/data/collections/globals/Header/config.ts
|
|
518
498
|
var createHeaderGlobal = (options = {}) => {
|
|
519
|
-
const {
|
|
499
|
+
const {
|
|
500
|
+
renderPath = HEADER_RENDER_PATH,
|
|
501
|
+
linkRelationTo = [PAGES_SLUG],
|
|
502
|
+
navColumnLinkFields = [],
|
|
503
|
+
navItemLinkFields = []
|
|
504
|
+
} = options;
|
|
520
505
|
const navColumnBlock = {
|
|
521
506
|
slug: "navColumn",
|
|
522
507
|
fields: [
|
|
523
508
|
{ name: "title", type: "text", required: true, localized: true },
|
|
524
|
-
{ name: "links", type: "array", fields: [
|
|
509
|
+
{ name: "links", type: "array", fields: [link2({ appearances: false, localized: true, relationTo: linkRelationTo, extraFields: navColumnLinkFields })] }
|
|
525
510
|
]
|
|
526
511
|
};
|
|
527
512
|
const navItemBlock = {
|
|
528
513
|
slug: "navItem",
|
|
529
|
-
fields: [
|
|
514
|
+
fields: [link2({ appearances: false, localized: true, relationTo: linkRelationTo, extraFields: navItemLinkFields })]
|
|
530
515
|
};
|
|
531
516
|
return {
|
|
532
517
|
slug: "header",
|
|
@@ -548,17 +533,22 @@ var createHeaderGlobal = (options = {}) => {
|
|
|
548
533
|
|
|
549
534
|
// src/data/collections/globals/Footer/config.ts
|
|
550
535
|
var createFooterGlobal = (options = {}) => {
|
|
551
|
-
const {
|
|
536
|
+
const {
|
|
537
|
+
renderPath = FOOTER_RENDER_PATH,
|
|
538
|
+
linkRelationTo = [PAGES_SLUG],
|
|
539
|
+
navColumnLinkFields = [],
|
|
540
|
+
navItemLinkFields = []
|
|
541
|
+
} = options;
|
|
552
542
|
const navColumnBlock = {
|
|
553
543
|
slug: "navColumn",
|
|
554
544
|
fields: [
|
|
555
545
|
{ name: "title", type: "text", required: true, localized: true },
|
|
556
|
-
{ name: "links", type: "array", fields: [
|
|
546
|
+
{ name: "links", type: "array", fields: [link2({ appearances: false, localized: true, relationTo: linkRelationTo, extraFields: navColumnLinkFields })] }
|
|
557
547
|
]
|
|
558
548
|
};
|
|
559
549
|
const navItemBlock = {
|
|
560
550
|
slug: "navItem",
|
|
561
|
-
fields: [
|
|
551
|
+
fields: [link2({ appearances: false, localized: true, relationTo: linkRelationTo, extraFields: navItemLinkFields })]
|
|
562
552
|
};
|
|
563
553
|
return {
|
|
564
554
|
slug: "footer",
|
|
@@ -647,7 +637,7 @@ function getFromImportMap(key, importMap) {
|
|
|
647
637
|
var queryDocBySlug = cache(async function queryDocBySlug2({
|
|
648
638
|
collectionSlug,
|
|
649
639
|
slug,
|
|
650
|
-
slugField = "slug",
|
|
640
|
+
slugField: slugField2 = "slug",
|
|
651
641
|
locale,
|
|
652
642
|
draft = false,
|
|
653
643
|
config
|
|
@@ -659,14 +649,14 @@ var queryDocBySlug = cache(async function queryDocBySlug2({
|
|
|
659
649
|
limit: 1,
|
|
660
650
|
pagination: false,
|
|
661
651
|
overrideAccess: draft,
|
|
662
|
-
where: { [
|
|
652
|
+
where: { [slugField2]: { equals: slug } },
|
|
663
653
|
locale
|
|
664
654
|
});
|
|
665
655
|
return result.docs?.[0] ?? null;
|
|
666
656
|
});
|
|
667
657
|
var queryAllDocs = cache(async function queryAllDocs2({
|
|
668
658
|
collectionSlug,
|
|
669
|
-
slugField = "slug",
|
|
659
|
+
slugField: slugField2 = "slug",
|
|
670
660
|
locale,
|
|
671
661
|
config
|
|
672
662
|
}) {
|
|
@@ -677,7 +667,7 @@ var queryAllDocs = cache(async function queryAllDocs2({
|
|
|
677
667
|
limit: 1000,
|
|
678
668
|
pagination: false,
|
|
679
669
|
overrideAccess: false,
|
|
680
|
-
select: { [
|
|
670
|
+
select: { [slugField2]: true },
|
|
681
671
|
locale
|
|
682
672
|
});
|
|
683
673
|
return result.docs ?? [];
|
|
@@ -685,7 +675,7 @@ var queryAllDocs = cache(async function queryAllDocs2({
|
|
|
685
675
|
var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
686
676
|
collectionSlug,
|
|
687
677
|
slug,
|
|
688
|
-
slugField = "slug",
|
|
678
|
+
slugField: slugField2 = "slug",
|
|
689
679
|
locale,
|
|
690
680
|
config
|
|
691
681
|
}) {
|
|
@@ -697,13 +687,25 @@ var queryAllLocaleSlugs = cache(async function queryAllLocaleSlugs2({
|
|
|
697
687
|
pagination: false,
|
|
698
688
|
overrideAccess: false,
|
|
699
689
|
locale,
|
|
700
|
-
where: { [
|
|
701
|
-
select: { [
|
|
690
|
+
where: { [slugField2]: { equals: slug } },
|
|
691
|
+
select: { [slugField2]: true }
|
|
702
692
|
});
|
|
703
693
|
const doc = result.docs?.[0];
|
|
704
694
|
if (!doc)
|
|
705
695
|
return;
|
|
706
|
-
|
|
696
|
+
let fieldValue = doc[slugField2];
|
|
697
|
+
if (doc.id != null) {
|
|
698
|
+
const allLocales2 = await payload.findByID({
|
|
699
|
+
collection: collectionSlug,
|
|
700
|
+
id: doc.id,
|
|
701
|
+
locale: "all",
|
|
702
|
+
draft: false,
|
|
703
|
+
overrideAccess: false,
|
|
704
|
+
select: { [slugField2]: true }
|
|
705
|
+
}).catch(() => null);
|
|
706
|
+
if (allLocales2)
|
|
707
|
+
fieldValue = allLocales2[slugField2];
|
|
708
|
+
}
|
|
707
709
|
if (fieldValue && typeof fieldValue === "object") {
|
|
708
710
|
return fieldValue;
|
|
709
711
|
}
|
|
@@ -756,6 +758,7 @@ function createSitemapFile(options) {
|
|
|
756
758
|
const collectionDefaults = options.perCollection?.[collectionSlug] ?? {};
|
|
757
759
|
const urlPrefix = (options.urlPrefixes?.[collectionSlug] ?? "").replace(/\/$/, "");
|
|
758
760
|
const siteUrl = options.getServerSideURL().replace(/\/$/, "");
|
|
761
|
+
const isNested = options.nested?.[collectionSlug] ?? false;
|
|
759
762
|
for (const locale of activeLocales) {
|
|
760
763
|
const docs = await queryAllDocs({
|
|
761
764
|
collectionSlug,
|
|
@@ -771,13 +774,14 @@ function createSitemapFile(options) {
|
|
|
771
774
|
if (seen.has(dedupeKey))
|
|
772
775
|
continue;
|
|
773
776
|
seen.add(dedupeKey);
|
|
774
|
-
const
|
|
777
|
+
const slugPath = isNested ? storedSlug.replaceAll("_", "/") : storedSlug;
|
|
778
|
+
const url = `${siteUrl}${prefixFor(locale, defaultLocale, options.localePrefix ?? "always")}${urlPrefix}/${slugPath}`;
|
|
775
779
|
const languages = await buildHreflangAlternates({
|
|
776
780
|
siteUrl,
|
|
777
781
|
locale,
|
|
778
782
|
urlPrefix,
|
|
779
783
|
storedSlug,
|
|
780
|
-
nested:
|
|
784
|
+
nested: isNested,
|
|
781
785
|
homeSlug: "",
|
|
782
786
|
defaultLocale,
|
|
783
787
|
locales: activeLocales,
|
|
@@ -808,7 +812,7 @@ function createSitemapFile(options) {
|
|
|
808
812
|
}
|
|
809
813
|
// src/config/createWWWConfig.ts
|
|
810
814
|
function createWWWConfig(options) {
|
|
811
|
-
const { locales, routing, blocks, linkRelationTo, registerPosts = true, defaultPlugins } = options;
|
|
815
|
+
const { locales, routing, blocks, linkRelationTo, registerPosts = true, nested = false, defaultPlugins } = options;
|
|
812
816
|
const defaultLocale = routing?.defaultLocale ?? locales[0] ?? "";
|
|
813
817
|
const localePrefixMode = (() => {
|
|
814
818
|
const raw = routing?.localePrefix;
|
|
@@ -821,7 +825,8 @@ function createWWWConfig(options) {
|
|
|
821
825
|
}
|
|
822
826
|
const buildPagesCollection = () => createPagesCollection(blocks, {
|
|
823
827
|
localePrefix: localePrefixMode,
|
|
824
|
-
defaultLocale
|
|
828
|
+
defaultLocale,
|
|
829
|
+
nested
|
|
825
830
|
});
|
|
826
831
|
const buildPostsCollection = () => createPostsCollection({
|
|
827
832
|
localePrefix: localePrefixMode,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justanarthur/payload-www",
|
|
3
3
|
"description": "Reusable Payload CMS website template — config builder, collections, globals, blocks, fields, access, hooks, metadata (JSON-LD, hreflang), page renderers, and test helpers.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
7
7
|
"module": "./dist/index.js",
|