11import type { DateLike , GenerateUtil } from '../../../common/types.js'
22import {
3+ generateArrayOrSingular ,
34 generateCdataString ,
45 generateRfc3339Date ,
56 isObject ,
6- isPresent ,
7- trimArray ,
87 trimObject ,
98} from '../../../common/utils.js'
109import type { DctermsNs } from '../common/types.js'
@@ -14,217 +13,270 @@ export const generateItemOrFeed: GenerateUtil<DctermsNs.ItemOrFeed<DateLike>> =
1413 return
1514 }
1615
17- // TODO: Remove this once deprecated singular fields are removed in next major version.
18- const generateArray = < V > (
19- pluralValues : Array < V > | undefined ,
20- singularValue : V | undefined ,
21- generator : ( value : V ) => unknown ,
22- ) => {
23- if ( isPresent ( pluralValues ) ) {
24- return trimArray ( pluralValues . map ( generator ) )
25- }
26-
27- if ( isPresent ( singularValue ) ) {
28- return generator ( singularValue )
29- }
30- }
31-
3216 const value = {
33- 'dcterms:abstract' : generateArray (
17+ 'dcterms:abstract' : generateArrayOrSingular (
3418 itemOrFeed . abstracts ,
3519 itemOrFeed . abstract ,
3620 generateCdataString ,
3721 ) ,
38- 'dcterms:accessRights' : generateArray ( itemOrFeed . accessRights , undefined , generateCdataString ) ,
39- 'dcterms:accrualMethod' : generateArray (
22+ 'dcterms:accessRights' : generateArrayOrSingular (
23+ itemOrFeed . accessRights ,
24+ undefined ,
25+ generateCdataString ,
26+ ) ,
27+ 'dcterms:accrualMethod' : generateArrayOrSingular (
4028 itemOrFeed . accrualMethods ,
4129 itemOrFeed . accrualMethod ,
4230 generateCdataString ,
4331 ) ,
44- 'dcterms:accrualPeriodicity' : generateArray (
32+ 'dcterms:accrualPeriodicity' : generateArrayOrSingular (
4533 itemOrFeed . accrualPeriodicities ,
4634 itemOrFeed . accrualPeriodicity ,
4735 generateCdataString ,
4836 ) ,
49- 'dcterms:accrualPolicy' : generateArray (
37+ 'dcterms:accrualPolicy' : generateArrayOrSingular (
5038 itemOrFeed . accrualPolicies ,
5139 itemOrFeed . accrualPolicy ,
5240 generateCdataString ,
5341 ) ,
54- 'dcterms:alternative' : generateArray (
42+ 'dcterms:alternative' : generateArrayOrSingular (
5543 itemOrFeed . alternatives ,
5644 itemOrFeed . alternative ,
5745 generateCdataString ,
5846 ) ,
59- 'dcterms:audience' : generateArray (
47+ 'dcterms:audience' : generateArrayOrSingular (
6048 itemOrFeed . audiences ,
6149 itemOrFeed . audience ,
6250 generateCdataString ,
6351 ) ,
64- 'dcterms:available' : generateArray (
52+ 'dcterms:available' : generateArrayOrSingular (
6553 itemOrFeed . availables ,
6654 itemOrFeed . available ,
6755 generateRfc3339Date ,
6856 ) ,
69- 'dcterms:bibliographicCitation' : generateArray (
57+ 'dcterms:bibliographicCitation' : generateArrayOrSingular (
7058 itemOrFeed . bibliographicCitations ,
7159 itemOrFeed . bibliographicCitation ,
7260 generateCdataString ,
7361 ) ,
74- 'dcterms:conformsTo' : generateArray (
62+ 'dcterms:conformsTo' : generateArrayOrSingular (
7563 itemOrFeed . conformsTos ,
7664 itemOrFeed . conformsTo ,
7765 generateCdataString ,
7866 ) ,
79- 'dcterms:contributor' : generateArray (
67+ 'dcterms:contributor' : generateArrayOrSingular (
8068 itemOrFeed . contributors ,
8169 itemOrFeed . contributor ,
8270 generateCdataString ,
8371 ) ,
84- 'dcterms:coverage' : generateArray (
72+ 'dcterms:coverage' : generateArrayOrSingular (
8573 itemOrFeed . coverages ,
8674 itemOrFeed . coverage ,
8775 generateCdataString ,
8876 ) ,
89- 'dcterms:created' : generateArray ( itemOrFeed . createds , itemOrFeed . created , generateRfc3339Date ) ,
90- 'dcterms:creator' : generateArray ( itemOrFeed . creators , itemOrFeed . creator , generateCdataString ) ,
91- 'dcterms:date' : generateArray ( itemOrFeed . dates , itemOrFeed . date , generateRfc3339Date ) ,
92- 'dcterms:dateAccepted' : generateArray (
77+ 'dcterms:created' : generateArrayOrSingular (
78+ itemOrFeed . createds ,
79+ itemOrFeed . created ,
80+ generateRfc3339Date ,
81+ ) ,
82+ 'dcterms:creator' : generateArrayOrSingular (
83+ itemOrFeed . creators ,
84+ itemOrFeed . creator ,
85+ generateCdataString ,
86+ ) ,
87+ 'dcterms:date' : generateArrayOrSingular ( itemOrFeed . dates , itemOrFeed . date , generateRfc3339Date ) ,
88+ 'dcterms:dateAccepted' : generateArrayOrSingular (
9389 itemOrFeed . dateAccepteds ,
9490 itemOrFeed . dateAccepted ,
9591 generateRfc3339Date ,
9692 ) ,
97- 'dcterms:dateCopyrighted' : generateArray (
93+ 'dcterms:dateCopyrighted' : generateArrayOrSingular (
9894 itemOrFeed . dateCopyrighteds ,
9995 itemOrFeed . dateCopyrighted ,
10096 generateRfc3339Date ,
10197 ) ,
102- 'dcterms:dateSubmitted' : generateArray (
98+ 'dcterms:dateSubmitted' : generateArrayOrSingular (
10399 itemOrFeed . dateSubmitteds ,
104100 itemOrFeed . dateSubmitted ,
105101 generateRfc3339Date ,
106102 ) ,
107- 'dcterms:description' : generateArray (
103+ 'dcterms:description' : generateArrayOrSingular (
108104 itemOrFeed . descriptions ,
109105 itemOrFeed . description ,
110106 generateCdataString ,
111107 ) ,
112- 'dcterms:educationLevel' : generateArray (
108+ 'dcterms:educationLevel' : generateArrayOrSingular (
113109 itemOrFeed . educationLevels ,
114110 itemOrFeed . educationLevel ,
115111 generateCdataString ,
116112 ) ,
117- 'dcterms:extent' : generateArray ( itemOrFeed . extents , itemOrFeed . extent , generateCdataString ) ,
118- 'dcterms:format' : generateArray ( itemOrFeed . formats , itemOrFeed . format , generateCdataString ) ,
119- 'dcterms:hasFormat' : generateArray (
113+ 'dcterms:extent' : generateArrayOrSingular (
114+ itemOrFeed . extents ,
115+ itemOrFeed . extent ,
116+ generateCdataString ,
117+ ) ,
118+ 'dcterms:format' : generateArrayOrSingular (
119+ itemOrFeed . formats ,
120+ itemOrFeed . format ,
121+ generateCdataString ,
122+ ) ,
123+ 'dcterms:hasFormat' : generateArrayOrSingular (
120124 itemOrFeed . hasFormats ,
121125 itemOrFeed . hasFormat ,
122126 generateCdataString ,
123127 ) ,
124- 'dcterms:hasPart' : generateArray ( itemOrFeed . hasParts , itemOrFeed . hasPart , generateCdataString ) ,
125- 'dcterms:hasVersion' : generateArray (
128+ 'dcterms:hasPart' : generateArrayOrSingular (
129+ itemOrFeed . hasParts ,
130+ itemOrFeed . hasPart ,
131+ generateCdataString ,
132+ ) ,
133+ 'dcterms:hasVersion' : generateArrayOrSingular (
126134 itemOrFeed . hasVersions ,
127135 itemOrFeed . hasVersion ,
128136 generateCdataString ,
129137 ) ,
130- 'dcterms:identifier' : generateArray (
138+ 'dcterms:identifier' : generateArrayOrSingular (
131139 itemOrFeed . identifiers ,
132140 itemOrFeed . identifier ,
133141 generateCdataString ,
134142 ) ,
135- 'dcterms:instructionalMethod' : generateArray (
143+ 'dcterms:instructionalMethod' : generateArrayOrSingular (
136144 itemOrFeed . instructionalMethods ,
137145 itemOrFeed . instructionalMethod ,
138146 generateCdataString ,
139147 ) ,
140- 'dcterms:isFormatOf' : generateArray (
148+ 'dcterms:isFormatOf' : generateArrayOrSingular (
141149 itemOrFeed . isFormatOfs ,
142150 itemOrFeed . isFormatOf ,
143151 generateCdataString ,
144152 ) ,
145- 'dcterms:isPartOf' : generateArray (
153+ 'dcterms:isPartOf' : generateArrayOrSingular (
146154 itemOrFeed . isPartOfs ,
147155 itemOrFeed . isPartOf ,
148156 generateCdataString ,
149157 ) ,
150- 'dcterms:isReferencedBy' : generateArray (
158+ 'dcterms:isReferencedBy' : generateArrayOrSingular (
151159 itemOrFeed . isReferencedBys ,
152160 itemOrFeed . isReferencedBy ,
153161 generateCdataString ,
154162 ) ,
155- 'dcterms:isReplacedBy' : generateArray (
163+ 'dcterms:isReplacedBy' : generateArrayOrSingular (
156164 itemOrFeed . isReplacedBys ,
157165 itemOrFeed . isReplacedBy ,
158166 generateCdataString ,
159167 ) ,
160- 'dcterms:isRequiredBy' : generateArray (
168+ 'dcterms:isRequiredBy' : generateArrayOrSingular (
161169 itemOrFeed . isRequiredBys ,
162170 itemOrFeed . isRequiredBy ,
163171 generateCdataString ,
164172 ) ,
165- 'dcterms:issued' : generateArray ( itemOrFeed . issueds , itemOrFeed . issued , generateRfc3339Date ) ,
166- 'dcterms:isVersionOf' : generateArray (
173+ 'dcterms:issued' : generateArrayOrSingular (
174+ itemOrFeed . issueds ,
175+ itemOrFeed . issued ,
176+ generateRfc3339Date ,
177+ ) ,
178+ 'dcterms:isVersionOf' : generateArrayOrSingular (
167179 itemOrFeed . isVersionOfs ,
168180 itemOrFeed . isVersionOf ,
169181 generateCdataString ,
170182 ) ,
171- 'dcterms:language' : generateArray (
183+ 'dcterms:language' : generateArrayOrSingular (
172184 itemOrFeed . languages ,
173185 itemOrFeed . language ,
174186 generateCdataString ,
175187 ) ,
176- 'dcterms:license' : generateArray ( itemOrFeed . licenses , itemOrFeed . license , generateCdataString ) ,
177- 'dcterms:mediator' : generateArray (
188+ 'dcterms:license' : generateArrayOrSingular (
189+ itemOrFeed . licenses ,
190+ itemOrFeed . license ,
191+ generateCdataString ,
192+ ) ,
193+ 'dcterms:mediator' : generateArrayOrSingular (
178194 itemOrFeed . mediators ,
179195 itemOrFeed . mediator ,
180196 generateCdataString ,
181197 ) ,
182- 'dcterms:medium' : generateArray ( itemOrFeed . mediums , itemOrFeed . medium , generateCdataString ) ,
183- 'dcterms:modified' : generateArray (
198+ 'dcterms:medium' : generateArrayOrSingular (
199+ itemOrFeed . mediums ,
200+ itemOrFeed . medium ,
201+ generateCdataString ,
202+ ) ,
203+ 'dcterms:modified' : generateArrayOrSingular (
184204 itemOrFeed . modifieds ,
185205 itemOrFeed . modified ,
186206 generateRfc3339Date ,
187207 ) ,
188- 'dcterms:provenance' : generateArray (
208+ 'dcterms:provenance' : generateArrayOrSingular (
189209 itemOrFeed . provenances ,
190210 itemOrFeed . provenance ,
191211 generateCdataString ,
192212 ) ,
193- 'dcterms:publisher' : generateArray (
213+ 'dcterms:publisher' : generateArrayOrSingular (
194214 itemOrFeed . publishers ,
195215 itemOrFeed . publisher ,
196216 generateCdataString ,
197217 ) ,
198- 'dcterms:references' : generateArray ( itemOrFeed . references , undefined , generateCdataString ) ,
199- 'dcterms:relation' : generateArray (
218+ 'dcterms:references' : generateArrayOrSingular (
219+ itemOrFeed . references ,
220+ undefined ,
221+ generateCdataString ,
222+ ) ,
223+ 'dcterms:relation' : generateArrayOrSingular (
200224 itemOrFeed . relations ,
201225 itemOrFeed . relation ,
202226 generateCdataString ,
203227 ) ,
204- 'dcterms:replaces' : generateArray ( itemOrFeed . replaces , undefined , generateCdataString ) ,
205- 'dcterms:requires' : generateArray ( itemOrFeed . requires , undefined , generateCdataString ) ,
206- 'dcterms:rights' : generateArray ( itemOrFeed . rights , undefined , generateCdataString ) ,
207- 'dcterms:rightsHolder' : generateArray (
228+ 'dcterms:replaces' : generateArrayOrSingular (
229+ itemOrFeed . replaces ,
230+ undefined ,
231+ generateCdataString ,
232+ ) ,
233+ 'dcterms:requires' : generateArrayOrSingular (
234+ itemOrFeed . requires ,
235+ undefined ,
236+ generateCdataString ,
237+ ) ,
238+ 'dcterms:rights' : generateArrayOrSingular ( itemOrFeed . rights , undefined , generateCdataString ) ,
239+ 'dcterms:rightsHolder' : generateArrayOrSingular (
208240 itemOrFeed . rightsHolders ,
209241 itemOrFeed . rightsHolder ,
210242 generateCdataString ,
211243 ) ,
212- 'dcterms:source' : generateArray ( itemOrFeed . sources , itemOrFeed . source , generateCdataString ) ,
213- 'dcterms:spatial' : generateArray ( itemOrFeed . spatials , itemOrFeed . spatial , generateCdataString ) ,
214- 'dcterms:subject' : generateArray ( itemOrFeed . subjects , itemOrFeed . subject , generateCdataString ) ,
215- 'dcterms:tableOfContents' : generateArray (
244+ 'dcterms:source' : generateArrayOrSingular (
245+ itemOrFeed . sources ,
246+ itemOrFeed . source ,
247+ generateCdataString ,
248+ ) ,
249+ 'dcterms:spatial' : generateArrayOrSingular (
250+ itemOrFeed . spatials ,
251+ itemOrFeed . spatial ,
252+ generateCdataString ,
253+ ) ,
254+ 'dcterms:subject' : generateArrayOrSingular (
255+ itemOrFeed . subjects ,
256+ itemOrFeed . subject ,
257+ generateCdataString ,
258+ ) ,
259+ 'dcterms:tableOfContents' : generateArrayOrSingular (
216260 itemOrFeed . tableOfContents ,
217261 undefined ,
218262 generateCdataString ,
219263 ) ,
220- 'dcterms:temporal' : generateArray (
264+ 'dcterms:temporal' : generateArrayOrSingular (
221265 itemOrFeed . temporals ,
222266 itemOrFeed . temporal ,
223267 generateCdataString ,
224268 ) ,
225- 'dcterms:title' : generateArray ( itemOrFeed . titles , itemOrFeed . title , generateCdataString ) ,
226- 'dcterms:type' : generateArray ( itemOrFeed . types , itemOrFeed . type , generateCdataString ) ,
227- 'dcterms:valid' : generateArray ( itemOrFeed . valids , itemOrFeed . valid , generateRfc3339Date ) ,
269+ 'dcterms:title' : generateArrayOrSingular (
270+ itemOrFeed . titles ,
271+ itemOrFeed . title ,
272+ generateCdataString ,
273+ ) ,
274+ 'dcterms:type' : generateArrayOrSingular ( itemOrFeed . types , itemOrFeed . type , generateCdataString ) ,
275+ 'dcterms:valid' : generateArrayOrSingular (
276+ itemOrFeed . valids ,
277+ itemOrFeed . valid ,
278+ generateRfc3339Date ,
279+ ) ,
228280 }
229281
230282 return trimObject ( value )
0 commit comments