geonetwork-ui 2.3.0-dev.376e0e90 → 2.3.0-dev.f736344f

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.
Files changed (114) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +5 -5
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +3 -3
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +52 -0
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.mjs +48 -0
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.mjs +18 -0
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.mjs +64 -0
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +130 -0
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +62 -58
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +58 -75
  12. package/esm2022/libs/api/metadata-converter/src/lib/metadata-base.mapper.mjs +14 -0
  13. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +14 -76
  14. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +4 -4
  15. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  16. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +8 -8
  17. package/fesm2022/geonetwork-ui.mjs +245 -822
  18. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  19. package/libs/api/metadata-converter/src/index.d.ts +4 -4
  20. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  21. package/libs/api/metadata-converter/src/lib/gn4/{gn4.converter.d.ts → gn4.metadata.mapper.d.ts} +5 -5
  22. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -0
  23. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  24. package/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.d.ts.map +1 -0
  25. package/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.d.ts.map +1 -0
  26. package/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.d.ts.map +1 -0
  27. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts +4 -0
  28. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -0
  29. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -34
  30. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  31. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -39
  32. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  33. package/libs/api/metadata-converter/src/lib/{base.converter.d.ts → metadata-base.mapper.d.ts} +3 -3
  34. package/libs/api/metadata-converter/src/lib/metadata-base.mapper.d.ts.map +1 -0
  35. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +1 -14
  36. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  37. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -2
  38. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  39. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -6
  40. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  41. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/src/libs/api/metadata-converter/src/index.ts +4 -4
  44. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +5 -32
  45. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +4 -11
  46. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +7 -33
  47. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +2 -2
  48. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
  49. package/src/libs/api/metadata-converter/src/lib/gn4/{gn4.converter.ts → gn4.metadata.mapper.ts} +2 -2
  50. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +196 -0
  51. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +82 -121
  52. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +95 -175
  53. package/src/libs/api/metadata-converter/src/lib/{base.converter.ts → metadata-base.mapper.ts} +2 -2
  54. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +16 -84
  55. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  56. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -9
  57. package/src/libs/feature/editor/src/lib/services/editor.service.ts +16 -27
  58. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +0 -14
  59. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +0 -15
  60. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +0 -52
  61. package/esm2022/libs/api/metadata-converter/src/lib/gn4/index.mjs +0 -4
  62. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/index.mjs +0 -2
  63. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +0 -123
  64. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +0 -116
  65. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +0 -138
  66. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/index.mjs +0 -2
  67. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +0 -242
  68. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.mjs +0 -18
  69. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +0 -14
  70. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.mjs +0 -48
  71. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +0 -18
  72. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +0 -64
  73. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +0 -1
  74. package/libs/api/metadata-converter/src/lib/find-converter.d.ts +0 -3
  75. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +0 -1
  76. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +0 -1
  77. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts +0 -4
  78. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts.map +0 -1
  79. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts +0 -2
  80. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts.map +0 -1
  81. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +0 -9
  82. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +0 -1
  83. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +0 -20
  84. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +0 -1
  85. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +0 -21
  86. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +0 -1
  87. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts +0 -2
  88. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts.map +0 -1
  89. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +0 -11
  90. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +0 -1
  91. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts +0 -8
  92. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts.map +0 -1
  93. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +0 -1
  94. package/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.d.ts.map +0 -1
  95. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +0 -1
  96. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +0 -1
  97. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +0 -16
  98. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +0 -580
  99. package/src/libs/api/metadata-converter/src/lib/gn4/index.ts +0 -3
  100. package/src/libs/api/metadata-converter/src/lib/iso19115-3/index.ts +0 -1
  101. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +0 -176
  102. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +0 -329
  103. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +0 -513
  104. package/src/libs/api/metadata-converter/src/lib/iso19139/index.ts +0 -1
  105. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +0 -327
  106. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.ts +0 -20
  107. /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/keyword.mapper.d.ts +0 -0
  108. /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/role.mapper.d.ts +0 -0
  109. /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/status.mapper.d.ts +0 -0
  110. /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/update-frequency.mapper.d.ts +0 -0
  111. /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/keyword.mapper.ts +0 -0
  112. /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/role.mapper.ts +0 -0
  113. /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/status.mapper.ts +0 -0
  114. /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/update-frequency.mapper.ts +0 -0
