@piveau/piveau-hub-ui-modules 4.4.21 → 4.4.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data-provider-interface/DataProviderInterface.vue.mjs.map +1 -1
- package/dist/data-provider-interface/DataProviderInterface.vue2.mjs +28 -19
- package/dist/data-provider-interface/DataProviderInterface.vue2.mjs.map +1 -1
- package/dist/data-provider-interface/components/UniqueIdentifierInput.vue.mjs +44 -38
- package/dist/data-provider-interface/components/UniqueIdentifierInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/composables/useDpiContext.d.ts +5 -0
- package/dist/data-provider-interface/composables/useDpiContext.mjs.map +1 -1
- package/dist/data-provider-interface/composables/useDpiEditMode.mjs +33 -22
- package/dist/data-provider-interface/composables/useDpiEditMode.mjs.map +1 -1
- package/dist/data-provider-interface/utils/inputConverter.mjs +65 -64
- package/dist/data-provider-interface/utils/inputConverter.mjs.map +1 -1
- package/dist/piveau-hub-ui-modules.css +1 -1
- package/package.json +1 -1
|
@@ -1,73 +1,74 @@
|
|
|
1
|
-
import
|
|
1
|
+
import m from "./general-helper.mjs";
|
|
2
2
|
import "lodash-es";
|
|
3
|
-
async function
|
|
4
|
-
let
|
|
5
|
-
e === "datasets" ? c = t.match(null, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://www.w3.org/ns/dcat#Dataset", null) : c = t.match(null, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://www.w3.org/ns/dcat#Catalog", null), o =
|
|
6
|
-
for (let
|
|
7
|
-
|
|
8
|
-
for (let
|
|
9
|
-
i[e][
|
|
3
|
+
async function I(i, e, t, n) {
|
|
4
|
+
let a, o, c;
|
|
5
|
+
e === "datasets" ? c = t.match(null, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://www.w3.org/ns/dcat#Dataset", null) : c = t.match(null, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "http://www.w3.org/ns/dcat#Catalog", null), o = m.getPagePrefixedNames(e, n.inputDefinition, n.pageConent), i[e] = {};
|
|
6
|
+
for (let v of c) {
|
|
7
|
+
a = v.subject.value;
|
|
8
|
+
for (let b in o[e])
|
|
9
|
+
i[e][b] = {}, g(e, i[e][b], a, t, o[e][b], n);
|
|
10
10
|
}
|
|
11
11
|
if (e === "datasets") {
|
|
12
|
-
const
|
|
13
|
-
o =
|
|
14
|
-
for (let
|
|
15
|
-
const
|
|
16
|
-
for (let
|
|
17
|
-
|
|
18
|
-
i.datasets.Distributions.distributionList.push(
|
|
12
|
+
const v = t.match(a, "http://www.w3.org/ns/dcat#distribution", null, null);
|
|
13
|
+
o = m.getPagePrefixedNames("distributions", n.inputDefinition, n.pageConent), i.datasets.Distributions.distributionList = [];
|
|
14
|
+
for (let b of v) {
|
|
15
|
+
const l = {}, u = b.object.value;
|
|
16
|
+
for (let s in o.distributions)
|
|
17
|
+
l[s] = {}, g("distributions", l[s], u, t, o.distributions[s], n);
|
|
18
|
+
i.datasets.Distributions.distributionList.push(l);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function g(i, e, t, n, a, o) {
|
|
23
|
+
var v;
|
|
23
24
|
const c = o.formatTypes;
|
|
24
|
-
for (let
|
|
25
|
-
const l =
|
|
26
|
-
let u = n.match(t,
|
|
25
|
+
for (let b = 0; b < a.length; b += 1) {
|
|
26
|
+
const l = a[b];
|
|
27
|
+
let u = n.match(t, m.addNamespace(l, o), null, null);
|
|
27
28
|
if (c.singularString[i].includes(l))
|
|
28
|
-
|
|
29
|
+
N(u, e, l);
|
|
29
30
|
else if (c.singularURI[i].includes(l))
|
|
30
|
-
|
|
31
|
+
S(u, e, l, o);
|
|
31
32
|
else if (c.multipleURI[i].includes(l))
|
|
32
33
|
D(u, e, l, i, o);
|
|
33
34
|
else if (c.typedStrings[i].includes(l))
|
|
34
|
-
|
|
35
|
+
T(u, e, l);
|
|
35
36
|
else if (c.multilingualStrings[i].includes(l))
|
|
36
|
-
|
|
37
|
+
p(u, e, l);
|
|
37
38
|
else if (c.conditionalProperties[i].includes(l)) {
|
|
38
39
|
if (l === "dct:publisher" || l === "dct:license") {
|
|
39
40
|
for (let s of u)
|
|
40
41
|
if (s.object.termType === "NamedNode")
|
|
41
42
|
e[l] = { name: s.object.value, resource: s.object.value };
|
|
42
43
|
else if (s.object.termType === "BlankNode") {
|
|
43
|
-
const
|
|
44
|
+
const f = m.getNestedKeys(n.match(s.object, null, null, null), o).filter((r) => r !== "dct:title"), d = {};
|
|
44
45
|
if (l === "dct:license") {
|
|
45
|
-
const
|
|
46
|
-
for (let
|
|
47
|
-
d["dct:title"] =
|
|
46
|
+
const r = n.match(s.object, m.addNamespace("dct:title", o), null, null);
|
|
47
|
+
for (let j of r)
|
|
48
|
+
d["dct:title"] = j.object.value;
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
g(i, d, s.object, n, f, o), e[l] = d;
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
} else if (c.groupedProperties[i].includes(l)) {
|
|
53
54
|
if (u.size > 0) {
|
|
54
55
|
e[l] = [];
|
|
55
56
|
for (let s of u) {
|
|
56
|
-
let
|
|
57
|
+
let f = {};
|
|
57
58
|
if (l === "skos:notation")
|
|
58
|
-
s.object.value && (
|
|
59
|
+
s.object.value && (f["@value"] = s.object.value), s.object.datatypeString && (f["@type"] = { name: s.object.datatypeString, resource: s.object.datatypeString });
|
|
59
60
|
else {
|
|
60
|
-
s.object.termType === "NamedNode" && (
|
|
61
|
-
const d =
|
|
62
|
-
|
|
61
|
+
s.object.termType === "NamedNode" && (f["@id"] = s.object.value);
|
|
62
|
+
const d = m.getNestedKeys(n.match(s.object, null, null, null), o);
|
|
63
|
+
g(i, f, s.object, n, d, o);
|
|
63
64
|
}
|
|
64
|
-
l === "dct:creator" || l === "vcard:hasAddress" || l === "skos:notation" || l === "spdx:checksum" ? e[l] =
|
|
65
|
+
l === "dct:creator" || l === "vcard:hasAddress" || l === "skos:notation" || l === "spdx:checksum" ? e[l] = f : e[l].push(f);
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
} else if (l === "dcat:temporalResolution") {
|
|
68
69
|
if (u.size > 0) {
|
|
69
70
|
e[l] = {};
|
|
70
|
-
const s = ["Y", "M", "D", "H", "M", "S"],
|
|
71
|
+
const s = ["Y", "M", "D", "H", "M", "S"], f = {
|
|
71
72
|
0: "Year",
|
|
72
73
|
1: "Month",
|
|
73
74
|
2: "Day",
|
|
@@ -76,17 +77,17 @@ function j(i, e, t, n, r, o) {
|
|
|
76
77
|
5: "Second"
|
|
77
78
|
};
|
|
78
79
|
let d;
|
|
79
|
-
for (let
|
|
80
|
-
d =
|
|
80
|
+
for (let r of u)
|
|
81
|
+
d = r.object.value;
|
|
81
82
|
if (d.startsWith("P"))
|
|
82
|
-
for (let
|
|
83
|
-
const
|
|
84
|
-
d = d.substring(
|
|
83
|
+
for (let r = 0; r < s.length; r += 1) {
|
|
84
|
+
const j = d.indexOf(s[r]), h = d.substring(0, j), w = ((v = h == null ? void 0 : h.match(/\d+/g)) == null ? void 0 : v[0]) ?? "";
|
|
85
|
+
d = d.substring(j), e[l][f[r]] = w;
|
|
85
86
|
}
|
|
86
87
|
else {
|
|
87
|
-
e[l][
|
|
88
|
-
const
|
|
89
|
-
e[l][
|
|
88
|
+
e[l][f[0]] = 0, e[l][f[1]] = 0, e[l][f[2]] = 0;
|
|
89
|
+
const r = new Date(d * 1e3).toISOString().slice(11, 19);
|
|
90
|
+
e[l][f[3]] = r.slice(0, 2), e[l][f[4]] = r.slice(3, 5), e[l][f[5]] = r.slice(7, 9);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
} else if (l === "dct:identifier") {
|
|
@@ -98,11 +99,11 @@ function j(i, e, t, n, r, o) {
|
|
|
98
99
|
} else if (l === "dct:rights") {
|
|
99
100
|
if (u.size > 0) {
|
|
100
101
|
let s;
|
|
101
|
-
for (let
|
|
102
|
-
const d =
|
|
103
|
-
s = n.match(d,
|
|
104
|
-
for (let
|
|
105
|
-
|
|
102
|
+
for (let f of u) {
|
|
103
|
+
const d = f.object;
|
|
104
|
+
s = n.match(d, m.addNamespace("rdfs:label", o), null, null);
|
|
105
|
+
for (let r of s)
|
|
106
|
+
m.isUrl(r.object.value) ? e[l] = { "@type": "url", "rdfs:value": r.object.value } : e[l] = { "@type": "text", "rdfs:value": r.object.value };
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
} else if (l === "datasetID" && i !== "datatsets")
|
|
@@ -114,36 +115,36 @@ function j(i, e, t, n, r, o) {
|
|
|
114
115
|
} else if (l === "rdf:type" && u.size > 0) {
|
|
115
116
|
e[l] = "";
|
|
116
117
|
for (let s of u)
|
|
117
|
-
e[l] =
|
|
118
|
+
e[l] = m.removeNamespace(s.object.value, o);
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
|
-
function
|
|
122
|
+
function N(i, e, t) {
|
|
122
123
|
if (i.size > 0) {
|
|
123
124
|
e[t] = "";
|
|
124
125
|
for (let n of i)
|
|
125
126
|
e[t] = n.object.value;
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
|
-
function
|
|
129
|
-
const
|
|
129
|
+
function S(i, e, t, n) {
|
|
130
|
+
const a = n.formatTypes;
|
|
130
131
|
if (i.size > 0) {
|
|
131
132
|
e[t] = "";
|
|
132
133
|
for (let o of i) {
|
|
133
134
|
const c = o.object.value;
|
|
134
|
-
c.startsWith("mailto:") ? e[t] = c.replace("mailto:", "") :
|
|
135
|
+
c.startsWith("mailto:") ? e[t] = c.replace("mailto:", "") : a.URIformat.voc.includes(t) ? e[t] = { name: c, resource: c } : a.URIformat.string.includes(t) ? e[t] = c : e[t] = { "@id": c };
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
|
-
function D(i, e, t, n,
|
|
139
|
-
const o =
|
|
139
|
+
function D(i, e, t, n, a) {
|
|
140
|
+
const o = a.formatTypes;
|
|
140
141
|
if (i.size > 0) {
|
|
141
142
|
e[t] = [];
|
|
142
143
|
for (let c of i)
|
|
143
144
|
o.URIformat.voc.includes(t) ? e[t].push({ name: c.object.value, resource: c.object.value }) : o.URIformat.string.includes(t) ? e[t].push(c.object.value) : e[t].push({ "@id": c.object.value });
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
|
-
function
|
|
147
|
+
function T(i, e, t) {
|
|
147
148
|
if (i.size > 0) {
|
|
148
149
|
e[t] = "";
|
|
149
150
|
for (let n of i)
|
|
@@ -152,25 +153,25 @@ function N(i, e, t) {
|
|
|
152
153
|
else if (t === "dcat:startDate" || t === "dcat:endDate")
|
|
153
154
|
e[t] = n.object.value;
|
|
154
155
|
else {
|
|
155
|
-
let
|
|
156
|
-
n.object.value.includes("T") ?
|
|
156
|
+
let a;
|
|
157
|
+
n.object.value.includes("T") ? a = "dateTime" : a = "date", e[t] = { "@type": a, "@value": n.object.value };
|
|
157
158
|
}
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
|
-
function
|
|
161
|
+
function p(i, e, t) {
|
|
161
162
|
if (i.size > 0) {
|
|
162
163
|
e[t] = [];
|
|
163
164
|
for (let n of i)
|
|
164
165
|
if (!n.object.language.includes("-")) {
|
|
165
|
-
const
|
|
166
|
-
|
|
166
|
+
const a = {};
|
|
167
|
+
a["@value"] = n.object.value, a["@language"] = n.object.language, e[t].push(a);
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
170
|
}
|
|
170
|
-
const
|
|
171
|
-
convertToInput:
|
|
171
|
+
const R = {
|
|
172
|
+
convertToInput: I
|
|
172
173
|
};
|
|
173
174
|
export {
|
|
174
|
-
|
|
175
|
+
R as default
|
|
175
176
|
};
|
|
176
177
|
//# sourceMappingURL=inputConverter.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputConverter.mjs","sources":["../../../lib/data-provider-interface/utils/inputConverter.js"],"sourcesContent":["import generalHelper from \"./general-helper\";\nimport { has, isEmpty } from 'lodash';\n\n\n/**\n * Converts given data for given property into input form format\n * @param {*} state state from store\n * @param {*} property Property to convert data for (datasets/catalogues)\n * @param {*} data Linked data within a dataset\n */\nasync function convertToInput(state, property, data, dpiConfig ) {\n\n let generalID;\n let namespaceKeys;\n let propertyQuads;\n\n if (property === 'datasets') {\n propertyQuads = data.match(null, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.w3.org/ns/dcat#Dataset', null);\n } else {\n propertyQuads = data.match(null, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.w3.org/ns/dcat#Catalog', null);\n }\n\n // extract data for datasets/catalogues\n namespaceKeys = generalHelper.getPagePrefixedNames(property, dpiConfig.inputDefinition, dpiConfig.pageConent);\n state[property] = {};\n for (let el of propertyQuads) {\n // there should be only one dataset id\n generalID = el.subject.value;\n\n for (let pageName in namespaceKeys[property]) {\n state[property][pageName] = {};\n convertProperties(property, state[property][pageName], generalID, data, namespaceKeys[property][pageName], dpiConfig);\n }\n\n }\n\n // also add distribution data\n if (property === 'datasets') {\n const distributionQuads = data.match(generalID, 'http://www.w3.org/ns/dcat#distribution', null, null);\n namespaceKeys = generalHelper.getPagePrefixedNames('distributions', dpiConfig.inputDefinition, dpiConfig.pageConent);\n state.datasets.Distributions['distributionList'] = [];\n for (let el of distributionQuads) {\n const currentDistribution = {};\n\n const distributionId = el.object.value;\n for (let pageName in namespaceKeys['distributions']) {\n currentDistribution[pageName] = {};\n convertProperties('distributions', currentDistribution[pageName], distributionId, data, namespaceKeys['distributions'][pageName], dpiConfig);\n }\n state.datasets.Distributions.distributionList.push(currentDistribution);\n }\n }\n}\n\n/**\n * Converts value for given property from RDF into input form format\n * @param {*} property Parent property of given value (datasets/distributions/catalogues)\n * @param {*} state State from store\n * @param {*} id Id of parent node which serves as subject\n * @param {*} data Linked data\n * @param {*} propertyKeys Keys of properties to check\n */\nfunction convertProperties(property, state, id, data, propertyKeys, dpiConfig) {\n\n const formatType = dpiConfig.formatTypes;\n\n for (let index = 0; index < propertyKeys.length; index += 1) {\n const key = propertyKeys[index];\n let subData = data.match(id, generalHelper.addNamespace(key, dpiConfig), null, null);\n\n if (formatType.singularString[property].includes(key)) {\n convertSingularStrings(subData, state, key);\n } else if (formatType.singularURI[property].includes(key)) {\n convertSingularURI(subData, state, key, dpiConfig);\n } else if (formatType.multipleURI[property].includes(key)) {\n convertMultipleURI(subData, state, key, property, dpiConfig);\n } else if (formatType.typedStrings[property].includes(key)) {\n convertTypedString(subData, state, key);\n } else if (formatType.multilingualStrings[property].includes(key)) {\n convertMultilingual(subData, state, key);\n } else if (formatType.conditionalProperties[property].includes(key)) {\n // publisher either is an URI or a group with multiple values (name, homepage, email)\n if (key === 'dct:publisher' || key === 'dct:license') {\n for (let el of subData) {\n if (el.object.termType === 'NamedNode') {\n state[key] = {name: el.object.value, resource: el.object.value };\n } else if (el.object.termType === \"BlankNode\") {\n\n // get keys for nested values without dct'title (special format)\n const nestedKeys = generalHelper.getNestedKeys(data.match(el.object, null, null, null), dpiConfig).filter(el => el !== 'dct:title');\n const nestedProperties = {};\n\n // convert nested values\n if (key === 'dct:license') {\n const licenceTitleQuad = data.match(el.object, generalHelper.addNamespace('dct:title', dpiConfig), null, null);\n for (let el of licenceTitleQuad) {\n nestedProperties['dct:title'] = el.object.value;\n }\n }\n\n convertProperties(property, nestedProperties, el.object, data, nestedKeys, dpiConfig);\n state[key] = nestedProperties;\n }\n }\n }\n } else if (formatType.groupedProperties[property].includes(key)) {\n if (subData.size > 0) {\n\n state[key] = [];\n // there could be multiple nodes with data for a property\n for (let el of subData) {\n let currentState = {}\n if (key === 'skos:notation') {\n // skos notation behaves differently\n // there should be a typed literal given which should be seperated into @value and @type\n if (el.object.value) currentState['@value'] = el.object.value;\n if (el.object.datatypeString) currentState['@type'] = { name: el.object.datatypeString, resource: el.object.datatypeString };\n } else {\n // some properties have a named node containing data, the value of this named node also is a value form the input form (typically @id)\n if (el.object.termType === 'NamedNode') currentState['@id'] = el.object.value;\n // get keys of node properties\n const nestedKeys = generalHelper.getNestedKeys(data.match(el.object, null, null, null), dpiConfig);\n convertProperties(property, currentState, el.object, data, nestedKeys, dpiConfig);\n }\n // creator not an array\n if (key === 'dct:creator' || key === 'vcard:hasAddress' || key === 'skos:notation' || key === 'spdx:checksum') state[key] = currentState;\n else state[key].push(currentState);\n }\n }\n } else if (key === 'dcat:temporalResolution') {\n // temporal resolution is displayed as group of input forms for each property (year, month, day, ...)\n // the form provides the data as following: [ { 'Year': '...', 'Month': '...', ... } ]\n // the linked data format of this property looks like this: P?Y?M?DT?H?M?S\n if (subData.size > 0) {\n\n state[key] = {};\n\n const shorts = ['Y', 'M', 'D', 'H', 'M', 'S'];\n const forms = {\n 0: 'Year',\n 1: 'Month',\n 2: 'Day',\n 3: 'Hour',\n 4: 'Minute',\n 5: 'Second',\n };\n\n // should be oly one quad\n let resolutionValue;\n for (let el of subData) {\n resolutionValue = el.object.value;\n }\n\n // backend converts temporalResolution values without a date into seconds for time values\n if (!resolutionValue.startsWith(\"P\")) {\n\n // setting year, month and day to 0\n state[key][forms[0]] = 0;\n state[key][forms[1]] = 0;\n state[key][forms[2]] = 0;\n\n // converting seconds into HH:MM:SS\n const data = new Date(resolutionValue * 1000).toISOString().slice(11, 19);\n state[key][forms[3]] = data.slice(0, 2);\n state[key][forms[4]] = data.slice(3, 5);\n state[key][forms[5]] = data.slice(7, 9);\n\n } else {\n // find index of letter for time period\n // extract substring until this index\n // extract number from string and set as according value for input\n for (let tempIndex = 0; tempIndex < shorts.length; tempIndex += 1) {\n const position = resolutionValue.indexOf(shorts[tempIndex]); // position of duration letter\n const subDuration = resolutionValue.substring(0, position); // substring until position of duration letter\n const value = subDuration.match(/\\d+/g)[0]; // extract number\n resolutionValue = resolutionValue.substring(position); // overwrite resolution string with shortened version (missing the extracted part)\n state[key][forms[tempIndex]] = value; // write to result object\n }\n }\n }\n } else if (key === 'dct:identifier') {\n if (subData.size > 0) {\n // identifier should be provided as array of strings\n // [{'@value': '...'}, {'@value': '...'}, ...]\n state[key] = [];\n\n for (let el of subData) {\n state[key].push({ '@value': el.object.value });\n }\n }\n } else if (key === 'dct:rights') {\n // rights is conditional and gets a string\n // rights always includes a type so everything is located within a blank node\n // also rights is a singular property\n if (subData.size > 0) {\n let nodeData;\n // get id of blank node and associated label data\n for (let el of subData) {\n const rightsBlankNode = el.object;\n nodeData = data.match(rightsBlankNode, generalHelper.addNamespace('rdfs:label', dpiConfig), null, null);\n for (let label of nodeData) {\n if (generalHelper.isUrl(label.object.value)) state[key] = { '@type': 'url', 'rdfs:value': label.object.value };\n else state[key] = { '@type': 'text', 'rdfs:value': label.object.value };\n }\n }\n }\n } else if (key === 'datasetID' && property !== 'datatsets') {\n // id is given as complete URI\n // dataset-/catalogue-id is string following the last /\n state[key] = id.substr(id.lastIndexOf('/') + 1);\n state['hidden_datasetIDFormHidden'] = id.substr(id.lastIndexOf('/') + 1);\n } else if (key === 'dcat:catalog' && property === 'datasets') {\n // datasets also have a property called dcat:catalog (not valid DCAT-AP)\n // property is needed to determine catalog the dataset belongs to\n if (!(subData.size > 0)) {\n // bceause dcat:catalog is no valid DCAT-AP it is possible that the prefix is not resolved\n // therefore it is also possible to get the data by using the shortned key\n subData = data.match(id, 'dcat:catalog', null, null);\n }\n\n state[key] = '';\n\n // there should only be one catalog\n for (let cat of subData) {\n state[key] = cat.object.value;\n }\n } else if (key === 'rdf:type') {\n // some properties have a type which can be selected\n // the type also has a namespace and therefore need to be shortened ( e.g. from https://...Individual to vcard:Individual)\n if (subData.size > 0) {\n state[key] = '';\n\n // typically there is only on type provided for each property instance\n for (let el of subData) {\n state[key] = generalHelper.removeNamespace(el.object.value, dpiConfig);\n }\n }\n }\n }\n}\n\n//-----------------------------------------------------------------------------------------------------\n// basic conversion methods for different categories of data\n//-----------------------------------------------------------------------------------------------------\n// seems at first to be unnecessary but if we want to convert nested properties as well, we need these \n// methods (especially to provide the correct parent URI)\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertSingularStrings(data, state, key) {\n if (data.size > 0) {\n state[key] = '';\n\n for (let el of data) {\n state[key] = el.object.value;\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertSingularURI(data, state, key, dpiConfig) {\n\n const formatType = dpiConfig.formatTypes;\n\n if (data.size > 0) {\n state[key] = '';\n\n for (let el of data) {\n const value = el.object.value;\n\n if (value.startsWith('mailto:')) {\n state[key] = value.replace('mailto:', '');\n } else {\n if (formatType.URIformat.voc.includes(key)) state[key] = { name: value, resource: value };\n else if (formatType.URIformat.string.includes(key)) state[key] = value;\n else state[key] = { '@id': value };\n }\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertMultipleURI(data, state, key, property, dpiConfig) {\n // there are two different formats the frontend need to deliver multiple URIs\n // 1: [ \"URI1\", \"URI2\" ]\n // 2: [ { \"@id\": \"URI1\" }, { \"@id\": \"URI2\" } ]\n\n const formatType = dpiConfig.formatTypes;\n\n if (data.size > 0) {\n state[key] = [];\n for (let el of data) {\n if (formatType.URIformat.voc.includes(key)) state[key].push({ name: el.object.value, resource: el.object.value });\n else if (formatType.URIformat.string.includes(key)) state[key].push(el.object.value);\n else state[key].push({ '@id': el.object.value });\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertTypedString(data, state, key) {\n // some properties have a type\n // normally this type is not used within the forntend form and therefore won't be saved to frontend values\n if (data.size > 0) {\n state[key] = '';\n for (let el of data) {\n if (key === 'dcat:spatialResolutionInMeters' || key === 'dcat:byteSize') state[key] = el.object.value;\n else if (key === 'dcat:startDate' || key === 'dcat:endDate') {\n state[key] = el.object.value;\n }\n else {\n let dateType;\n if (el.object.value.includes('T')) dateType = 'dateTime';\n else dateType = 'date';\n\n state[key] = { '@type': dateType, '@value': el.object.value };\n }\n }\n }\n\n}\n\n/**\n * Converts and writes multilingual data to store\n * @param {*} data DatasetCore containing an array of quads\n * @param {*} state State for current key\n * @param {*} key Name of current property (e.g: 'dct:title')\n */\nfunction convertMultilingual(data, state, key) {\n // multilingual data is always stored within an array containing object with the value and it's language\n // [ {'@value': '...', '@language': '...'}, ...]\n if (data.size > 0) {\n state[key] = [];\n\n for (let el of data) {\n if (!el.object.language.includes(\"-\")) { // machine translation language tags look like this \"fi-t-en-t0-mtec\" and should not be included\n const currentElement = {};\n currentElement['@value'] = el.object.value; // actual value\n currentElement['@language'] = el.object.language; // language of value\n state[key].push(currentElement);\n }\n }\n }\n}\n\nexport default {\n convertToInput,\n};\n"],"names":["convertToInput","state","property","data","dpiConfig","generalID","namespaceKeys","propertyQuads","generalHelper","el","pageName","convertProperties","distributionQuads","currentDistribution","distributionId","id","propertyKeys","formatType","index","key","subData","convertSingularStrings","convertSingularURI","convertMultipleURI","convertTypedString","convertMultilingual","nestedKeys","nestedProperties","licenceTitleQuad","currentState","shorts","forms","resolutionValue","tempIndex","position","value","nodeData","rightsBlankNode","label","cat","dateType","currentElement","toInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inputConverter.mjs","sources":["../../../lib/data-provider-interface/utils/inputConverter.js"],"sourcesContent":["import generalHelper from \"./general-helper\";\nimport { has, isEmpty } from 'lodash';\n\n\n/**\n * Converts given data for given property into input form format\n * @param {*} state state from store\n * @param {*} property Property to convert data for (datasets/catalogues)\n * @param {*} data Linked data within a dataset\n */\nasync function convertToInput(state, property, data, dpiConfig ) {\n\n let generalID;\n let namespaceKeys;\n let propertyQuads;\n\n if (property === 'datasets') {\n propertyQuads = data.match(null, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.w3.org/ns/dcat#Dataset', null);\n } else {\n propertyQuads = data.match(null, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'http://www.w3.org/ns/dcat#Catalog', null);\n }\n\n // extract data for datasets/catalogues\n namespaceKeys = generalHelper.getPagePrefixedNames(property, dpiConfig.inputDefinition, dpiConfig.pageConent);\n state[property] = {};\n for (let el of propertyQuads) {\n // there should be only one dataset id\n generalID = el.subject.value;\n\n for (let pageName in namespaceKeys[property]) {\n state[property][pageName] = {};\n convertProperties(property, state[property][pageName], generalID, data, namespaceKeys[property][pageName], dpiConfig);\n }\n\n }\n\n // also add distribution data\n if (property === 'datasets') {\n const distributionQuads = data.match(generalID, 'http://www.w3.org/ns/dcat#distribution', null, null);\n namespaceKeys = generalHelper.getPagePrefixedNames('distributions', dpiConfig.inputDefinition, dpiConfig.pageConent);\n state.datasets.Distributions['distributionList'] = [];\n for (let el of distributionQuads) {\n const currentDistribution = {};\n\n const distributionId = el.object.value;\n for (let pageName in namespaceKeys['distributions']) {\n currentDistribution[pageName] = {};\n convertProperties('distributions', currentDistribution[pageName], distributionId, data, namespaceKeys['distributions'][pageName], dpiConfig);\n }\n state.datasets.Distributions.distributionList.push(currentDistribution);\n }\n }\n}\n\n/**\n * Converts value for given property from RDF into input form format\n * @param {*} property Parent property of given value (datasets/distributions/catalogues)\n * @param {*} state State from store\n * @param {*} id Id of parent node which serves as subject\n * @param {*} data Linked data\n * @param {*} propertyKeys Keys of properties to check\n */\nfunction convertProperties(property, state, id, data, propertyKeys, dpiConfig) {\n\n const formatType = dpiConfig.formatTypes;\n\n for (let index = 0; index < propertyKeys.length; index += 1) {\n const key = propertyKeys[index];\n let subData = data.match(id, generalHelper.addNamespace(key, dpiConfig), null, null);\n\n if (formatType.singularString[property].includes(key)) {\n convertSingularStrings(subData, state, key);\n } else if (formatType.singularURI[property].includes(key)) {\n convertSingularURI(subData, state, key, dpiConfig);\n } else if (formatType.multipleURI[property].includes(key)) {\n convertMultipleURI(subData, state, key, property, dpiConfig);\n } else if (formatType.typedStrings[property].includes(key)) {\n convertTypedString(subData, state, key);\n } else if (formatType.multilingualStrings[property].includes(key)) {\n convertMultilingual(subData, state, key);\n } else if (formatType.conditionalProperties[property].includes(key)) {\n // publisher either is an URI or a group with multiple values (name, homepage, email)\n if (key === 'dct:publisher' || key === 'dct:license') {\n for (let el of subData) {\n if (el.object.termType === 'NamedNode') {\n state[key] = {name: el.object.value, resource: el.object.value };\n } else if (el.object.termType === \"BlankNode\") {\n\n // get keys for nested values without dct'title (special format)\n const nestedKeys = generalHelper.getNestedKeys(data.match(el.object, null, null, null), dpiConfig).filter(el => el !== 'dct:title');\n const nestedProperties = {};\n\n // convert nested values\n if (key === 'dct:license') {\n const licenceTitleQuad = data.match(el.object, generalHelper.addNamespace('dct:title', dpiConfig), null, null);\n for (let el of licenceTitleQuad) {\n nestedProperties['dct:title'] = el.object.value;\n }\n }\n\n convertProperties(property, nestedProperties, el.object, data, nestedKeys, dpiConfig);\n state[key] = nestedProperties;\n }\n }\n }\n } else if (formatType.groupedProperties[property].includes(key)) {\n if (subData.size > 0) {\n\n state[key] = [];\n // there could be multiple nodes with data for a property\n for (let el of subData) {\n let currentState = {}\n if (key === 'skos:notation') {\n // skos notation behaves differently\n // there should be a typed literal given which should be seperated into @value and @type\n if (el.object.value) currentState['@value'] = el.object.value;\n if (el.object.datatypeString) currentState['@type'] = { name: el.object.datatypeString, resource: el.object.datatypeString };\n } else {\n // some properties have a named node containing data, the value of this named node also is a value form the input form (typically @id)\n if (el.object.termType === 'NamedNode') currentState['@id'] = el.object.value;\n // get keys of node properties\n const nestedKeys = generalHelper.getNestedKeys(data.match(el.object, null, null, null), dpiConfig);\n convertProperties(property, currentState, el.object, data, nestedKeys, dpiConfig);\n }\n // creator not an array\n if (key === 'dct:creator' || key === 'vcard:hasAddress' || key === 'skos:notation' || key === 'spdx:checksum') state[key] = currentState;\n else state[key].push(currentState);\n }\n }\n } else if (key === 'dcat:temporalResolution') {\n // temporal resolution is displayed as group of input forms for each property (year, month, day, ...)\n // the form provides the data as following: [ { 'Year': '...', 'Month': '...', ... } ]\n // the linked data format of this property looks like this: P?Y?M?DT?H?M?S\n if (subData.size > 0) {\n\n state[key] = {};\n\n const shorts = ['Y', 'M', 'D', 'H', 'M', 'S'];\n const forms = {\n 0: 'Year',\n 1: 'Month',\n 2: 'Day',\n 3: 'Hour',\n 4: 'Minute',\n 5: 'Second',\n };\n\n // should be oly one quad\n let resolutionValue;\n for (let el of subData) {\n resolutionValue = el.object.value;\n }\n\n // backend converts temporalResolution values without a date into seconds for time values\n if (!resolutionValue.startsWith(\"P\")) {\n\n // setting year, month and day to 0\n state[key][forms[0]] = 0;\n state[key][forms[1]] = 0;\n state[key][forms[2]] = 0;\n\n // converting seconds into HH:MM:SS\n const data = new Date(resolutionValue * 1000).toISOString().slice(11, 19);\n state[key][forms[3]] = data.slice(0, 2);\n state[key][forms[4]] = data.slice(3, 5);\n state[key][forms[5]] = data.slice(7, 9);\n\n } else {\n // find index of letter for time period\n // extract substring until this index\n // extract number from string and set as according value for input\n for (let tempIndex = 0; tempIndex < shorts.length; tempIndex += 1) {\n const position = resolutionValue.indexOf(shorts[tempIndex]); // position of duration letter\n const subDuration = resolutionValue.substring(0, position); // substring until position of duration letter\n const value = subDuration?.match(/\\d+/g)?.[0] ?? ''; // extract number\n resolutionValue = resolutionValue.substring(position); // overwrite resolution string with shortened version (missing the extracted part)\n state[key][forms[tempIndex]] = value; // write to result object\n }\n }\n }\n } else if (key === 'dct:identifier') {\n if (subData.size > 0) {\n // identifier should be provided as array of strings\n // [{'@value': '...'}, {'@value': '...'}, ...]\n state[key] = [];\n\n for (let el of subData) {\n state[key].push({ '@value': el.object.value });\n }\n }\n } else if (key === 'dct:rights') {\n // rights is conditional and gets a string\n // rights always includes a type so everything is located within a blank node\n // also rights is a singular property\n if (subData.size > 0) {\n let nodeData;\n // get id of blank node and associated label data\n for (let el of subData) {\n const rightsBlankNode = el.object;\n nodeData = data.match(rightsBlankNode, generalHelper.addNamespace('rdfs:label', dpiConfig), null, null);\n for (let label of nodeData) {\n if (generalHelper.isUrl(label.object.value)) state[key] = { '@type': 'url', 'rdfs:value': label.object.value };\n else state[key] = { '@type': 'text', 'rdfs:value': label.object.value };\n }\n }\n }\n } else if (key === 'datasetID' && property !== 'datatsets') {\n // id is given as complete URI\n // dataset-/catalogue-id is string following the last /\n state[key] = id.substr(id.lastIndexOf('/') + 1);\n state['hidden_datasetIDFormHidden'] = id.substr(id.lastIndexOf('/') + 1);\n } else if (key === 'dcat:catalog' && property === 'datasets') {\n // datasets also have a property called dcat:catalog (not valid DCAT-AP)\n // property is needed to determine catalog the dataset belongs to\n if (!(subData.size > 0)) {\n // bceause dcat:catalog is no valid DCAT-AP it is possible that the prefix is not resolved\n // therefore it is also possible to get the data by using the shortned key\n subData = data.match(id, 'dcat:catalog', null, null);\n }\n\n state[key] = '';\n\n // there should only be one catalog\n for (let cat of subData) {\n state[key] = cat.object.value;\n }\n } else if (key === 'rdf:type') {\n // some properties have a type which can be selected\n // the type also has a namespace and therefore need to be shortened ( e.g. from https://...Individual to vcard:Individual)\n if (subData.size > 0) {\n state[key] = '';\n\n // typically there is only on type provided for each property instance\n for (let el of subData) {\n state[key] = generalHelper.removeNamespace(el.object.value, dpiConfig);\n }\n }\n }\n }\n}\n\n//-----------------------------------------------------------------------------------------------------\n// basic conversion methods for different categories of data\n//-----------------------------------------------------------------------------------------------------\n// seems at first to be unnecessary but if we want to convert nested properties as well, we need these \n// methods (especially to provide the correct parent URI)\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertSingularStrings(data, state, key) {\n if (data.size > 0) {\n state[key] = '';\n\n for (let el of data) {\n state[key] = el.object.value;\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertSingularURI(data, state, key, dpiConfig) {\n\n const formatType = dpiConfig.formatTypes;\n\n if (data.size > 0) {\n state[key] = '';\n\n for (let el of data) {\n const value = el.object.value;\n\n if (value.startsWith('mailto:')) {\n state[key] = value.replace('mailto:', '');\n } else {\n if (formatType.URIformat.voc.includes(key)) state[key] = { name: value, resource: value };\n else if (formatType.URIformat.string.includes(key)) state[key] = value;\n else state[key] = { '@id': value };\n }\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertMultipleURI(data, state, key, property, dpiConfig) {\n // there are two different formats the frontend need to deliver multiple URIs\n // 1: [ \"URI1\", \"URI2\" ]\n // 2: [ { \"@id\": \"URI1\" }, { \"@id\": \"URI2\" } ]\n\n const formatType = dpiConfig.formatTypes;\n\n if (data.size > 0) {\n state[key] = [];\n for (let el of data) {\n if (formatType.URIformat.voc.includes(key)) state[key].push({ name: el.object.value, resource: el.object.value });\n else if (formatType.URIformat.string.includes(key)) state[key].push(el.object.value);\n else state[key].push({ '@id': el.object.value });\n }\n }\n}\n\n/**\n * \n * @param {*} data \n * @param {*} state \n * @param {*} key \n */\nfunction convertTypedString(data, state, key) {\n // some properties have a type\n // normally this type is not used within the forntend form and therefore won't be saved to frontend values\n if (data.size > 0) {\n state[key] = '';\n for (let el of data) {\n if (key === 'dcat:spatialResolutionInMeters' || key === 'dcat:byteSize') state[key] = el.object.value;\n else if (key === 'dcat:startDate' || key === 'dcat:endDate') {\n state[key] = el.object.value;\n }\n else {\n let dateType;\n if (el.object.value.includes('T')) dateType = 'dateTime';\n else dateType = 'date';\n\n state[key] = { '@type': dateType, '@value': el.object.value };\n }\n }\n }\n\n}\n\n/**\n * Converts and writes multilingual data to store\n * @param {*} data DatasetCore containing an array of quads\n * @param {*} state State for current key\n * @param {*} key Name of current property (e.g: 'dct:title')\n */\nfunction convertMultilingual(data, state, key) {\n // multilingual data is always stored within an array containing object with the value and it's language\n // [ {'@value': '...', '@language': '...'}, ...]\n if (data.size > 0) {\n state[key] = [];\n\n for (let el of data) {\n if (!el.object.language.includes(\"-\")) { // machine translation language tags look like this \"fi-t-en-t0-mtec\" and should not be included\n const currentElement = {};\n currentElement['@value'] = el.object.value; // actual value\n currentElement['@language'] = el.object.language; // language of value\n state[key].push(currentElement);\n }\n }\n }\n}\n\nexport default {\n convertToInput,\n};\n"],"names":["convertToInput","state","property","data","dpiConfig","generalID","namespaceKeys","propertyQuads","generalHelper","el","pageName","convertProperties","distributionQuads","currentDistribution","distributionId","id","propertyKeys","formatType","index","key","subData","convertSingularStrings","convertSingularURI","convertMultipleURI","convertTypedString","convertMultilingual","nestedKeys","nestedProperties","licenceTitleQuad","currentState","shorts","forms","resolutionValue","tempIndex","position","subDuration","value","_a","nodeData","rightsBlankNode","label","cat","dateType","currentElement","toInput"],"mappings":";;AAUA,eAAeA,EAAeC,GAAOC,GAAUC,GAAMC,GAAY;AAE7D,MAAIC,GACAC,GACAC;AAEJ,EAAIL,MAAa,aACbK,IAAgBJ,EAAK,MAAM,MAAM,mDAAmD,qCAAqC,IAAI,IAE7HI,IAAgBJ,EAAK,MAAM,MAAM,mDAAmD,qCAAqC,IAAI,GAIjIG,IAAgBE,EAAc,qBAAqBN,GAAUE,EAAU,iBAAiBA,EAAU,UAAU,GAC5GH,EAAMC,CAAQ,IAAI;AAClB,WAASO,KAAMF,GAAe;AAE1B,IAAAF,IAAYI,EAAG,QAAQ;AAEvB,aAASC,KAAYJ,EAAcJ,CAAQ;AACvC,MAAAD,EAAMC,CAAQ,EAAEQ,CAAQ,IAAI,CAAA,GAC5BC,EAAkBT,GAAUD,EAAMC,CAAQ,EAAEQ,CAAQ,GAAGL,GAAWF,GAAMG,EAAcJ,CAAQ,EAAEQ,CAAQ,GAAGN,CAAS;AAAA,EAG3H;AAGD,MAAIF,MAAa,YAAY;AACzB,UAAMU,IAAoBT,EAAK,MAAME,GAAW,0CAA0C,MAAM,IAAI;AACpG,IAAAC,IAAgBE,EAAc,qBAAqB,iBAAiBJ,EAAU,iBAAiBA,EAAU,UAAU,GACnHH,EAAM,SAAS,cAAc,mBAAsB,CAAA;AACnD,aAASQ,KAAMG,GAAmB;AAC9B,YAAMC,IAAsB,CAAA,GAEtBC,IAAiBL,EAAG,OAAO;AACjC,eAASC,KAAYJ,EAAc;AAC/B,QAAAO,EAAoBH,CAAQ,IAAI,IAChCC,EAAkB,iBAAiBE,EAAoBH,CAAQ,GAAGI,GAAgBX,GAAMG,EAAc,cAAiBI,CAAQ,GAAGN,CAAS;AAE/I,MAAAH,EAAM,SAAS,cAAc,iBAAiB,KAAKY,CAAmB;AAAA,IACzE;AAAA,EACJ;AACL;AAUA,SAASF,EAAkBT,GAAUD,GAAOc,GAAIZ,GAAMa,GAAcZ,GAAW;;AAE3E,QAAMa,IAAab,EAAU;AAE7B,WAASc,IAAQ,GAAGA,IAAQF,EAAa,QAAQE,KAAS,GAAG;AACzD,UAAMC,IAAMH,EAAaE,CAAK;AAC9B,QAAIE,IAAUjB,EAAK,MAAMY,GAAIP,EAAc,aAAaW,GAAKf,CAAS,GAAG,MAAM,IAAI;AAEnF,QAAIa,EAAW,eAAef,CAAQ,EAAE,SAASiB,CAAG;AAChD,MAAAE,EAAuBD,GAASnB,GAAOkB,CAAG;AAAA,aACnCF,EAAW,YAAYf,CAAQ,EAAE,SAASiB,CAAG;AACpD,MAAAG,EAAmBF,GAASnB,GAAOkB,GAAKf,CAAS;AAAA,aAC1Ca,EAAW,YAAYf,CAAQ,EAAE,SAASiB,CAAG;AACpD,MAAAI,EAAmBH,GAASnB,GAAOkB,GAAKjB,GAAUE,CAAS;AAAA,aACpDa,EAAW,aAAaf,CAAQ,EAAE,SAASiB,CAAG;AACrD,MAAAK,EAAmBJ,GAASnB,GAAOkB,CAAG;AAAA,aAC/BF,EAAW,oBAAoBf,CAAQ,EAAE,SAASiB,CAAG;AAC5D,MAAAM,EAAoBL,GAASnB,GAAOkB,CAAG;AAAA,aAChCF,EAAW,sBAAsBf,CAAQ,EAAE,SAASiB,CAAG;AAE9D,UAAIA,MAAQ,mBAAmBA,MAAQ;AACnC,iBAASV,KAAMW;AACX,cAAIX,EAAG,OAAO,aAAa;AACvB,YAAAR,EAAMkB,CAAG,IAAI,EAAC,MAAMV,EAAG,OAAO,OAAO,UAAUA,EAAG,OAAO,MAAK;AAAA,mBACvDA,EAAG,OAAO,aAAa,aAAa;AAG3C,kBAAMiB,IAAalB,EAAc,cAAcL,EAAK,MAAMM,EAAG,QAAQ,MAAM,MAAM,IAAI,GAAGL,CAAS,EAAE,OAAO,CAAAK,MAAMA,MAAO,WAAW,GAC5HkB,IAAmB,CAAA;AAGzB,gBAAIR,MAAQ,eAAe;AACvB,oBAAMS,IAAmBzB,EAAK,MAAMM,EAAG,QAAQD,EAAc,aAAa,aAAaJ,CAAS,GAAG,MAAM,IAAI;AAC7G,uBAASK,KAAMmB;AACX,gBAAAD,EAAiB,WAAW,IAAIlB,EAAG,OAAO;AAAA,YAEjD;AAED,YAAAE,EAAkBT,GAAUyB,GAAkBlB,EAAG,QAAQN,GAAMuB,GAAYtB,CAAS,GACpFH,EAAMkB,CAAG,IAAIQ;AAAA,UAChB;AAAA;AAAA,eAGFV,EAAW,kBAAkBf,CAAQ,EAAE,SAASiB,CAAG;AAC1D,UAAIC,EAAQ,OAAO,GAAG;AAElB,QAAAnB,EAAMkB,CAAG,IAAI;AAEb,iBAASV,KAAMW,GAAS;AACpB,cAAIS,IAAe,CAAE;AACrB,cAAIV,MAAQ;AAGR,YAAIV,EAAG,OAAO,UAAOoB,EAAa,QAAQ,IAAIpB,EAAG,OAAO,QACpDA,EAAG,OAAO,mBAAgBoB,EAAa,OAAO,IAAI,EAAE,MAAMpB,EAAG,OAAO,gBAAgB,UAAUA,EAAG,OAAO;eACzG;AAEH,YAAIA,EAAG,OAAO,aAAa,gBAAaoB,EAAa,KAAK,IAAIpB,EAAG,OAAO;AAExE,kBAAMiB,IAAalB,EAAc,cAAcL,EAAK,MAAMM,EAAG,QAAQ,MAAM,MAAM,IAAI,GAAGL,CAAS;AACjG,YAAAO,EAAkBT,GAAU2B,GAAcpB,EAAG,QAAQN,GAAMuB,GAAYtB,CAAS;AAAA,UACnF;AAED,UAAIe,MAAQ,iBAAiBA,MAAQ,sBAAsBA,MAAQ,mBAAmBA,MAAQ,kBAAiBlB,EAAMkB,CAAG,IAAIU,IACvH5B,EAAMkB,CAAG,EAAE,KAAKU,CAAY;AAAA,QACpC;AAAA,MACJ;AAAA,eACMV,MAAQ;AAIf,UAAIC,EAAQ,OAAO,GAAG;AAElB,QAAAnB,EAAMkB,CAAG,IAAI;AAEb,cAAMW,IAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GACtCC,IAAQ;AAAA,UACV,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACvB;AAGgB,YAAIC;AACJ,iBAASvB,KAAMW;AACX,UAAAY,IAAkBvB,EAAG,OAAO;AAIhC,YAAKuB,EAAgB,WAAW,GAAG;AAiB/B,mBAASC,IAAY,GAAGA,IAAYH,EAAO,QAAQG,KAAa,GAAG;AAC/D,kBAAMC,IAAWF,EAAgB,QAAQF,EAAOG,CAAS,CAAC,GACpDE,IAAcH,EAAgB,UAAU,GAAGE,CAAQ,GACnDE,MAAQC,IAAAF,KAAA,gBAAAA,EAAa,MAAM,YAAnB,gBAAAE,EAA6B,OAAM;AACjD,YAAAL,IAAkBA,EAAgB,UAAUE,CAAQ,GACpDjC,EAAMkB,CAAG,EAAEY,EAAME,CAAS,CAAC,IAAIG;AAAA,UAClC;AAAA,aAvBiC;AAGlC,UAAAnC,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI,GACvB9B,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI,GACvB9B,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI;AAGvB,gBAAM5B,IAAO,IAAI,KAAK6B,IAAkB,GAAI,EAAE,YAAW,EAAG,MAAM,IAAI,EAAE;AACxE,UAAA/B,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI5B,EAAK,MAAM,GAAG,CAAC,GACtCF,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI5B,EAAK,MAAM,GAAG,CAAC,GACtCF,EAAMkB,CAAG,EAAEY,EAAM,CAAC,CAAC,IAAI5B,EAAK,MAAM,GAAG,CAAC;AAAA,QAE1D;AAAA,MAYa;AAAA,eACMgB,MAAQ;AACf,UAAIC,EAAQ,OAAO,GAAG;AAGlB,QAAAnB,EAAMkB,CAAG,IAAI;AAEb,iBAASV,KAAMW;AACX,UAAAnB,EAAMkB,CAAG,EAAE,KAAK,EAAE,UAAUV,EAAG,OAAO,MAAK,CAAE;AAAA,MAEpD;AAAA,eACMU,MAAQ;AAIf,UAAIC,EAAQ,OAAO,GAAG;AAClB,YAAIkB;AAEJ,iBAAS7B,KAAMW,GAAS;AACpB,gBAAMmB,IAAkB9B,EAAG;AAC3B,UAAA6B,IAAWnC,EAAK,MAAMoC,GAAiB/B,EAAc,aAAa,cAAcJ,CAAS,GAAG,MAAM,IAAI;AACtG,mBAASoC,KAASF;AACd,YAAI9B,EAAc,MAAMgC,EAAM,OAAO,KAAK,IAAGvC,EAAMkB,CAAG,IAAI,EAAE,SAAS,OAAO,cAAcqB,EAAM,OAAO,UAClGvC,EAAMkB,CAAG,IAAI,EAAE,SAAS,QAAQ,cAAcqB,EAAM,OAAO;QAEvE;AAAA,MACJ;AAAA,eACMrB,MAAQ,eAAejB,MAAa;AAG3C,MAAAD,EAAMkB,CAAG,IAAIJ,EAAG,OAAOA,EAAG,YAAY,GAAG,IAAI,CAAC,GAC9Cd,EAAM,6BAAgCc,EAAG,OAAOA,EAAG,YAAY,GAAG,IAAI,CAAC;AAAA,aAChEI,MAAQ,kBAAkBjB,MAAa,YAAY;AAG1D,MAAMkB,EAAQ,OAAO,MAGjBA,IAAUjB,EAAK,MAAMY,GAAI,gBAAgB,MAAM,IAAI,IAGvDd,EAAMkB,CAAG,IAAI;AAGb,eAASsB,KAAOrB;AACZ,QAAAnB,EAAMkB,CAAG,IAAIsB,EAAI,OAAO;AAAA,IAExC,WAAmBtB,MAAQ,cAGXC,EAAQ,OAAO,GAAG;AAClB,MAAAnB,EAAMkB,CAAG,IAAI;AAGb,eAASV,KAAMW;AACX,QAAAnB,EAAMkB,CAAG,IAAIX,EAAc,gBAAgBC,EAAG,OAAO,OAAOL,CAAS;AAAA,IAE5E;AAAA,EAER;AACL;AAcA,SAASiB,EAAuBlB,GAAMF,GAAOkB,GAAK;AAC9C,MAAIhB,EAAK,OAAO,GAAG;AACf,IAAAF,EAAMkB,CAAG,IAAI;AAEb,aAASV,KAAMN;AACX,MAAAF,EAAMkB,CAAG,IAAIV,EAAG,OAAO;AAAA,EAE9B;AACL;AAQA,SAASa,EAAmBnB,GAAMF,GAAOkB,GAAKf,GAAW;AAErD,QAAMa,IAAab,EAAU;AAE7B,MAAID,EAAK,OAAO,GAAG;AACf,IAAAF,EAAMkB,CAAG,IAAI;AAEb,aAASV,KAAMN,GAAM;AACjB,YAAMiC,IAAQ3B,EAAG,OAAO;AAExB,MAAI2B,EAAM,WAAW,SAAS,IAC1BnC,EAAMkB,CAAG,IAAIiB,EAAM,QAAQ,WAAW,EAAE,IAEpCnB,EAAW,UAAU,IAAI,SAASE,CAAG,IAAGlB,EAAMkB,CAAG,IAAI,EAAE,MAAMiB,GAAO,UAAUA,EAAK,IAC9EnB,EAAW,UAAU,OAAO,SAASE,CAAG,IAAGlB,EAAMkB,CAAG,IAAIiB,IAC5DnC,EAAMkB,CAAG,IAAI,EAAE,OAAOiB,EAAK;AAAA,IAEvC;AAAA,EACJ;AACL;AAQA,SAASb,EAAmBpB,GAAMF,GAAOkB,GAAKjB,GAAUE,GAAW;AAK/D,QAAMa,IAAab,EAAU;AAE7B,MAAID,EAAK,OAAO,GAAG;AACf,IAAAF,EAAMkB,CAAG,IAAI;AACb,aAASV,KAAMN;AACX,MAAIc,EAAW,UAAU,IAAI,SAASE,CAAG,IAAGlB,EAAMkB,CAAG,EAAE,KAAK,EAAE,MAAMV,EAAG,OAAO,OAAO,UAAUA,EAAG,OAAO,MAAK,CAAE,IACvGQ,EAAW,UAAU,OAAO,SAASE,CAAG,IAAGlB,EAAMkB,CAAG,EAAE,KAAKV,EAAG,OAAO,KAAK,IAC9ER,EAAMkB,CAAG,EAAE,KAAK,EAAE,OAAOV,EAAG,OAAO,MAAK,CAAE;AAAA,EAEtD;AACL;AAQA,SAASe,EAAmBrB,GAAMF,GAAOkB,GAAK;AAG1C,MAAIhB,EAAK,OAAO,GAAG;AACf,IAAAF,EAAMkB,CAAG,IAAI;AACb,aAASV,KAAMN;AACX,UAAIgB,MAAQ,oCAAoCA,MAAQ;AAAiB,QAAAlB,EAAMkB,CAAG,IAAIV,EAAG,OAAO;AAAA,eACvFU,MAAQ,oBAAoBA,MAAQ;AACzC,QAAAlB,EAAMkB,CAAG,IAAIV,EAAG,OAAO;AAAA,WAEtB;AACD,YAAIiC;AACJ,QAAIjC,EAAG,OAAO,MAAM,SAAS,GAAG,IAAGiC,IAAW,aACzCA,IAAW,QAEhBzC,EAAMkB,CAAG,IAAI,EAAE,SAASuB,GAAU,UAAUjC,EAAG,OAAO;MACzD;AAAA,EAER;AAEL;AAQA,SAASgB,EAAoBtB,GAAMF,GAAOkB,GAAK;AAG3C,MAAIhB,EAAK,OAAO,GAAG;AACf,IAAAF,EAAMkB,CAAG,IAAI;AAEb,aAASV,KAAMN;AACX,UAAI,CAACM,EAAG,OAAO,SAAS,SAAS,GAAG,GAAG;AACnC,cAAMkC,IAAiB,CAAA;AACvB,QAAAA,EAAe,QAAQ,IAAIlC,EAAG,OAAO,OACrCkC,EAAe,WAAW,IAAIlC,EAAG,OAAO,UACxCR,EAAMkB,CAAG,EAAE,KAAKwB,CAAc;AAAA,MACjC;AAAA,EAER;AACL;AAEA,MAAeC,IAAA;AAAA,EACX,gBAAA5C;AACJ;"}
|