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
@@ -33,7 +33,6 @@ export function createDocument(rootEl: XmlElement): XmlDocument {
33
33
  function collectNamespaceFromName(name: string) {
34
34
  const namespace = extractNamespace(name)
35
35
  if (namespace === 'xmlns' || namespace === null) return
36
- if (rootEl.attributes[`xmlns:${namespace}`]) return
37
36
  if (!NAMESPACES[namespace]) {
38
37
  throw new Error(`No known URI for namespace ${namespace}`)
39
38
  }
@@ -56,16 +55,11 @@ export function createDocument(rootEl: XmlElement): XmlDocument {
56
55
  /**
57
56
  * Will do nothing if no namespace present
58
57
  */
59
- export function stripNamespace(name: string): string {
58
+ function stripNamespace(name: string): string {
60
59
  const colon = name.indexOf(':')
61
60
  return colon > -1 ? name.substring(colon + 1) : name
62
61
  }
63
62
 
64
- export function getNamespace(name: string): string {
65
- const colon = name.indexOf(':')
66
- return colon > -1 ? name.substring(0, colon) : ''
67
- }
68
-
69
63
  function getElementName(element: XmlElement): string {
70
64
  return element.name || ''
71
65
  }
@@ -121,7 +115,7 @@ export function allChildrenElement(element: XmlElement): Array<XmlElement> {
121
115
  * returns an empty array if no matching element
122
116
  */
123
117
  export function findNestedElements(
124
- ...elementNames: string[]
118
+ ...elementNames
125
119
  ): ChainableFunction<XmlElement, Array<XmlElement>> {
126
120
  return (el) => {
127
121
  function lookFor(elNameIndex: number) {
@@ -254,29 +248,6 @@ const NAMESPACES = {
254
248
  gsr: 'http://www.isotc211.org/2005/gsr',
255
249
  gmi: 'http://www.isotc211.org/2005/gmi',
256
250
  xlink: 'http://www.w3.org/1999/xlink',
257
- mdb: 'http://standards.iso.org/iso/19115/-3/mdb/2.0',
258
- mdq: 'http://standards.iso.org/iso/19157/-2/mdq/1.0',
259
- msr: 'http://standards.iso.org/iso/19115/-3/msr/2.0',
260
- mrs: 'http://standards.iso.org/iso/19115/-3/mrs/1.0',
261
- mmi: 'http://standards.iso.org/iso/19115/-3/mmi/1.0',
262
- mrl: 'http://standards.iso.org/iso/19115/-3/mrl/2.0',
263
- mdt: 'http://standards.iso.org/iso/19115/-3/mdt/2.0',
264
- mrd: 'http://standards.iso.org/iso/19115/-3/mrd/1.0',
265
- mds: 'http://standards.iso.org/iso/19115/-3/mds/2.0',
266
- mpc: 'http://standards.iso.org/iso/19115/-3/mpc/1.0',
267
- mcc: 'http://standards.iso.org/iso/19115/-3/mcc/1.0',
268
- mac: 'http://standards.iso.org/iso/19115/-3/mac/2.0',
269
- mco: 'http://standards.iso.org/iso/19115/-3/mco/1.0',
270
- mda: 'http://standards.iso.org/iso/19115/-3/mda/1.0',
271
- mex: 'http://standards.iso.org/iso/19115/-3/mex/1.0',
272
- gex: 'http://standards.iso.org/iso/19115/-3/gex/1.0',
273
- gcx: 'http://standards.iso.org/iso/19115/-3/gcx/1.0',
274
- mas: 'http://standards.iso.org/iso/19115/-3/mas/1.0',
275
- mri: 'http://standards.iso.org/iso/19115/-3/mri/1.0',
276
- cit: 'http://standards.iso.org/iso/19115/-3/cit/2.0',
277
- cat: 'http://standards.iso.org/iso/19115/-3/cat/1.0',
278
- lan: 'http://standards.iso.org/iso/19115/-3/lan/1.0',
279
- mrc: 'http://standards.iso.org/iso/19115/-3/mrc/2.0',
280
251
  }
281
252
 
282
253
  /**
@@ -297,13 +268,6 @@ export function addAttribute(
297
268
  return element
298
269
  }
299
270
  }
300
- function getTreeRoot(element: XmlElement): XmlElement {
301
- let root = element
302
- while (root.parent instanceof XmlElement) {
303
- root = root.parent
304
- }
305
- return root
306
- }
307
271
 
308
272
  // stays on the parent element
309
273
  // if the given elements are part of a subtree, will add the root of subtree
@@ -312,26 +276,22 @@ export function appendChildren(
312
276
  ): ChainableFunction<XmlElement, XmlElement> {
313
277
  return (element) => {
314
278
  if (!element) return null
315
- element.children.push(...childrenFns.map((fn) => fn()).map(getTreeRoot))
279
+ element.children.push(
280
+ ...childrenFns
281
+ .map((fn) => fn())
282
+ .map((el) => {
283
+ let root = el
284
+ while (root.parent instanceof XmlElement) {
285
+ root = root.parent
286
+ }
287
+ return root
288
+ })
289
+ )
316
290
  element.children.forEach((el) => (el.parent = element))
317
291
  return element
318
292
  }
319
293
  }
320
294
 
321
- // switch to the tip of the subtree
322
- export function appendChildTree(
323
- childrenFn: ChainableFunction<void, XmlElement>
324
- ): ChainableFunction<XmlElement, XmlElement> {
325
- return (element) => {
326
- if (!element) return null
327
- const treeTip = childrenFn()
328
- const treeRoot = getTreeRoot(treeTip)
329
- element.children.push(treeRoot)
330
- treeRoot.parent = element
331
- return treeTip
332
- }
333
- }
334
-
335
295
  // switches to the child element
336
296
  export function createChild(
337
297
  childName: string
@@ -389,7 +349,6 @@ export function removeAllChildren(): ChainableFunction<XmlElement, XmlElement> {
389
349
  }
390
350
  }
391
351
 
392
- // stays on the same element
393
352
  export function removeChildrenByName(
394
353
  name: string
395
354
  ): ChainableFunction<XmlElement, XmlElement> {
@@ -413,38 +372,11 @@ export function removeChildren(
413
372
  childrenFn: ChainableFunction<XmlElement, Array<XmlElement>>
414
373
  ): ChainableFunction<XmlElement, XmlElement> {
415
374
  return (element) => {
416
- const childrenToRemove = childrenFn(element)
417
- childrenToRemove.forEach((child) => (child.parent = null))
375
+ const children = childrenFn(element)
376
+ children.forEach((child) => (child.parent = null))
418
377
  element.children = element.children.filter(
419
- (child) =>
420
- child instanceof XmlElement && childrenToRemove.indexOf(child) === -1
378
+ (child) => child instanceof XmlElement && children.indexOf(child) === -1
421
379
  )
422
380
  return element
423
381
  }
424
382
  }
425
-
426
- /**
427
- * Renames elements in the XML tree according to the map
428
- * Either specify a full element name like 'gmd:MD_Metadata' or simply a namespace like 'gmd'
429
- * @param rootElement
430
- * @param replaceMap
431
- */
432
- export function renameElements(
433
- rootElement: XmlElement,
434
- replaceMap: Record<string, string>
435
- ) {
436
- function doReplace(element: XmlElement) {
437
- if (element.name in replaceMap) {
438
- element.name = replaceMap[element.name]
439
- } else if (element.name && getNamespace(element.name) in replaceMap) {
440
- element.name = `${
441
- replaceMap[getNamespace(element.name)]
442
- }:${stripNamespace(element.name)}`
443
- }
444
- if (element.children) {
445
- element.children.forEach(doReplace)
446
- }
447
- }
448
- doReplace(rootElement)
449
- return rootElement
450
- }
@@ -14,7 +14,7 @@ import {
14
14
  } from '../../../../../../libs/common/domain/src/lib/model/search'
15
15
  import { map } from 'rxjs/operators'
16
16
  import {
17
- Gn4Converter,
17
+ Gn4MetadataMapper,
18
18
  Gn4SearchResults,
19
19
  } from '../../../../../../libs/api/metadata-converter/src'
20
20
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
@@ -24,7 +24,7 @@ export class Gn4Repository implements RecordsRepositoryInterface {
24
24
  constructor(
25
25
  private gn4SearchApi: SearchApiService,
26
26
  private gn4SearchHelper: ElasticsearchService,
27
- private gn4Mapper: Gn4Converter
27
+ private gn4Mapper: Gn4MetadataMapper
28
28
  ) {}
29
29
 
30
30
  search({
@@ -83,8 +83,8 @@ export interface BaseRecord {
83
83
  title: string
84
84
  abstract: string
85
85
  recordCreated?: Date
86
- recordPublished?: Date
87
86
  recordUpdated: Date
87
+ recordPublished?: Date
88
88
  languages: Array<LanguageCode>
89
89
  kind: RecordKind
90
90
  topics: Array<string> // TODO: handle codelists
@@ -98,12 +98,6 @@ export interface BaseRecord {
98
98
  landingPage?: URL
99
99
  updateFrequency?: UpdateFrequency
100
100
 
101
- // information related to the resource (dataset, service)
102
- contactsForResource: Array<Individual>
103
- resourceCreated?: Date
104
- resourcePublished?: Date
105
- resourceUpdated?: Date
106
-
107
101
  // to add: canonical url
108
102
  // to add: source catalog (??)
109
103
  // to add: is open data ?
@@ -179,7 +173,10 @@ export interface DatasetTemporalExtent {
179
173
 
180
174
  export interface DatasetRecord extends BaseRecord {
181
175
  kind: 'dataset'
176
+ contactsForResource: Array<Individual>
182
177
  status: RecordStatus
178
+ datasetCreated?: Date
179
+ datasetUpdated?: Date
183
180
  lineage: string // Explanation of the origin of this record (e.g: how, why)"
184
181
  distributions: Array<DatasetDistribution>
185
182
  spatialExtents: Array<DatasetSpatialExtent>
@@ -206,5 +203,3 @@ export interface ServiceRecord extends BaseRecord {
206
203
  }
207
204
 
208
205
  export type CatalogRecord = ServiceRecord | DatasetRecord
209
-
210
- export type CatalogRecordKeys = keyof ServiceRecord | keyof DatasetRecord
@@ -1,11 +1,8 @@
1
1
  import { Inject, Injectable, Optional } from '@angular/core'
2
- import {
3
- findConverterForDocument,
4
- Iso19139Converter,
5
- } from '../../../../../../libs/api/metadata-converter/src'
2
+ import { toModel, toXml } from '../../../../../../libs/api/metadata-converter/src'
6
3
  import { Configuration } from '../../../../../../libs/data-access/gn4/src'
7
- import { from, Observable } from 'rxjs'
8
- import { map, switchMap } from 'rxjs/operators'
4
+ import { Observable } from 'rxjs'
5
+ import { map } from 'rxjs/operators'
9
6
  import { HttpClient } from '@angular/common/http'
10
7
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
11
8
  import { EditorFieldsConfig } from '../models/fields.model'
@@ -33,11 +30,7 @@ export class EditorService {
33
30
  Accept: 'application/xml',
34
31
  },
35
32
  })
36
- .pipe(
37
- switchMap((response) =>
38
- findConverterForDocument(response).readRecord(response.toString())
39
- )
40
- )
33
+ .pipe(map((response) => toModel(response.toString())))
41
34
  }
42
35
 
43
36
  // returns the record as it was when saved
@@ -59,21 +52,17 @@ export class EditorService {
59
52
  }
60
53
 
61
54
  // TODO: use the catalog repository instead
62
- // TODO: use converter based on the format of the record before change
63
- return from(new Iso19139Converter().writeRecord(savedRecord)).pipe(
64
- switchMap((recordXml) =>
65
- this.http.put(
66
- `${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`,
67
- recordXml,
68
- {
69
- headers: {
70
- 'Content-Type': 'application/xml',
71
- },
72
- withCredentials: true,
73
- }
74
- )
75
- ),
76
- map(() => savedRecord)
77
- )
55
+ return this.http
56
+ .put(
57
+ `${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`,
58
+ toXml(savedRecord),
59
+ {
60
+ headers: {
61
+ 'Content-Type': 'application/xml',
62
+ },
63
+ withCredentials: true,
64
+ }
65
+ )
66
+ .pipe(map(() => savedRecord))
78
67
  }
79
68
  }
@@ -1,14 +0,0 @@
1
- export class MetadataMapperContext {
2
- }
3
- export class BaseConverter {
4
- constructor(ctx = new MetadataMapperContext()) {
5
- this.ctx = ctx;
6
- }
7
- readRecords(documents) {
8
- return Promise.all(documents.map((doc) => this.readRecord(doc)));
9
- }
10
- writeRecords(records) {
11
- return Promise.all(records.map((doc) => this.writeRecord(doc)));
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9iYXNlLmNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8scUJBQXFCO0NBRWpDO0FBRUQsTUFBTSxPQUFnQixhQUFhO0lBQ2pDLFlBQ1ksTUFBNkIsSUFBSSxxQkFBcUIsRUFBRTtRQUF4RCxRQUFHLEdBQUgsR0FBRyxDQUFxRDtJQUNqRSxDQUFDO0lBSUosV0FBVyxDQUFDLFNBQWM7UUFDeEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFDRCxZQUFZLENBQUMsT0FBd0I7UUFDbkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIERhdGFzZXRSZWNvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcblxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhTWFwcGVyQ29udGV4dCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uP1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnZlcnRlcjxGPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjdHg6IE1ldGFkYXRhTWFwcGVyQ29udGV4dCA9IG5ldyBNZXRhZGF0YU1hcHBlckNvbnRleHQoKVxuICApIHt9XG5cbiAgYWJzdHJhY3QgcmVhZFJlY29yZChkb2N1bWVudDogRik6IFByb21pc2U8Q2F0YWxvZ1JlY29yZD5cbiAgYWJzdHJhY3Qgd3JpdGVSZWNvcmQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByZWZlcmVuY2U/OiBGKTogUHJvbWlzZTxGPlxuICByZWFkUmVjb3Jkcyhkb2N1bWVudHM6IEZbXSk6IFByb21pc2U8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRvY3VtZW50cy5tYXAoKGRvYykgPT4gdGhpcy5yZWFkUmVjb3JkKGRvYykpKVxuICB9XG4gIHdyaXRlUmVjb3JkcyhyZWNvcmRzOiBDYXRhbG9nUmVjb3JkW10pOiBQcm9taXNlPEZbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChyZWNvcmRzLm1hcCgoZG9jKSA9PiB0aGlzLndyaXRlUmVjb3JkKGRvYykpKVxuICB9XG59XG4iXX0=
@@ -1,15 +0,0 @@
1
- import { Iso19139Converter } from './iso19139';
2
- import { Iso191153Converter } from './iso19115-3';
3
- export function findConverterForDocument(document) {
4
- if (document.indexOf('mdb:MD_Metadata') > 0) {
5
- return new Iso191153Converter();
6
- }
7
- else if (document.indexOf('gmd:MD_Metadata') > 0) {
8
- return new Iso19139Converter();
9
- }
10
- else {
11
- throw new Error(`No suitable converter found for the following document:
12
- ${document.substring(0, 400)}...`);
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9maW5kLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRWpELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsUUFBZ0I7SUFFaEIsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzNDLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFBO0tBQ2hDO1NBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xELE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxDQUFBO0tBQy9CO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2xCLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtLQUMvQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJc28xOTEzOUNvbnZlcnRlciB9IGZyb20gJy4vaXNvMTkxMzknXG5pbXBvcnQgeyBCYXNlQ29udmVydGVyIH0gZnJvbSAnLi9iYXNlLmNvbnZlcnRlcidcbmltcG9ydCB7IElzbzE5MTE1M0NvbnZlcnRlciB9IGZyb20gJy4vaXNvMTkxMTUtMydcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChcbiAgZG9jdW1lbnQ6IHN0cmluZ1xuKTogQmFzZUNvbnZlcnRlcjxzdHJpbmc+IHtcbiAgaWYgKGRvY3VtZW50LmluZGV4T2YoJ21kYjpNRF9NZXRhZGF0YScpID4gMCkge1xuICAgIHJldHVybiBuZXcgSXNvMTkxMTUzQ29udmVydGVyKClcbiAgfSBlbHNlIGlmIChkb2N1bWVudC5pbmRleE9mKCdnbWQ6TURfTWV0YWRhdGEnKSA+IDApIHtcbiAgICByZXR1cm4gbmV3IElzbzE5MTM5Q29udmVydGVyKClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1aXRhYmxlIGNvbnZlcnRlciBmb3VuZCBmb3IgdGhlIGZvbGxvd2luZyBkb2N1bWVudDpcbiR7ZG9jdW1lbnQuc3Vic3RyaW5nKDAsIDQwMCl9Li4uYClcbiAgfVxufVxuIl19
@@ -1,52 +0,0 @@
1
- import { Gn4FieldMapper } from './gn4.field.mapper';
2
- import { lastValueFrom } from 'rxjs';
3
- import { OrganizationsServiceInterface } from '../../../../../../libs/common/domain/src/lib/organizations.service.interface';
4
- import { BaseConverter } from '../base.converter';
5
- import { Injectable } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./gn4.field.mapper";
8
- import * as i2 from "../../../../../../libs/common/domain/src/lib/organizations.service.interface";
9
- export class Gn4Converter extends BaseConverter {
10
- constructor(fieldMapper, orgsService) {
11
- super();
12
- this.fieldMapper = fieldMapper;
13
- this.orgsService = orgsService;
14
- }
15
- readRecord(document) {
16
- const { _source } = document;
17
- const emptyRecord = {
18
- kind: 'dataset',
19
- status: null,
20
- lineage: null,
21
- recordUpdated: null,
22
- recordPublished: null,
23
- ownerOrganization: null,
24
- licenses: [],
25
- legalConstraints: [],
26
- securityConstraints: [],
27
- otherConstraints: [],
28
- contacts: [],
29
- contactsForResource: [],
30
- keywords: [],
31
- topics: [],
32
- spatialExtents: [],
33
- temporalExtents: [],
34
- overviews: [],
35
- languages: [],
36
- };
37
- const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
38
- return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
39
- }
40
- writeRecord(record) {
41
- throw new Error('not implemented');
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4Converter, deps: [{ token: i1.Gn4FieldMapper }, { token: i2.OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4Converter, providedIn: 'root' }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4Converter, decorators: [{
47
- type: Injectable,
48
- args: [{
49
- providedIn: 'root',
50
- }]
51
- }], ctorParameters: function () { return [{ type: i1.Gn4FieldMapper }, { type: i2.OrganizationsServiceInterface }]; } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LmNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2duNC9nbjQuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhFQUE4RSxDQUFBO0FBRTVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7O0FBTTFDLE1BQU0sT0FBTyxZQUFhLFNBQVEsYUFBd0I7SUFDeEQsWUFDVSxXQUEyQixFQUMzQixXQUEwQztRQUVsRCxLQUFLLEVBQUUsQ0FBQTtRQUhDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBK0I7SUFHcEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFtQjtRQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFBO1FBQzVCLE1BQU0sV0FBVyxHQUEyQjtZQUMxQyxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLElBQUk7WUFDYixhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUUsSUFBSTtZQUNyQixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1lBQ1osZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsUUFBUSxFQUFFLEVBQUU7WUFDWixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1lBQ1osTUFBTSxFQUFFLEVBQUU7WUFDVixjQUFjLEVBQUUsRUFBRTtZQUNsQixlQUFlLEVBQUUsRUFBRTtZQUNuQixTQUFTLEVBQUUsRUFBRTtZQUNiLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQTtRQUNELE1BQU0sTUFBTSxHQUFrQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUN6RCxXQUFXLENBQ1osQ0FBQTtRQUNELE9BQU8sYUFBYSxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDcEUsQ0FBQTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBcUI7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7OEdBMUNVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR240RmllbGRNYXBwZXIgfSBmcm9tICcuL2duNC5maWVsZC5tYXBwZXInXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE9yZ2FuaXphdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvb3JnYW5pemF0aW9ucy5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IENhdGFsb2dSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBCYXNlQ29udmVydGVyIH0gZnJvbSAnLi4vYmFzZS5jb252ZXJ0ZXInXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEduNFJlY29yZCB9IGZyb20gJy4vdHlwZXMnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHbjRDb252ZXJ0ZXIgZXh0ZW5kcyBCYXNlQ29udmVydGVyPEduNFJlY29yZD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZpZWxkTWFwcGVyOiBHbjRGaWVsZE1hcHBlcixcbiAgICBwcml2YXRlIG9yZ3NTZXJ2aWNlOiBPcmdhbml6YXRpb25zU2VydmljZUludGVyZmFjZVxuICApIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICByZWFkUmVjb3JkKGRvY3VtZW50OiBHbjRSZWNvcmQpOiBQcm9taXNlPENhdGFsb2dSZWNvcmQ+IHtcbiAgICBjb25zdCB7IF9zb3VyY2UgfSA9IGRvY3VtZW50XG4gICAgY29uc3QgZW1wdHlSZWNvcmQ6IFBhcnRpYWw8Q2F0YWxvZ1JlY29yZD4gPSB7XG4gICAgICBraW5kOiAnZGF0YXNldCcsXG4gICAgICBzdGF0dXM6IG51bGwsXG4gICAgICBsaW5lYWdlOiBudWxsLFxuICAgICAgcmVjb3JkVXBkYXRlZDogbnVsbCxcbiAgICAgIHJlY29yZFB1Ymxpc2hlZDogbnVsbCxcbiAgICAgIG93bmVyT3JnYW5pemF0aW9uOiBudWxsLFxuICAgICAgbGljZW5zZXM6IFtdLFxuICAgICAgbGVnYWxDb25zdHJhaW50czogW10sXG4gICAgICBzZWN1cml0eUNvbnN0cmFpbnRzOiBbXSxcbiAgICAgIG90aGVyQ29uc3RyYWludHM6IFtdLFxuICAgICAgY29udGFjdHM6IFtdLFxuICAgICAgY29udGFjdHNGb3JSZXNvdXJjZTogW10sXG4gICAgICBrZXl3b3JkczogW10sXG4gICAgICB0b3BpY3M6IFtdLFxuICAgICAgc3BhdGlhbEV4dGVudHM6IFtdLFxuICAgICAgdGVtcG9yYWxFeHRlbnRzOiBbXSxcbiAgICAgIG92ZXJ2aWV3czogW10sXG4gICAgICBsYW5ndWFnZXM6IFtdLFxuICAgIH1cbiAgICBjb25zdCByZWNvcmQ6IENhdGFsb2dSZWNvcmQgPSBPYmplY3Qua2V5cyhfc291cmNlKS5yZWR1Y2UoXG4gICAgICAocHJldiwgZmllbGROYW1lKSA9PlxuICAgICAgICB0aGlzLmZpZWxkTWFwcGVyLmdldE1hcHBpbmdGbihmaWVsZE5hbWUpKHByZXYsIF9zb3VyY2UpLFxuICAgICAgZW1wdHlSZWNvcmRcbiAgICApXG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLm9yZ3NTZXJ2aWNlLmFkZE9yZ2FuaXphdGlvblRvUmVjb3JkRnJvbVNvdXJjZShfc291cmNlLCByZWNvcmQpXG4gICAgKVxuICB9XG5cbiAgd3JpdGVSZWNvcmQocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogUHJvbWlzZTxHbjRSZWNvcmQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- export * from './gn4.converter';
2
- export * from './atomic-operations';
3
- export * from './types';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9nbjQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nbjQuY29udmVydGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9hdG9taWMtb3BlcmF0aW9ucydcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG4iXX0=
@@ -1,2 +0,0 @@
1
- export * from './iso19115-3.converter';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTExNS0zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2lzbzE5MTE1LTMuY29udmVydGVyJ1xuIl19
@@ -1,123 +0,0 @@
1
- import { Iso19139Converter } from '../iso19139';
2
- import { readContacts, readDistributions, readKind, readLandingPage, readLineage, readOwnerOrganization, readRecordCreated, readRecordPublished, readRecordUpdated, readResourceContacts, readUniqueIdentifier, } from './read-parts';
3
- import { writeContacts, writeContactsForResource, writeDistributions, writeKind, writeLandingPage, writeLineage, writeOwnerOrganization, writeRecordCreated, writeRecordPublished, writeRecordUpdated, writeResourceCreated, writeResourcePublished, writeResourceUpdated, writeSpatialRepresentation, writeStatus, writeUniqueIdentifier, } from './write-parts';
4
- import { renameElements } from '../xml-utils';
5
- export class Iso191153Converter extends Iso19139Converter {
6
- constructor() {
7
- super();
8
- this.readers['uniqueIdentifier'] = readUniqueIdentifier;
9
- this.readers['kind'] = readKind;
10
- this.readers['recordUpdated'] = readRecordUpdated;
11
- this.readers['recordCreated'] = readRecordCreated;
12
- this.readers['recordPublished'] = readRecordPublished;
13
- this.readers['contacts'] = readContacts;
14
- this.readers['contactsForResource'] = readResourceContacts;
15
- this.readers['ownerOrganization'] = readOwnerOrganization;
16
- this.readers['landingPage'] = readLandingPage;
17
- this.readers['lineage'] = readLineage;
18
- this.readers['distributions'] = readDistributions;
19
- this.writers['uniqueIdentifier'] = writeUniqueIdentifier;
20
- this.writers['kind'] = writeKind;
21
- this.writers['recordUpdated'] = writeRecordUpdated;
22
- this.writers['recordCreated'] = writeRecordCreated;
23
- this.writers['recordPublished'] = writeRecordPublished;
24
- this.writers['resourceUpdated'] = writeResourceUpdated;
25
- this.writers['resourceCreated'] = writeResourceCreated;
26
- this.writers['resourcePublished'] = writeResourcePublished;
27
- this.writers['contacts'] = writeContacts;
28
- this.writers['contactsForResource'] = writeContactsForResource;
29
- this.writers['ownerOrganization'] = writeOwnerOrganization;
30
- this.writers['landingPage'] = writeLandingPage;
31
- this.writers['lineage'] = writeLineage;
32
- this.writers['distributions'] = writeDistributions;
33
- this.writers['status'] = writeStatus;
34
- this.writers['spatialRepresentation'] = writeSpatialRepresentation;
35
- }
36
- beforeDocumentCreation(rootEl) {
37
- renameElements(rootEl, {
38
- gmd: 'mdb',
39
- 'gmd:characterEncoding': 'lan:characterEncoding',
40
- 'gmd:MD_CharacterSetCode': 'lan:MD_CharacterSetCode',
41
- 'gmd:MD_DataIdentification': 'mri:MD_DataIdentification',
42
- 'gmd:citation': 'mri:citation',
43
- 'gmd:abstract': 'mri:abstract',
44
- 'gmd:title': 'cit:title',
45
- 'gmd:CI_Citation': 'cit:CI_Citation',
46
- 'gmx:Anchor': 'gcx:Anchor',
47
- // languages
48
- 'gmd:PT_Locale': 'lan:PT_Locale',
49
- 'gmd:languageCode': 'lan:languageCode',
50
- 'gmd:LanguageCode': 'lan:LanguageCode',
51
- // status
52
- 'gmd:status': 'mri:status',
53
- 'gmd:MD_ProgressCode': 'mri:MD_ProgressCode',
54
- // dates
55
- 'gmd:date': 'cit:date',
56
- 'gmd:CI_Date': 'cit:CI_Date',
57
- 'gmd:dateType': 'cit:dateType',
58
- 'gmd:CI_DateTypeCode': 'cit:CI_DateTypeCode',
59
- // contacts
60
- 'gmd:CI_Responsibility': 'cit:CI_Responsibility',
61
- 'gmd:role': 'cit:role',
62
- 'gmd:CI_RoleCode': 'cit:CI_RoleCode',
63
- // keywords
64
- 'gmd:descriptiveKeywords': 'mri:descriptiveKeywords',
65
- 'gmd:MD_Keywords': 'mri:MD_Keywords',
66
- 'gmd:type': 'mri:type',
67
- 'gmd:MD_KeywordTypeCode': 'mri:MD_KeywordTypeCode',
68
- 'gmd:thesaurusName': 'mri:thesaurusName',
69
- 'gmd:keyword': 'mri:keyword',
70
- 'gmd:identifier': 'cit:identifier',
71
- 'gmd:MD_Identifier': 'mcc:MD_Identifier',
72
- 'gmd:code': 'mcc:code',
73
- // distributions
74
- 'gmd:MD_Distribution': 'mrd:MD_Distribution',
75
- 'gmd:transferOptions': 'mrd:transferOptions',
76
- 'gmd:MD_DigitalTransferOptions': 'mrd:MD_DigitalTransferOptions',
77
- 'gmd:onLine': 'mrd:onLine',
78
- 'gmd:distributionFormat': 'mrd:distributionFormat',
79
- 'gmd:MD_Format': 'mrd:MD_Format',
80
- 'gmd:CI_OnlineResource': 'cit:CI_OnlineResource',
81
- 'gmd:linkage': 'cit:linkage',
82
- 'gmd:name': 'cit:name',
83
- 'gmd:description': 'cit:description',
84
- 'gmd:CI_OnLineFunctionCode': 'cit:CI_OnLineFunctionCode',
85
- 'gmd:function': 'cit:function',
86
- 'gmd:protocol': 'cit:protocol',
87
- // topic
88
- 'gmd:topicCategory': 'mri:topicCategory',
89
- 'gmd:MD_TopicCategoryCode': 'mri:MD_TopicCategoryCode',
90
- // update frequency
91
- 'gmd:resourceMaintenance': 'mri:resourceMaintenance',
92
- 'gmd:MD_MaintenanceInformation': 'mmi:MD_MaintenanceInformation',
93
- 'gmd:userDefinedMaintenanceFrequency': 'mmi:userDefinedMaintenanceFrequency',
94
- 'gts:TM_PeriodDuration': 'gco:TM_PeriodDuration',
95
- // constraints
96
- 'gmd:resourceConstraints': 'mri:resourceConstraints',
97
- 'gmd:MD_Constraints': 'mco:MD_Constraints',
98
- 'gmd:MD_LegalConstraints': 'mco:MD_LegalConstraints',
99
- 'gmd:MD_SecurityConstraints': 'mco:MD_SecurityConstraints',
100
- 'gmd:useLimitation': 'mco:useLimitation',
101
- 'gmd:useConstraints': 'mco:useConstraints',
102
- 'gmd:accessConstraints': 'mco:accessConstraints',
103
- 'gmd:otherConstraints': 'mco:otherConstraints',
104
- 'gmd:MD_RestrictionCode': 'mco:MD_RestrictionCode',
105
- 'gmd:classification': 'mco:classification',
106
- 'gmd:MD_ClassificationCode': 'mco:MD_ClassificationCode',
107
- // overviews
108
- 'gmd:graphicOverview': 'mri:graphicOverview',
109
- 'gmd:MD_BrowseGraphic': 'mcc:MD_BrowseGraphic',
110
- 'gmd:fileName': 'mcc:fileName',
111
- 'gmd:fileDescription': 'mcc:fileDescription',
112
- // no more URL elements
113
- 'gmd:URL': 'gco:CharacterString',
114
- });
115
- }
116
- async writeRecord(record, reference) {
117
- let result = await super.writeRecord(record, reference);
118
- // fix gco namespace definition (changes between iso19139 and iso19115-3
119
- result = result.replace('"http://www.isotc211.org/2005/gco"', '"http://standards.iso.org/iso/19115/-3/gco/1.0"');
120
- return result;
121
- }
122
- }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvMTkxMTUtMy5jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTExNS0zL2lzbzE5MTE1LTMuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMvQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsZUFBZSxFQUNmLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQ0wsYUFBYSxFQUNiLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGdCQUFnQixFQUNoQixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gscUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFHN0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQUN2RDtRQUNFLEtBQUssRUFBRSxDQUFBO1FBRVAsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG9CQUFvQixDQUFBO1FBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFBO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsaUJBQWlCLENBQUE7UUFDakQsSUFBSSxDQUFD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QW9CLEVBQUUsb0JBQW9CO1lBQzFDLHVCQUF1QixFQUFFLHVCQUF1QjtZQUNoRCxzQkFBc0IsRUFBRSxzQkFBc0I7WUFDOUMsd0JBQXdCLEVBQUUsd0JBQXdCO1lBQ2xELG9CQUFvQixFQUFFLG9CQUFvQjtZQUMxQywyQkFBMkIsRUFBRSwyQkFBMkI7WUFFeEQsWUFBWTtZQUNaLHFCQUFxQixFQUFFLHFCQUFxQjtZQUM1QyxzQkFBc0IsRUFBRSxzQkFBc0I7WUFDOUMsY0FBYyxFQUFFLGNBQWM7WUFDOUIscUJBQXFCLEVBQUUscUJBQXFCO1lBRTVDLHVCQUF1QjtZQUN2QixTQUFTLEVBQUUscUJBQXFCO1NBQ2pDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNmLE1BQXFCLEVBQ3JCLFNBQWtCO1FBRWxCLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDdkQsd0VBQXdFO1FBQ3hFLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNyQixvQ0FBb0MsRUFDcEMsaURBQWlELENBQ2xELENBQUE7UUFDRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElzbzE5MTM5Q29udmVydGVyIH0gZnJvbSAnLi4vaXNvMTkxMzknXG5pbXBvcnQge1xuICByZWFkQ29udGFjdHMsXG4gIHJlYWREaXN0cmlidXRpb25zLFxuICByZWFkS2luZCxcbiAgcmVhZExhbmRpbmdQYWdlLFxuICByZWFkTGluZWFnZSxcbiAgcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICByZWFkUmVjb3JkQ3JlYXRlZCxcbiAgcmVhZFJlY29yZFB1Ymxpc2hlZCxcbiAgcmVhZFJlY29yZFVwZGF0ZWQsXG4gIHJlYWRSZXNvdXJjZUNvbnRhY3RzLFxuICByZWFkVW5pcXVlSWRlbnRpZmllcixcbn0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHtcbiAgd3JpdGVDb250YWN0cyxcbiAgd3JpdGVDb250YWN0c0ZvclJlc291cmNlLFxuICB3cml0ZURpc3RyaWJ1dGlvbnMsXG4gIHdyaXRlS2luZCxcbiAgd3JpdGVMYW5kaW5nUGFnZSxcbiAgd3JpdGVMaW5lYWdlLFxuICB3cml0ZU93bmVyT3JnYW5pemF0aW9uLFxuICB3cml0ZVJlY29yZENyZWF0ZWQsXG4gIHdyaXRlUmVjb3JkUHVibGlzaGVkLFxuICB3cml0ZVJlY29yZFVwZGF0ZWQsXG4gIHdyaXRlUmVzb3VyY2VDcmVhdGVkLFxuICB3cml0ZVJlc291cmNlUHVibGlzaGVkLFxuICB3cml0ZVJlc291cmNlVXBkYXRlZCxcbiAgd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24sXG4gIHdyaXRlU3RhdHVzLFxuICB3cml0ZVVuaXF1ZUlkZW50aWZpZXIsXG59IGZyb20gJy4vd3JpdGUtcGFydHMnXG5pbXBvcnQgeyBYbWxFbGVtZW50IH0gZnJvbSAnQHJncm92ZS9wYXJzZS14bWwnXG5pbXBvcnQgeyByZW5hbWVFbGVtZW50cyB9IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7IENhdGFsb2dSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5cbmV4cG9ydCBjbGFzcyBJc28xOTExNTNDb252ZXJ0ZXIgZXh0ZW5kcyBJc28xOTEzOUNvbnZlcnRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMucmVhZGVyc1sndW5pcXVlSWRlbnRpZmllciddID0gcmVhZFVuaXF1ZUlkZW50aWZpZXJcbiAgICB0aGlzLnJlYWRlcnNbJ2tpbmQnXSA9IHJlYWRLaW5kXG4gICAgdGhpcy5yZWFkZXJzWydyZWNvcmRVcGRhdGVkJ10gPSByZWFkUmVjb3JkVXBkYXRlZFxuICAgIHRoaXMucmVhZGVyc1sncmVjb3JkQ3JlYXRlZCddID0gcmVhZFJlY29yZENyZWF0ZWRcbiAgICB0aGlzLnJlYWRlcnNbJ3JlY29yZFB1Ymxpc2hlZCddID0gcmVhZFJlY29yZFB1Ymxpc2hlZFxuICAgIHRoaXMucmVhZGVyc1snY29udGFjdHMnXSA9IHJlYWRDb250YWN0c1xuICAgIHRoaXMucmVhZGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddID0gcmVhZFJlc291cmNlQ29udGFjdHNcbiAgICB0aGlzLnJlYWRlcnNbJ293bmVyT3JnYW5pemF0aW9uJ10gPSByZWFkT3duZXJPcmdhbml6YXRpb25cbiAgICB0aGlzLnJlYWRlcnNbJ2xhbmRpbmdQYWdlJ10gPSByZWFkTGFuZGluZ1BhZ2VcbiAgICB0aGlzLnJlYWRlcnNbJ2xpbmVhZ2UnXSA9IHJlYWRMaW5lYWdlXG4gICAgdGhpcy5yZWFkZXJzWydkaXN0cmlidXRpb25zJ10gPSByZWFkRGlzdHJpYnV0aW9uc1xuXG4gICAgdGhpcy53cml0ZXJzWyd1bmlxdWVJZGVudGlmaWVyJ10gPSB3cml0ZVVuaXF1ZUlkZW50aWZpZXJcbiAgICB0aGlzLndyaXRlcnNbJ2tpbmQnXSA9IHdyaXRlS2luZFxuICAgIHRoaXMud3JpdGVyc1sncmVjb3JkVXBkYXRlZCddID0gd3JpdGVSZWNvcmRVcGRhdGVkXG4gICAgdGhpcy53cml0ZXJzWydyZWNvcmRDcmVhdGVkJ10gPSB3cml0ZVJlY29yZENyZWF0ZWRcbiAgICB0aGlzLndyaXRlcnNbJ3JlY29yZFB1Ymxpc2hlZCddID0gd3JpdGVSZWNvcmRQdWJsaXNoZWRcbiAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlVXBkYXRlZCddID0gd3JpdGVSZXNvdXJjZVVwZGF0ZWRcbiAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlQ3JlYXRlZCddID0gd3JpdGVSZXNvdXJjZUNyZWF0ZWRcbiAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlUHVibGlzaGVkJ10gPSB3cml0ZVJlc291cmNlUHVibGlzaGVkXG4gICAgdGhpcy53cml0ZXJzWydjb250YWN0cyddID0gd3JpdGVDb250YWN0c1xuICAgIHRoaXMud3JpdGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddID0gd3JpdGVDb250YWN0c0ZvclJlc291cmNlXG4gICAgdGhpcy53cml0ZXJzWydvd25lck9yZ2FuaXphdGlvbiddID0gd3JpdGVPd25lck9yZ2FuaXphdGlvblxuICAgIHRoaXMud3JpdGVyc1snbGFuZGluZ1BhZ2UnXSA9IHdyaXRlTGFuZGluZ1BhZ2VcbiAgICB0aGlzLndyaXRlcnNbJ2xpbmVhZ2UnXSA9IHdyaXRlTGluZWFnZVxuICAgIHRoaXMud3JpdGVyc1snZGlzdHJpYnV0aW9ucyddID0gd3JpdGVEaXN0cmlidXRpb25zXG4gICAgdGhpcy53cml0ZXJzWydzdGF0dXMnXSA9IHdyaXRlU3RhdHVzXG4gICAgdGhpcy53cml0ZXJzWydzcGF0aWFsUmVwcmVzZW50YXRpb24nXSA9IHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uXG4gIH1cblxuICBiZWZvcmVEb2N1bWVudENyZWF0aW9uKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAgIHJlbmFtZUVsZW1lbnRzKHJvb3RFbCwge1xuICAgICAgZ21kOiAnbWRiJyxcbiAgICAgICdnbWQ6Y2hhcmFjdGVyRW5jb2RpbmcnOiAnbGFuOmNoYXJhY3RlckVuY29kaW5nJyxcbiAgICAgICdnbWQ6TURfQ2hhcmFjdGVyU2V0Q29kZSc6ICdsYW46TURfQ2hhcmFjdGVyU2V0Q29kZScsXG4gICAgICAnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbic6ICdtcmk6TURfRGF0YUlkZW50aWZpY2F0aW9uJyxcbiAgICAgICdnbWQ6Y2l0YXRpb24nOiAnbXJpOmNpdGF0aW9uJyxcbiAgICAgICdnbWQ6YWJzdHJhY3QnOiAnbXJpOmFic3RyYWN0JyxcbiAgICAgICdnbWQ6dGl0bGUnOiAnY2l0OnRpdGxlJyxcbiAgICAgICdnbWQ6Q0lfQ2l0YXRpb24nOiAnY2l0OkNJX0NpdGF0aW9uJyxcbiAgICAgICdnbXg6QW5jaG9yJzogJ2djeDpBbmNob3InLFxuXG4gICAgICAvLyBsYW5ndWFnZXNcbiAgICAgICdnbWQ6UFRfTG9jYWxlJzogJ2xhbjpQVF9Mb2NhbGUnLFxuICAgICAgJ2dtZDpsYW5ndWFnZUNvZGUnOiAnbGFuOmxhbmd1YWdlQ29kZScsXG4gICAgICAnZ21kOkxhbmd1YWdlQ29kZSc6ICdsYW46TGFuZ3VhZ2VDb2RlJyxcblxuICAgICAgLy8gc3RhdHVzXG4gICAgICAnZ21kOnN0YXR1cyc6ICdtcmk6c3RhdHVzJyxcbiAgICAgICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJzogJ21yaTpNRF9Qcm9ncmVzc0NvZGUnLFxuXG4gICAgICAvLyBkYXRlc1xuICAgICAgJ2dtZDpkYXRlJzogJ2NpdDpkYXRlJyxcbiAgICAgICdnbWQ6Q0lfRGF0ZSc6ICdjaXQ6Q0lfRGF0ZScsXG4gICAgICAnZ21kOmRhdGVUeXBlJzogJ2NpdDpkYXRlVHlwZScsXG4gICAgICAnZ21kOkNJX0RhdGVUeXBlQ29kZSc6ICdjaXQ6Q0lfRGF0ZVR5cGVDb2RlJyxcblxuICAgICAgLy8gY29udGFjdHNcbiAgICAgICdnbWQ6Q0lfUmVzcG9uc2liaWxpdHknOiAnY2l0OkNJX1Jlc3BvbnNpYmlsaXR5JyxcbiAgICAgICdnbWQ6cm9sZSc6ICdjaXQ6cm9sZScsXG4gICAgICAnZ21kOkNJX1JvbGVDb2RlJzogJ2NpdDpDSV9Sb2xlQ29kZScsXG5cbiAgICAgIC8vIGtleXdvcmRzXG4gICAgICAnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnOiAnbXJpOmRlc2NyaXB0aXZlS2V5d29yZHMnLFxuICAgICAgJ2dtZDpNRF9LZXl3b3Jkcyc6ICdtcmk6TURfS2V5d29yZHMnLFxuICAgICAgJ2dtZDp0eXBlJzogJ21yaTp0eXBlJyxcbiAgICAgICdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJzogJ21yaTpNRF9LZXl3b3JkVHlwZUNvZGUnLFxuICAgICAgJ2dtZDp0aGVzYXVydXNOYW1lJzogJ21yaTp0aGVzYXVydXNOYW1lJyxcbiAgICAgICdnbWQ6a2V5d29yZCc6ICdtcmk6a2V5d29yZCcsXG4gICAgICAnZ21kOmlkZW50aWZpZXInOiAnY2l0OmlkZW50aWZpZXInLFxuICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJzogJ21jYzpNRF9JZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6Y29kZSc6ICdtY2M6Y29kZScsXG5cbiAgICAgIC8vIGRpc3RyaWJ1dGlvbnNcbiAgICAgICdnbWQ6TURfRGlzdHJpYnV0aW9uJzogJ21yZDpNRF9EaXN0cmlidXRpb24nLFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnOiAnbXJkOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnOiAnbXJkOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnOiAnbXJkOm9uTGluZScsXG4gICAgICAnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCc6ICdtcmQ6ZGlzdHJpYnV0aW9uRm9ybWF0JyxcbiAgICAgICdnbWQ6TURfRm9ybWF0JzogJ21yZDpNRF9Gb3JtYXQnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSc6ICdjaXQ6Q0lfT25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpsaW5rYWdlJzogJ2NpdDpsaW5rYWdlJyxcbiAgICAgICdnbWQ6bmFtZSc6ICdjaXQ6bmFtZScsXG4gICAgICAnZ21kOmRlc2NyaXB0aW9uJzogJ2NpdDpkZXNjcmlwdGlvbicsXG4gICAgICAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZSc6ICdjaXQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyxcbiAgICAgICdnbWQ6ZnVuY3Rpb24nOiAnY2l0OmZ1bmN0aW9uJyxcbiAgICAgICdnbWQ6cHJvdG9jb2wnOiAnY2l0OnByb3RvY29sJyxcblxuICAgICAgLy8gdG9waWNcbiAgICAgICdnbWQ6dG9waWNDYXRlZ29yeSc6ICdtcmk6dG9waWNDYXRlZ29yeScsXG4gICAgICAnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJzogJ21yaTpNRF9Ub3BpY0NhdGVnb3J5Q29kZScsXG5cbiAgICAgIC8vIHVwZGF0ZSBmcmVxdWVuY3lcbiAgICAgICdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZSc6ICdtcmk6cmVzb3VyY2VNYWludGVuYW5jZScsXG4gICAgICAnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nOiAnbW1pOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nLFxuICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JzpcbiAgICAgICAgJ21taTp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICdndHM6VE1fUGVyaW9kRHVyYXRpb24nOiAnZ2NvOlRNX1BlcmlvZER1cmF0aW9uJyxcblxuICAgICAgLy8gY29uc3RyYWludHNcbiAgICAgICdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cyc6ICdtcmk6cmVzb3VyY2VDb25zdHJhaW50cycsXG4gICAgICAnZ21kOk1EX0NvbnN0cmFpbnRzJzogJ21jbzpNRF9Db25zdHJhaW50cycsXG4gICAgICAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnOiAnbWNvOk1EX0xlZ2FsQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJzogJ21jbzpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJyxcbiAgICAgICdnbWQ6dXNlTGltaXRhdGlvbic6ICdtY286dXNlTGltaXRhdGlvbicsXG4gICAgICAnZ21kOnVzZUNvbnN0cmFpbnRzJzogJ21jbzp1c2VDb25zdHJhaW50cycsXG4gICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJzogJ21jbzphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAnZ21kOm90aGVyQ29uc3RyYWludHMnOiAnbWNvOm90aGVyQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnOiAnbWNvOk1EX1Jlc3RyaWN0aW9uQ29kZScsXG4gICAgICAnZ21kOmNsYXNzaWZpY2F0aW9uJzogJ21jbzpjbGFzc2lmaWNhdGlvbicsXG4gICAgICAnZ21kOk1EX0NsYXNzaWZpY2F0aW9uQ29kZSc6ICdtY286TURfQ2xhc3NpZmljYXRpb25Db2RlJyxcblxuICAgICAgLy8gb3ZlcnZpZXdzXG4gICAgICAnZ21kOmdyYXBoaWNPdmVydmlldyc6ICdtcmk6Z3JhcGhpY092ZXJ2aWV3JyxcbiAgICAgICdnbWQ6TURfQnJvd3NlR3JhcGhpYyc6ICdtY2M6TURfQnJvd3NlR3JhcGhpYycsXG4gICAgICAnZ21kOmZpbGVOYW1lJzogJ21jYzpmaWxlTmFtZScsXG4gICAgICAnZ21kOmZpbGVEZXNjcmlwdGlvbic6ICdtY2M6ZmlsZURlc2NyaXB0aW9uJyxcblxuICAgICAgLy8gbm8gbW9yZSBVUkwgZWxlbWVudHNcbiAgICAgICdnbWQ6VVJMJzogJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLFxuICAgIH0pXG4gIH1cblxuICBhc3luYyB3cml0ZVJlY29yZChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLndyaXRlUmVjb3JkKHJlY29yZCwgcmVmZXJlbmNlKVxuICAgIC8vIGZpeCBnY28gbmFtZXNwYWNlIGRlZmluaXRpb24gKGNoYW5nZXMgYmV0d2VlbiBpc28xOTEzOSBhbmQgaXNvMTkxMTUtM1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKFxuICAgICAgJ1wiaHR0cDovL3d3dy5pc290YzIxMS5vcmcvMjAwNS9nY29cIicsXG4gICAgICAnXCJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTE1Ly0zL2djby8xLjBcIidcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG4iXX0=