@@ -36,7 +36,6 @@ import {
36
36
  } from '../xml-utils'
37
37
  import {
38
38
  ChainableFunction,
39
- combine,
40
39
  fallback,
41
40
  filterArray,
42
41
  getAtIndex,
@@ -48,9 +47,8 @@ import {
48
47
  } from '../function-utils'
49
48
  import format from 'date-fns/format'
50
49
  import { readKind } from './read-parts'
51
- import { namePartsToFull } from './utils/individual-name'
52
50
 
53
- export function writeCharacterString(
51
+ function writeCharacterString(
54
52
  text: string
55
53
  ): ChainableFunction<XmlElement, XmlElement> {
56
54
  return tap(
@@ -58,9 +56,7 @@ export function writeCharacterString(
58
56
  )
59
57
  }
60
58
 
61
- export function writeLinkage(
62
- url: URL
63
- ): ChainableFunction<XmlElement, XmlElement> {
59
+ function writeLinkage(url: URL): ChainableFunction<XmlElement, XmlElement> {
64
60
  return tap(
65
61
  pipe(
66
62
  findNestedChildOrCreate('gmd:linkage', 'gmd:URL'),
@@ -69,7 +65,7 @@ export function writeLinkage(
69
65
  )
70
66
  }
71
67
 
72
- export function writeAnchor(
68
+ function writeAnchor(
73
69
  url: URL,
74
70
  text?: string
75
71
  ): ChainableFunction<XmlElement, XmlElement> {
@@ -82,9 +78,7 @@ export function writeAnchor(
82
78
  )
83
79
  }
84
80
 
85
- export function writeDateTime(
86
- date: Date
87
- ): ChainableFunction<XmlElement, XmlElement> {
81
+ function writeDateTime(date: Date): ChainableFunction<XmlElement, XmlElement> {
88
82
  return tap(
89
83
  pipe(
90
84
  findChildOrCreate('gco:DateTime'),
@@ -93,9 +87,7 @@ export function writeDateTime(
93
87
  )
94
88
  }
95
89
 
96
- export function writeDate(
97
- date: Date
98
- ): ChainableFunction<XmlElement, XmlElement> {
90
+ function writeDate(date: Date): ChainableFunction<XmlElement, XmlElement> {
99
91
  return tap(
100
92
  pipe(
101
93
  findChildOrCreate('gco:Date'),
@@ -104,7 +96,7 @@ export function writeDate(
104
96
  )
105
97
  }
106
98
 
107
- export function getProgressCode(status: RecordStatus): string {
99
+ function getProgressCode(status: RecordStatus): string {
108
100
  switch (status) {
109
101
  case 'completed':
110
102
  return 'completed'
@@ -123,7 +115,7 @@ export function getProgressCode(status: RecordStatus): string {
123
115
  }
124
116
  }
125
117
 
126
- export function getRoleCode(role: Role): string {
118
+ function getRoleCode(role: Role): string {
127
119
  switch (role) {
128
120
  case 'author':
129
121
  return 'author'
@@ -172,7 +164,7 @@ export function getRoleCode(role: Role): string {
172
164
  }
173
165
  }
174
166
 
175
- export function getDistributionProtocol(
167
+ function getDistributionProtocol(
176
168
  distribution: DatasetServiceDistribution
177
169
  ): string {
178
170
  switch (distribution.accessServiceProtocol.toLowerCase()) {
@@ -187,7 +179,7 @@ export function getDistributionProtocol(
187
179
  }
188
180
  }
189
181
 
190
- export function getMaintenanceFrequencyCode(
182
+ function getMaintenanceFrequencyCode(
191
183
  updateFrequency: UpdateFrequencyCode
192
184
  ): string | null {
193
185
  switch (updateFrequency) {
@@ -206,7 +198,7 @@ export function getMaintenanceFrequencyCode(
206
198
  }
207
199
  }
208
200
 
209
- export function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
201
+ function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
210
202
  const duration = {
211
203
  years: 0,
212
204
  months: 0,
@@ -235,61 +227,19 @@ export function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
235
227
  return `P${duration.years}Y${duration.months}M${duration.days}D${hours}`
236
228
  }
237
229
 
238
- export function appendResponsibleParty(contact: Individual) {
239
- const fullName = namePartsToFull(contact.firstName, contact.lastName)
240
-
241
- const createAddress = pipe(
242
- createElement('gmd:address'),
243
- createChild('gmd:CI_Address'),
244
- appendChildren(
245
- pipe(
246
- createElement('gmd:electronicMailAddress'),
247
- writeCharacterString(contact.email)
248
- )
249
- ),
250
- contact.address
251
- ? appendChildren(
252
- pipe(
253
- createElement('gmd:deliveryPoint'),
254
- writeCharacterString(contact.address)
255
- )
256
- )
257
- : noop
258
- )
259
-
260
- const createContact = pipe(
261
- createElement('gmd:contactInfo'),
262
- createChild('gmd:CI_Contact'),
263
- contact.phone
264
- ? appendChildren(
265
- pipe(
266
- createElement('gmd:phone'),
267
- createChild('gmd:CI_Telephone'),
268
- createChild('gmd:voice'),
269
- writeCharacterString(contact.phone)
270
- )
271
- )
272
- : noop,
273
- appendChildren(createAddress),
274
- 'website' in contact.organization
275
- ? appendChildren(
276
- pipe(
277
- createElement('gmd:onlineResource'),
278
- createChild('gmd:CI_OnlineResource'),
279
- writeLinkage(contact.organization.website)
280
- )
281
- )
282
- : noop
283
- )
284
-
230
+ function appendResponsibleParty(contact: Individual) {
231
+ const name =
232
+ contact.lastName && contact.firstName
233
+ ? `${contact.firstName} ${contact.lastName}`
234
+ : contact.lastName || contact.firstName || null
285
235
  return appendChildren(
286
236
  pipe(
287
237
  createElement('gmd:CI_ResponsibleParty'),
288
- fullName
238
+ name
289
239
  ? appendChildren(
290
240
  pipe(
291
241
  createElement('gmd:individualName'),
292
- writeCharacterString(fullName)
242
+ writeCharacterString(name)
293
243
  )
294
244
  )
295
245
  : noop,
@@ -306,7 +256,27 @@ export function appendResponsibleParty(contact: Individual) {
306
256
  createElement('gmd:organisationName'),
307
257
  writeCharacterString(contact.organization.name)
308
258
  ),
309
- createContact,
259
+ pipe(
260
+ createElement('gmd:contactInfo'),
261
+ createChild('gmd:CI_Contact'),
262
+ appendChildren(
263
+ pipe(
264
+ createElement('gmd:address'),
265
+ createChild('gmd:CI_Address'),
266
+ createChild('gmd:electronicMailAddress'),
267
+ writeCharacterString(contact.email)
268
+ )
269
+ ),
270
+ 'website' in contact.organization
271
+ ? appendChildren(
272
+ pipe(
273
+ createElement('gmd:onlineResource'),
274
+ createChild('gmd:CI_OnlineResource'),
275
+ writeLinkage(contact.organization.website)
276
+ )
277
+ )
278
+ : noop
279
+ ),
310
280
  pipe(
311
281
  createElement('gmd:role'),
312
282
  createChild('gmd:CI_RoleCode'),
@@ -321,7 +291,7 @@ export function appendResponsibleParty(contact: Individual) {
321
291
  )
322
292
  }
323
293
 
324
- export function updateCitationDate(
294
+ function updateCitationDate(
325
295
  date: Date,
326
296
  type: 'revision' | 'creation' | 'publication'
327
297
  ) {
@@ -341,8 +311,8 @@ export function updateCitationDate(
341
311
  )
342
312
  }
343
313
 
344
- export function appendCitationDate(
345
- date: Date,
314
+ function appendCitationDate(
315
+ date,
346
316
  type: 'revision' | 'creation' | 'publication'
347
317
  ) {
348
318
  return appendChildren(
@@ -365,12 +335,12 @@ export function appendCitationDate(
365
335
  )
366
336
  }
367
337
 
368
- export function removeKeywords() {
338
+ function removeKeywords() {
369
339
  return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')))
370
340
  }
371
341
 
372
342
  // returns a <gmd:thesaurusName> element
373
- export function createThesaurus(thesaurus: KeywordThesaurus) {
343
+ function createThesaurus(thesaurus: KeywordThesaurus) {
374
344
  return pipe(
375
345
  createElement('gmd:thesaurusName'),
376
346
  createChild('gmd:CI_Citation'),
@@ -395,15 +365,14 @@ export function createThesaurus(thesaurus: KeywordThesaurus) {
395
365
  )
396
366
  }
397
367
 
398
- export function appendKeywords(keywords: Keyword[]) {
399
- // keywords are grouped by thesaurus if they have one, otherwise by type
368
+ function appendKeywords(keywords: Keyword[]) {
400
369
  const keywordsByThesaurus: Keyword[][] = keywords.reduce((acc, keyword) => {
401
370
  const thesaurusId = keyword.thesaurus?.id
402
371
  const type = keyword.type
403
372
  let existingGroup = acc.find((group) =>
404
- thesaurusId
405
- ? group[0].thesaurus?.id === thesaurusId
406
- : group[0].type === type && !group[0].thesaurus
373
+ group[0].thesaurus
374
+ ? group[0].thesaurus.id === thesaurusId
375
+ : group[0].type === type
407
376
  )
408
377
  if (!existingGroup) {
409
378
  existingGroup = []
@@ -444,7 +413,7 @@ export function appendKeywords(keywords: Keyword[]) {
444
413
  )
445
414
  }
446
415
 
447
- export function createConstraint(
416
+ function createConstraint(
448
417
  constraint: Constraint,
449
418
  type: 'legal' | 'security' | 'other'
450
419
  ) {
@@ -502,7 +471,7 @@ export function createConstraint(
502
471
  )
503
472
  }
504
473
 
505
- export function removeOtherConstraints() {
474
+ function removeOtherConstraints() {
506
475
  return removeChildren(
507
476
  pipe(
508
477
  findChildrenElement('gmd:resourceConstraints'),
@@ -516,7 +485,7 @@ export function removeOtherConstraints() {
516
485
  )
517
486
  }
518
487
 
519
- export function removeSecurityConstraints() {
488
+ function removeSecurityConstraints() {
520
489
  return removeChildren(
521
490
  pipe(
522
491
  findChildrenElement('gmd:resourceConstraints'),
@@ -530,7 +499,7 @@ export function removeSecurityConstraints() {
530
499
  )
531
500
  }
532
501
 
533
- export function removeLegalConstraints() {
502
+ function removeLegalConstraints() {
534
503
  return removeChildren(
535
504
  pipe(
536
505
  findChildrenElement('gmd:resourceConstraints'),
@@ -550,7 +519,7 @@ export function removeLegalConstraints() {
550
519
  )
551
520
  }
552
521
 
553
- export function removeLicenses() {
522
+ function removeLicenses() {
554
523
  return removeChildren(
555
524
  pipe(
556
525
  findChildrenElement('gmd:resourceConstraints'),
@@ -570,7 +539,7 @@ export function removeLicenses() {
570
539
  )
571
540
  }
572
541
 
573
- export function createLicense(license: Constraint) {
542
+ function createLicense(license: Constraint) {
574
543
  return pipe(
575
544
  createElement('gmd:resourceConstraints'),
576
545
  createChild('gmd:MD_LegalConstraints'),
@@ -603,52 +572,44 @@ export function createLicense(license: Constraint) {
603
572
  )
604
573
  }
605
574
 
606
- export function removeDistributions() {
575
+ function removeDistributions() {
607
576
  return pipe(removeChildrenByName('gmd:distributionInfo'))
608
577
  }
609
578
 
610
- function appendDistributionFormat(mimeType: string) {
611
- return appendChildren(
612
- pipe(
613
- createElement('gmd:distributionFormat'),
614
- createChild('gmd:MD_Format'),
615
- appendChildren(
616
- pipe(createElement('gmd:name'), writeCharacterString(mimeType)),
617
- pipe(
618
- createElement('gmd:version'),
619
- writeCharacterString('1.0') // hardcoding this as it most likely won't be used but is mandatory
579
+ function createDistribution(distribution: DatasetDistribution) {
580
+ const appendDistributionFormat =
581
+ 'mimeType' in distribution
582
+ ? appendChildren(
583
+ pipe(
584
+ createElement('gmd:distributionFormat'),
585
+ createChild('gmd:MD_Format'),
586
+ appendChildren(
587
+ pipe(
588
+ createElement('gmd:name'),
589
+ writeCharacterString(distribution.mimeType)
590
+ ),
591
+ pipe(
592
+ createElement('gmd:version'),
593
+ writeCharacterString('1.0') // hardcoding this as it most likely won't be used but is mandatory
594
+ )
595
+ )
596
+ )
620
597
  )
621
- )
622
- )
623
- )
624
- }
625
-
626
- export function createDistributionInfo() {
627
- return pipe(
628
- createElement('gmd:distributionInfo'),
629
- createChild('gmd:MD_Distribution')
630
- )
631
- }
598
+ : noop
632
599
 
633
- // apply to MD_Distribution
634
- export function appendDistribution(
635
- distribution: DatasetDistribution,
636
- appendFormatFn: (
637
- mimeType: string
638
- ) => ChainableFunction<XmlElement, XmlElement>
639
- ) {
640
- let name: string
641
- let functionCode: string
642
- let protocol: string
600
+ let linkageUrl, name, functionCode, protocol
643
601
  if (distribution.type === 'service') {
602
+ linkageUrl = distribution.url.toString()
644
603
  name = distribution.identifierInService // this is for GeoNetwork to know the layer name
645
604
  functionCode = 'download'
646
605
  protocol = getDistributionProtocol(distribution)
647
606
  } else if (distribution.type === 'download') {
607
+ linkageUrl = distribution.url.toString()
648
608
  name = distribution.name
649
609
  functionCode = 'download'
650
610
  protocol = 'WWW:DOWNLOAD'
651
611
  } else {
612
+ linkageUrl = distribution.url.toString()
652
613
  name = distribution.name
653
614
  functionCode = 'information'
654
615
  protocol = 'WWW:LINK'
@@ -659,7 +620,7 @@ export function appendDistribution(
659
620
  createChild('gmd:MD_DigitalTransferOptions'),
660
621
  createChild('gmd:onLine'),
661
622
  createChild('gmd:CI_OnlineResource'),
662
- writeLinkage(distribution.url),
623
+ writeLinkage(linkageUrl),
663
624
  'description' in distribution
664
625
  ? appendChildren(
665
626
  pipe(
@@ -688,7 +649,9 @@ export function appendDistribution(
688
649
  )
689
650
  )
690
651
  return pipe(
691
- 'mimeType' in distribution ? appendFormatFn(distribution.mimeType) : noop,
652
+ createElement('gmd:distributionInfo'),
653
+ createChild('gmd:MD_Distribution'),
654
+ appendDistributionFormat,
692
655
  appendTransferOptions
693
656
  )
694
657
  }
@@ -697,7 +660,7 @@ export function appendDistribution(
697
660
  * Looks for srv:SV_ServiceIdentification or gmd:MD_DataIdentification element
698
661
  * depending on record type, create if missing
699
662
  */
700
- export function findOrCreateIdentification() {
663
+ function findOrCreateIdentification() {
701
664
  return (rootEl: XmlElement) => {
702
665
  const kind = readKind(rootEl)
703
666
  let eltName = 'gmd:MD_DataIdentification'
@@ -706,7 +669,7 @@ export function findOrCreateIdentification() {
706
669
  }
707
670
  }
708
671
 
709
- export function findOrCreateDistribution() {
672
+ function findOrCreateDistribution() {
710
673
  return (rootEl: XmlElement) => {
711
674
  return findNestedChildOrCreate(
712
675
  'gmd:distributionInfo',
@@ -800,26 +763,11 @@ export function writeStatus(record: DatasetRecord, rootEl: XmlElement) {
800
763
  }
801
764
 
802
765
  export function writeContacts(record: CatalogRecord, rootEl: XmlElement) {
803
- pipe(
804
- removeChildrenByName('gmd:contact'),
805
- appendChildren(
806
- ...record.contacts.map((contact) =>
807
- pipe(createElement('gmd:contact'), appendResponsibleParty(contact))
808
- )
809
- )
810
- )(rootEl)
811
- }
812
-
813
- export function writeContactsForResource(
814
- record: CatalogRecord,
815
- rootEl: XmlElement
816
- ) {
817
766
  pipe(
818
767
  findOrCreateIdentification(),
819
768
  removeChildrenByName('gmd:pointOfContact'),
820
- removeChildrenByName('gmd:contact'),
821
769
  appendChildren(
822
- ...record.contactsForResource.map((contact) =>
770
+ ...record.contacts.map((contact) =>
823
771
  pipe(
824
772
  createElement('gmd:pointOfContact'),
825
773
  appendResponsibleParty(contact)
@@ -930,47 +878,26 @@ export function writeUpdateFrequency(
930
878
  )(rootEl)
931
879
  }
932
880
 
933
- export function writeResourceCreated(
934
- record: DatasetRecord,
935
- rootEl: XmlElement
936
- ) {
937
- if (!('resourceCreated' in record)) return
881
+ export function writeDatasetCreated(record: DatasetRecord, rootEl: XmlElement) {
882
+ if (!('datasetCreated' in record)) return
938
883
  pipe(
939
884
  findOrCreateIdentification(),
940
885
  findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
941
886
  fallback(
942
- updateCitationDate(record.resourceCreated, 'creation'),
943
- appendCitationDate(record.resourceCreated, 'creation')
887
+ updateCitationDate(record.datasetCreated, 'creation'),
888
+ appendCitationDate(record.datasetCreated, 'creation')
944
889
  )
945
890
  )(rootEl)
946
891
  }
947
892
 
948
- export function writeResourceUpdated(
949
- record: DatasetRecord,
950
- rootEl: XmlElement
951
- ) {
952
- if (!('resourceUpdated' in record)) return
893
+ export function writeDatasetUpdated(record: DatasetRecord, rootEl: XmlElement) {
894
+ if (!('datasetUpdated' in record)) return
953
895
  pipe(
954
896
  findOrCreateIdentification(),
955
897
  findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
956
898
  fallback(
957
- updateCitationDate(record.resourceUpdated, 'revision'),
958
- appendCitationDate(record.resourceUpdated, 'revision')
959
- )
960
- )(rootEl)
961
- }
962
-
963
- export function writeResourcePublished(
964
- record: DatasetRecord,
965
- rootEl: XmlElement
966
- ) {
967
- if (!('resourcePublished' in record)) return
968
- pipe(
969
- findOrCreateIdentification(),
970
- findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
971
- fallback(
972
- updateCitationDate(record.resourcePublished, 'publication'),
973
- appendCitationDate(record.resourcePublished, 'publication')
899
+ updateCitationDate(record.datasetUpdated, 'revision'),
900
+ appendCitationDate(record.datasetUpdated, 'revision')
974
901
  )
975
902
  )(rootEl)
976
903
  }
@@ -1028,14 +955,7 @@ export function writeGraphicOverviews(
1028
955
  export function writeDistributions(record: DatasetRecord, rootEl: XmlElement) {
1029
956
  pipe(
1030
957
  removeDistributions(),
1031
- appendChildren(
1032
- ...record.distributions.map((d) =>
1033
- pipe(
1034
- createDistributionInfo(),
1035
- appendDistribution(d, appendDistributionFormat)
1036
- )
1037
- )
1038
- )
958
+ appendChildren(...record.distributions.map(createDistribution))
1039
959
  )(rootEl)
1040
960
  }
1041
961
 
@@ -1052,7 +972,7 @@ export function writeLineage(record: DatasetRecord, rootEl: XmlElement) {
1052
972
  )(rootEl)
1053
973
  }
1054
974
 
1055
- export function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
975
+ function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
1056
976
  switch (endpoint.protocol.toLowerCase()) {
1057
977
  case 'wfs':
1058
978
  return 'OGC:WFS'
@@ -1065,7 +985,7 @@ export function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
1065
985
  }
1066
986
  }
1067
987
 
1068
- export function createOnlineResource(onlineResource: ServiceOnlineResource) {
988
+ function createOnlineResource(onlineResource: ServiceOnlineResource) {
1069
989
  let linkageUrl, functionCode, protocol
1070
990
  if (onlineResource.type === 'endpoint') {
1071
991
  linkageUrl = onlineResource.endpointUrl.toString()
@@ -7,13 +7,13 @@ export class MetadataMapperContext {
7
7
  readonly location?
8
8
  }
9
9
 
10
- export abstract class BaseConverter<F> {
10
+ export abstract class MetadataBaseMapper<F> {
11
11
  constructor(
12
12
  protected ctx: MetadataMapperContext = new MetadataMapperContext()
13
13
  ) {}
14
14
 
15
15
  abstract readRecord(document: F): Promise<CatalogRecord>
16
- abstract writeRecord(record: CatalogRecord, reference?: F): Promise<F>
16
+ abstract writeRecord(record: CatalogRecord): Promise<F>
17
17
  readRecords(documents: F[]): Promise<CatalogRecord[]> {
18
18
  return Promise.all(documents.map((doc) => this.readRecord(doc)))
19
19
  }