Skip to content
This repository was archived by the owner on Sep 9, 2024. It is now read-only.

Commit dd80bfa

Browse files
authored
fix: only add public folder if path matches media folder (#991)
1 parent dfb0887 commit dd80bfa

File tree

4 files changed

+99
-30
lines changed

4 files changed

+99
-30
lines changed

packages/core/dev-test/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ backend:
22
name: test-repo
33
site_url: 'https://example.com'
44
media_folder: assets/uploads
5+
public_folder: /assets/uploads
56
media_library:
67
folder_support: true
78
locale: en

packages/core/src/lib/formatters.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,9 @@ export function folderFormatter<EF extends BaseField>(
172172
'folder' in collection ? collection.folder : '',
173173
);
174174

175-
const slug = slugFormatter(collection, entry.data, slugConfig);
176-
177175
const date = parseDateFromEntry(entry, selectInferredField(collection, 'date')) || null;
178176

179177
const processSegment = getProcessSegment(slugConfig, [defaultFolder, fields?.dirname as string]);
180178

181-
const mediaFolder = compileStringTemplate(folderTemplate, date, slug, fields, processSegment);
182-
183-
return mediaFolder;
179+
return compileStringTemplate(folderTemplate, date, entry.slug, fields, processSegment);
184180
}

packages/core/src/lib/util/__tests__/media.util.spec.ts

Lines changed: 78 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,50 @@ describe('media.util', () => {
2626
},
2727
});
2828

29+
it('does not transform path if it does not start with media_folder', () => {
30+
const mockConfig = createMockConfig({
31+
collections: [
32+
createMockCollection<UnknownField>({
33+
folder: 'base/folder',
34+
slug: '{{fields.title}}-{{fields.name}}',
35+
fields: [
36+
{
37+
name: 'title',
38+
widget: 'string',
39+
},
40+
{
41+
name: 'name',
42+
widget: 'string',
43+
},
44+
mockBaseImageField,
45+
],
46+
}),
47+
],
48+
media_folder: '/path/to/media/folder/{{slug}}',
49+
public_folder: '/path/to/public/folder/{{slug}}',
50+
});
51+
52+
const mockCollection = mockConfig.collections[0];
53+
const mockImageField = (mockConfig.collections[0] as FolderCollection)
54+
.fields[3] as FileOrImageField;
55+
56+
const mockEntry = createMockEntry({
57+
path: 'path/to/entry/index.md',
58+
slug: 'i-am-a-title-fish',
59+
data: { title: 'i am a title', name: 'fish' },
60+
});
61+
62+
expect(
63+
selectMediaFilePublicPath(
64+
mockConfig,
65+
mockCollection,
66+
'/some/other/path/image.png',
67+
mockEntry,
68+
mockImageField,
69+
),
70+
).toBe('/some/other/path/image.png');
71+
});
72+
2973
describe('top level', () => {
3074
it('should default to top level config media_folder', () => {
3175
const mockConfig = createMockConfig({
@@ -138,6 +182,7 @@ describe('media.util', () => {
138182

139183
const mockEntry = createMockEntry({
140184
path: 'path/to/entry/index.md',
185+
slug: 'i-am-a-title-fish',
141186
data: { title: 'i am a title', name: 'fish' },
142187
});
143188

@@ -174,6 +219,7 @@ describe('media.util', () => {
174219

175220
const mockEntry = createMockEntry({
176221
path: 'path/to/entry/index.md',
222+
slug: 'i-am-a-title-fish',
177223
data: { title: 'i am a title', name: 'fish' },
178224
});
179225

@@ -211,6 +257,7 @@ describe('media.util', () => {
211257

212258
const mockEntry = createMockEntry({
213259
path: 'path/to/entry/index.md',
260+
slug: '',
214261
data: {},
215262
newRecord: true,
216263
});
@@ -305,6 +352,7 @@ describe('media.util', () => {
305352

306353
const mockEntry = createMockEntry({
307354
path: 'path/to/entry/index.md',
355+
slug: 'i-am-a-title-fish',
308356
data: { title: 'i am a title', name: 'fish' },
309357
});
310358

@@ -341,6 +389,7 @@ describe('media.util', () => {
341389

342390
const mockEntry = createMockEntry({
343391
path: 'path/to/entry/index.md',
392+
slug: 'i-am-a-title-fish',
344393
data: { title: 'i am a title', name: 'fish' },
345394
});
346395

@@ -378,6 +427,7 @@ describe('media.util', () => {
378427

379428
const mockEntry = createMockEntry({
380429
path: 'path/to/entry/index.md',
430+
slug: '',
381431
data: {},
382432
newRecord: true,
383433
});
@@ -420,7 +470,7 @@ describe('media.util', () => {
420470
selectMediaFilePublicPath(
421471
mockConfig,
422472
undefined,
423-
'image.png',
473+
'path/to/media/folder/image.png',
424474
undefined,
425475
undefined,
426476
undefined,
@@ -438,7 +488,7 @@ describe('media.util', () => {
438488
selectMediaFilePublicPath(
439489
mockConfig,
440490
undefined,
441-
'image.png',
491+
'path/to/media/folder/image.png',
442492
undefined,
443493
undefined,
444494
undefined,
@@ -463,7 +513,7 @@ describe('media.util', () => {
463513
selectMediaFilePublicPath(
464514
mockConfig,
465515
mockCollection,
466-
'image.png',
516+
'path/to/media/folder/image.png',
467517
mockBaseEntry,
468518
mockImageField,
469519
),
@@ -484,7 +534,7 @@ describe('media.util', () => {
484534
selectMediaFilePublicPath(
485535
mockConfig,
486536
mockCollection,
487-
'image.png',
537+
'path/to/media/folder/image.png',
488538
mockBaseEntry,
489539
mockImageField,
490540
),
@@ -518,7 +568,7 @@ describe('media.util', () => {
518568
selectMediaFilePublicPath(
519569
mockConfig,
520570
mockCollection,
521-
'image.png',
571+
'path/to/collection/media/folder/image.png',
522572
mockBaseEntry,
523573
mockImageField,
524574
),
@@ -550,7 +600,7 @@ describe('media.util', () => {
550600
selectMediaFilePublicPath(
551601
mockConfig,
552602
mockCollection,
553-
'image.png',
603+
'path/to/collection/media/folder/image.png',
554604
mockBaseEntry,
555605
mockImageField,
556606
),
@@ -583,7 +633,7 @@ describe('media.util', () => {
583633
selectMediaFilePublicPath(
584634
mockConfig,
585635
mockCollection,
586-
'image.png',
636+
'path/to/some/other/media/i-am-a-title/image.png',
587637
mockBaseEntry,
588638
mockImageField,
589639
),
@@ -619,14 +669,15 @@ describe('media.util', () => {
619669

620670
const mockEntry = createMockEntry({
621671
path: 'path/to/entry/index.md',
672+
slug: 'i-am-a-title-fish',
622673
data: { title: 'i am a title', name: 'fish' },
623674
});
624675

625676
expect(
626677
selectMediaFilePublicPath(
627678
mockConfig,
628679
mockCollection,
629-
'image.png',
680+
'path/to/some/other/media/i-am-a-title-fish/image.png',
630681
mockEntry,
631682
mockImageField,
632683
),
@@ -661,14 +712,15 @@ describe('media.util', () => {
661712

662713
const mockEntry = createMockEntry({
663714
path: 'path/to/entry/index.md',
715+
slug: 'i-am-a-title-fish',
664716
data: { title: 'i am a title', name: 'fish' },
665717
});
666718

667719
expect(
668720
selectMediaFilePublicPath(
669721
mockConfig,
670722
mockCollection,
671-
'image.png',
723+
'/path/to/media/folder/i-am-a-title-fish/image.png',
672724
mockEntry,
673725
mockImageField,
674726
),
@@ -704,14 +756,15 @@ describe('media.util', () => {
704756

705757
const mockEntry = createMockEntry({
706758
path: 'path/to/entry/index.md',
759+
slug: 'i-am-a-title-fish',
707760
data: { title: 'i am a title', name: 'fish' },
708761
});
709762

710763
expect(
711764
selectMediaFilePublicPath(
712765
mockConfig,
713766
mockCollection,
714-
'image.png',
767+
'path/to/media/folder/i-am-a-title-fish/image.png',
715768
mockEntry,
716769
mockImageField,
717770
),
@@ -748,6 +801,7 @@ describe('media.util', () => {
748801

749802
const mockEntry = createMockEntry({
750803
path: 'path/to/entry/index.md',
804+
slug: '',
751805
data: {},
752806
newRecord: true,
753807
});
@@ -756,7 +810,7 @@ describe('media.util', () => {
756810
selectMediaFilePublicPath(
757811
mockConfig,
758812
mockCollection,
759-
'image.png',
813+
'path/to/collection/media/folder/image.png',
760814
mockEntry,
761815
mockImageField,
762816
),
@@ -792,7 +846,7 @@ describe('media.util', () => {
792846
selectMediaFilePublicPath(
793847
mockConfig,
794848
mockCollection,
795-
'image.png',
849+
'path/to/collection/media/folder/image.png',
796850
mockBaseEntry,
797851
mockImageField,
798852
),
@@ -824,7 +878,7 @@ describe('media.util', () => {
824878
selectMediaFilePublicPath(
825879
mockConfig,
826880
mockCollection,
827-
'image.png',
881+
'/path/to/collection/media/folder/image.png',
828882
mockBaseEntry,
829883
mockImageField,
830884
),
@@ -857,7 +911,7 @@ describe('media.util', () => {
857911
selectMediaFilePublicPath(
858912
mockConfig,
859913
mockCollection,
860-
'image.png',
914+
'/path/to/some/other/media/i-am-a-title/image.png',
861915
mockBaseEntry,
862916
mockImageField,
863917
),
@@ -893,14 +947,15 @@ describe('media.util', () => {
893947

894948
const mockEntry = createMockEntry({
895949
path: 'path/to/entry/index.md',
950+
slug: 'i-am-a-title-fish',
896951
data: { title: 'i am a title', name: 'fish' },
897952
});
898953

899954
expect(
900955
selectMediaFilePublicPath(
901956
mockConfig,
902957
mockCollection,
903-
'image.png',
958+
'/path/to/some/other/media/i-am-a-title-fish/image.png',
904959
mockEntry,
905960
mockImageField,
906961
),
@@ -935,14 +990,15 @@ describe('media.util', () => {
935990

936991
const mockEntry = createMockEntry({
937992
path: 'path/to/entry/index.md',
993+
slug: 'i-am-a-title-fish',
938994
data: { title: 'i am a title', name: 'fish' },
939995
});
940996

941997
expect(
942998
selectMediaFilePublicPath(
943999
mockConfig,
9441000
mockCollection,
945-
'image.png',
1001+
'/path/to/media/folder/i-am-a-title-fish/image.png',
9461002
mockEntry,
9471003
mockImageField,
9481004
),
@@ -978,14 +1034,15 @@ describe('media.util', () => {
9781034

9791035
const mockEntry = createMockEntry({
9801036
path: 'path/to/entry/index.md',
1037+
slug: 'i-am-a-title-fish',
9811038
data: { title: 'i am a title', name: 'fish' },
9821039
});
9831040

9841041
expect(
9851042
selectMediaFilePublicPath(
9861043
mockConfig,
9871044
mockCollection,
988-
'image.png',
1045+
'/path/to/media/folder/i-am-a-title-fish/image.png',
9891046
mockEntry,
9901047
mockImageField,
9911048
),
@@ -1021,7 +1078,8 @@ describe('media.util', () => {
10211078
.fields[3] as FileOrImageField;
10221079

10231080
const mockEntry = createMockEntry({
1024-
path: 'path/to/entry/index.md',
1081+
path: 'path/to/entry/DRAFT_MEDIA_FILES/index.md',
1082+
slug: '',
10251083
data: {},
10261084
newRecord: true,
10271085
});
@@ -1030,11 +1088,11 @@ describe('media.util', () => {
10301088
selectMediaFilePublicPath(
10311089
mockConfig,
10321090
mockCollection,
1033-
'image.png',
1091+
'/path/to/collection/media/folder/DRAFT_MEDIA_FILES/image.png',
10341092
mockEntry,
10351093
mockImageField,
10361094
),
1037-
).toBe('/path/to/collection/public/folder/image.png');
1095+
).toBe('/path/to/collection/public/folder/DRAFT_MEDIA_FILES/image.png');
10381096
});
10391097
});
10401098
});

0 commit comments

Comments
 (0)