@tricoteuses/assemblee 1.0.7 → 1.1.0
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/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.js +6 -96
- package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import assert from "assert";
|
|
2
2
|
import { cleanBooleanAttribute, cleanXmlArtefacts } from "./xml.mjs";
|
|
3
|
-
|
|
4
3
|
function cleanDecompteNominatif(decompteNominatif) {
|
|
5
4
|
cleanXmlArtefacts(decompteNominatif);
|
|
6
5
|
let nonVotants = decompteNominatif.nonVotants;
|
|
7
|
-
|
|
8
6
|
if (nonVotants !== undefined) {
|
|
9
7
|
if (typeof nonVotants === "string") {
|
|
10
8
|
assert.strictEqual(nonVotants, "0");
|
|
@@ -13,17 +11,13 @@ function cleanDecompteNominatif(decompteNominatif) {
|
|
|
13
11
|
assert(nonVotants);
|
|
14
12
|
nonVotants = [nonVotants];
|
|
15
13
|
}
|
|
16
|
-
|
|
17
14
|
const nonVotantsArray = nonVotants;
|
|
18
15
|
nonVotants = [];
|
|
19
|
-
|
|
20
16
|
for (let nonVotant of nonVotantsArray) {
|
|
21
17
|
if (nonVotant === null) {
|
|
22
18
|
continue;
|
|
23
19
|
}
|
|
24
|
-
|
|
25
20
|
nonVotant = nonVotant.votant;
|
|
26
|
-
|
|
27
21
|
if (Array.isArray(nonVotant)) {
|
|
28
22
|
nonVotants.push(...nonVotant);
|
|
29
23
|
} else {
|
|
@@ -31,93 +25,71 @@ function cleanDecompteNominatif(decompteNominatif) {
|
|
|
31
25
|
nonVotants.push(nonVotant);
|
|
32
26
|
}
|
|
33
27
|
}
|
|
34
|
-
|
|
35
28
|
if (nonVotants.length === 0) {
|
|
36
29
|
delete decompteNominatif.nonVotants;
|
|
37
30
|
} else {
|
|
38
31
|
decompteNominatif.nonVotants = nonVotants;
|
|
39
|
-
|
|
40
32
|
for (const votant of nonVotants) {
|
|
41
33
|
cleanVotant(votant);
|
|
42
34
|
}
|
|
43
35
|
}
|
|
44
36
|
}
|
|
45
|
-
|
|
46
37
|
let pour = decompteNominatif.pour;
|
|
47
|
-
|
|
48
38
|
if (pour === undefined) {
|
|
49
39
|
pour = decompteNominatif.pours;
|
|
50
40
|
} else {
|
|
51
41
|
assert.strictEqual(decompteNominatif.pours, undefined);
|
|
52
42
|
}
|
|
53
|
-
|
|
54
43
|
if (pour !== undefined) {
|
|
55
44
|
pour = pour.votant;
|
|
56
|
-
|
|
57
45
|
if (!Array.isArray(pour)) {
|
|
58
46
|
assert(pour);
|
|
59
47
|
pour = [pour];
|
|
60
48
|
}
|
|
61
|
-
|
|
62
49
|
if (pour.length === 0) {
|
|
63
50
|
delete decompteNominatif.pour;
|
|
64
51
|
} else {
|
|
65
52
|
decompteNominatif.pour = pour;
|
|
66
|
-
|
|
67
53
|
for (const votant of pour) {
|
|
68
54
|
cleanVotant(votant);
|
|
69
55
|
}
|
|
70
56
|
}
|
|
71
|
-
|
|
72
57
|
delete decompteNominatif.pours;
|
|
73
58
|
}
|
|
74
|
-
|
|
75
59
|
let contre = decompteNominatif.contre;
|
|
76
|
-
|
|
77
60
|
if (contre === undefined) {
|
|
78
61
|
contre = decompteNominatif.contres;
|
|
79
62
|
} else {
|
|
80
63
|
assert.strictEqual(decompteNominatif.contres, undefined);
|
|
81
64
|
}
|
|
82
|
-
|
|
83
65
|
if (contre !== undefined) {
|
|
84
66
|
contre = contre.votant;
|
|
85
|
-
|
|
86
67
|
if (!Array.isArray(contre)) {
|
|
87
68
|
assert(contre);
|
|
88
69
|
contre = [contre];
|
|
89
70
|
}
|
|
90
|
-
|
|
91
71
|
if (contre.length === 0) {
|
|
92
72
|
delete decompteNominatif.contre;
|
|
93
73
|
} else {
|
|
94
74
|
decompteNominatif.contre = contre;
|
|
95
|
-
|
|
96
75
|
for (const votant of contre) {
|
|
97
76
|
cleanVotant(votant);
|
|
98
77
|
}
|
|
99
78
|
}
|
|
100
|
-
|
|
101
79
|
delete decompteNominatif.contres;
|
|
102
80
|
}
|
|
103
|
-
|
|
104
81
|
let abstentions = decompteNominatif.abstentions;
|
|
105
|
-
|
|
106
82
|
if (abstentions !== undefined) {
|
|
107
83
|
if (!Array.isArray(abstentions)) {
|
|
108
84
|
abstentions = [abstentions];
|
|
109
85
|
}
|
|
110
|
-
|
|
111
86
|
const abstentionsArray = abstentions;
|
|
112
87
|
abstentions = [];
|
|
113
|
-
|
|
114
88
|
for (let absentionsItem of abstentionsArray) {
|
|
115
89
|
if (absentionsItem === null) {
|
|
116
90
|
continue;
|
|
117
91
|
}
|
|
118
|
-
|
|
119
92
|
absentionsItem = absentionsItem.votant;
|
|
120
|
-
|
|
121
93
|
if (Array.isArray(absentionsItem)) {
|
|
122
94
|
abstentions.push(...absentionsItem);
|
|
123
95
|
} else {
|
|
@@ -125,35 +97,27 @@ function cleanDecompteNominatif(decompteNominatif) {
|
|
|
125
97
|
abstentions.push(absentionsItem);
|
|
126
98
|
}
|
|
127
99
|
}
|
|
128
|
-
|
|
129
100
|
if (abstentions.length === 0) {
|
|
130
101
|
delete decompteNominatif.abstentions;
|
|
131
102
|
} else {
|
|
132
103
|
decompteNominatif.abstentions = abstentions;
|
|
133
|
-
|
|
134
104
|
for (const votant of abstentions) {
|
|
135
105
|
cleanVotant(votant);
|
|
136
106
|
}
|
|
137
107
|
}
|
|
138
108
|
}
|
|
139
|
-
|
|
140
109
|
let nonVotantsVolontaires = decompteNominatif.nonVotantsVolontaires;
|
|
141
|
-
|
|
142
110
|
if (nonVotantsVolontaires !== undefined) {
|
|
143
111
|
if (!Array.isArray(nonVotantsVolontaires)) {
|
|
144
112
|
nonVotantsVolontaires = [nonVotantsVolontaires];
|
|
145
113
|
}
|
|
146
|
-
|
|
147
114
|
const nonVotantsVolontairesArray = nonVotantsVolontaires;
|
|
148
115
|
nonVotantsVolontaires = [];
|
|
149
|
-
|
|
150
116
|
for (let absentionsItem of nonVotantsVolontairesArray) {
|
|
151
117
|
if (absentionsItem === null) {
|
|
152
118
|
continue;
|
|
153
119
|
}
|
|
154
|
-
|
|
155
120
|
absentionsItem = absentionsItem.votant;
|
|
156
|
-
|
|
157
121
|
if (Array.isArray(absentionsItem)) {
|
|
158
122
|
nonVotantsVolontaires.push(...absentionsItem);
|
|
159
123
|
} else {
|
|
@@ -161,19 +125,16 @@ function cleanDecompteNominatif(decompteNominatif) {
|
|
|
161
125
|
nonVotantsVolontaires.push(absentionsItem);
|
|
162
126
|
}
|
|
163
127
|
}
|
|
164
|
-
|
|
165
128
|
if (nonVotantsVolontaires.length === 0) {
|
|
166
129
|
delete decompteNominatif.nonVotantsVolontaires;
|
|
167
130
|
} else {
|
|
168
131
|
decompteNominatif.nonVotantsVolontaires = nonVotantsVolontaires;
|
|
169
|
-
|
|
170
132
|
for (const votant of nonVotantsVolontaires) {
|
|
171
133
|
cleanVotant(votant);
|
|
172
134
|
}
|
|
173
135
|
}
|
|
174
136
|
}
|
|
175
137
|
}
|
|
176
|
-
|
|
177
138
|
export function cleanScrutin(scrutin) {
|
|
178
139
|
cleanXmlArtefacts(scrutin);
|
|
179
140
|
const demandeur = scrutin.demandeur;
|
|
@@ -198,7 +159,6 @@ export function cleanScrutin(scrutin) {
|
|
|
198
159
|
{
|
|
199
160
|
groupes = groupes.groupe;
|
|
200
161
|
assert(Array.isArray(groupes));
|
|
201
|
-
|
|
202
162
|
for (const groupe of groupes) {
|
|
203
163
|
const vote = groupe.vote;
|
|
204
164
|
assert(vote);
|
|
@@ -211,7 +171,6 @@ export function cleanScrutin(scrutin) {
|
|
|
211
171
|
decompteVoix.abstentions = decompteVoix.abstention;
|
|
212
172
|
delete decompteVoix.abstention;
|
|
213
173
|
}
|
|
214
|
-
|
|
215
174
|
if (decompteVoix.nonVotant !== undefined) {
|
|
216
175
|
assert.strictEqual(decompteVoix.nonVotants, undefined);
|
|
217
176
|
decompteVoix.nonVotants = decompteVoix.nonVotant;
|
|
@@ -223,32 +182,26 @@ export function cleanScrutin(scrutin) {
|
|
|
223
182
|
cleanDecompteNominatif(decompteNominatif);
|
|
224
183
|
}
|
|
225
184
|
}
|
|
226
|
-
|
|
227
185
|
ventilationVotes.groupes = groupes;
|
|
228
186
|
}
|
|
229
187
|
scrutin.ventilationVotes = ventilationVotes;
|
|
230
188
|
}
|
|
231
189
|
const miseAuPoint = scrutin.miseAuPoint;
|
|
232
|
-
|
|
233
190
|
if (miseAuPoint !== undefined) {
|
|
234
191
|
cleanDecompteNominatif(miseAuPoint);
|
|
235
192
|
let dysfonctionnement = miseAuPoint.dysfonctionnement;
|
|
236
|
-
|
|
237
193
|
if (dysfonctionnement !== undefined) {
|
|
238
194
|
cleanDecompteNominatif(dysfonctionnement);
|
|
239
|
-
|
|
240
195
|
if (Object.values(dysfonctionnement).filter(value => value !== undefined).length === 0) {
|
|
241
196
|
delete miseAuPoint.dysfonctionnement;
|
|
242
197
|
}
|
|
243
198
|
}
|
|
244
|
-
|
|
245
199
|
if (Object.values(miseAuPoint).filter(value => value !== undefined).length === 0) {
|
|
246
200
|
delete scrutin.miseAuPoint;
|
|
247
201
|
}
|
|
248
202
|
}
|
|
249
203
|
}
|
|
250
|
-
|
|
251
204
|
function cleanVotant(votant) {
|
|
252
205
|
cleanBooleanAttribute(votant, "parDelegation");
|
|
253
206
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsImNsZWFuRGVjb21wdGVOb21pbmF0aWYiLCJkZWNvbXB0ZU5vbWluYXRpZiIsIm5vblZvdGFudHMiLCJ1bmRlZmluZWQiLCJzdHJpY3RFcXVhbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vblZvdGFudHNBcnJheSIsIm5vblZvdGFudCIsInZvdGFudCIsInB1c2giLCJsZW5ndGgiLCJjbGVhblZvdGFudCIsInBvdXIiLCJwb3VycyIsImNvbnRyZSIsImNvbnRyZXMiLCJhYnN0ZW50aW9ucyIsImFic3RlbnRpb25zQXJyYXkiLCJhYnNlbnRpb25zSXRlbSIsIm5vblZvdGFudHNWb2xvbnRhaXJlcyIsIm5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5IiwiY2xlYW5TY3J1dGluIiwic2NydXRpbiIsImRlbWFuZGV1ciIsInJlZmVyZW5jZUxlZ2lzbGF0aXZlIiwib2JqZXQiLCJ2ZW50aWxhdGlvblZvdGVzIiwib3JnYW5lIiwiZ3JvdXBlcyIsImdyb3VwZSIsInZvdGUiLCJkZWNvbXB0ZVZvaXgiLCJhYnN0ZW50aW9uIiwibWlzZUF1UG9pbnQiLCJkeXNmb25jdGlvbm5lbWVudCIsIk9iamVjdCIsInZhbHVlcyIsImZpbHRlciIsInZhbHVlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL3NjcnV0aW5zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSwgY2xlYW5YbWxBcnRlZmFjdHMgfSBmcm9tIFwiLi94bWxcIlxuXG5mdW5jdGlvbiBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmOiBhbnkpIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZGVjb21wdGVOb21pbmF0aWYpXG5cbiAgbGV0IG5vblZvdGFudHMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzXG4gIGlmIChub25Wb3RhbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG5vblZvdGFudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChub25Wb3RhbnRzLCBcIjBcIilcbiAgICAgIG5vblZvdGFudHMgPSBbXVxuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9uVm90YW50cykpIHtcbiAgICAgIGFzc2VydChub25Wb3RhbnRzKVxuICAgICAgbm9uVm90YW50cyA9IFtub25Wb3RhbnRzXVxuICAgIH1cbiAgICBjb25zdCBub25Wb3RhbnRzQXJyYXkgPSBub25Wb3RhbnRzXG4gICAgbm9uVm90YW50cyA9IFtdXG4gICAgZm9yIChsZXQgbm9uVm90YW50IG9mIG5vblZvdGFudHNBcnJheSkge1xuICAgICAgaWYgKG5vblZvdGFudCA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbm9uVm90YW50ID0gbm9uVm90YW50LnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9uVm90YW50KSkge1xuICAgICAgICBub25Wb3RhbnRzLnB1c2goLi4ubm9uVm90YW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KG5vblZvdGFudClcbiAgICAgICAgbm9uVm90YW50cy5wdXNoKG5vblZvdGFudClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vblZvdGFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50c1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzID0gbm9uVm90YW50c1xuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2Ygbm9uVm90YW50cykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBvdXIgPSBkZWNvbXB0ZU5vbWluYXRpZi5wb3VyXG4gIGlmIChwb3VyID09PSB1bmRlZmluZWQpIHtcbiAgICBwb3VyID0gZGVjb21wdGVOb21pbmF0aWYucG91cnNcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVjb21wdGVOb21pbmF0aWYucG91cnMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAocG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcG91ciA9IHBvdXIudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvdXIpKSB7XG4gICAgICBhc3NlcnQocG91cilcbiAgICAgIHBvdXIgPSBbcG91cl1cbiAgICB9XG4gICAgaWYgKHBvdXIubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYucG91clxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5wb3VyID0gcG91clxuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2YgcG91cikge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5wb3Vyc1xuICB9XG5cbiAgbGV0IGNvbnRyZSA9IGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICBpZiAoY29udHJlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZXMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAoY29udHJlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBjb250cmUudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyZSkpIHtcbiAgICAgIGFzc2VydChjb250cmUpXG4gICAgICBjb250cmUgPSBbY29udHJlXVxuICAgIH1cbiAgICBpZiAoY29udHJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmUgPSBjb250cmVcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIGNvbnRyZSkge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH1cblxuICBsZXQgYWJzdGVudGlvbnMgPSBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uc1xuICBpZiAoYWJzdGVudGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhYnN0ZW50aW9ucykpIHtcbiAgICAgIGFic3RlbnRpb25zID0gW2Fic3RlbnRpb25zXVxuICAgIH1cbiAgICBjb25zdCBhYnN0ZW50aW9uc0FycmF5ID0gYWJzdGVudGlvbnNcbiAgICBhYnN0ZW50aW9ucyA9IFtdXG4gICAgZm9yIChsZXQgYWJzZW50aW9uc0l0ZW0gb2YgYWJzdGVudGlvbnNBcnJheSkge1xuICAgICAgaWYgKGFic2VudGlvbnNJdGVtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhYnNlbnRpb25zSXRlbSA9IGFic2VudGlvbnNJdGVtLnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWJzZW50aW9uc0l0ZW0pKSB7XG4gICAgICAgIGFic3RlbnRpb25zLnB1c2goLi4uYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWJzZW50aW9uc0l0ZW0pXG4gICAgICAgIGFic3RlbnRpb25zLnB1c2goYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhYnN0ZW50aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uc1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9ucyA9IGFic3RlbnRpb25zXG4gICAgICBmb3IgKGNvbnN0IHZvdGFudCBvZiBhYnN0ZW50aW9ucykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IG5vblZvdGFudHNWb2xvbnRhaXJlcyA9IGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNWb2xvbnRhaXJlc1xuICBpZiAobm9uVm90YW50c1ZvbG9udGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobm9uVm90YW50c1ZvbG9udGFpcmVzKSkge1xuICAgICAgbm9uVm90YW50c1ZvbG9udGFpcmVzID0gW25vblZvdGFudHNWb2xvbnRhaXJlc11cbiAgICB9XG4gICAgY29uc3Qgbm9uVm90YW50c1ZvbG9udGFpcmVzQXJyYXkgPSBub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICBub25Wb3RhbnRzVm9sb250YWlyZXMgPSBbXVxuICAgIGZvciAobGV0IGFic2VudGlvbnNJdGVtIG9mIG5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5KSB7XG4gICAgICBpZiAoYWJzZW50aW9uc0l0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFic2VudGlvbnNJdGVtID0gYWJzZW50aW9uc0l0ZW0udm90YW50XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhYnNlbnRpb25zSXRlbSkpIHtcbiAgICAgICAgbm9uVm90YW50c1ZvbG9udGFpcmVzLnB1c2goLi4uYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWJzZW50aW9uc0l0ZW0pXG4gICAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcy5wdXNoKGFic2VudGlvbnNJdGVtKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9uVm90YW50c1ZvbG9udGFpcmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNWb2xvbnRhaXJlc1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXMgPSBub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIG5vblZvdGFudHNWb2xvbnRhaXJlcykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblNjcnV0aW4oc2NydXRpbjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKHNjcnV0aW4pXG5cbiAgY29uc3QgZGVtYW5kZXVyID0gc2NydXRpbi5kZW1hbmRldXJcbiAgYXNzZXJ0KGRlbWFuZGV1cilcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlbWFuZGV1cilcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZW1hbmRldXIucmVmZXJlbmNlTGVnaXNsYXRpdmUsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGNvbnN0IG9iamV0ID0gc2NydXRpbi5vYmpldFxuICBhc3NlcnQob2JqZXQpXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhvYmpldClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmpldC5yZWZlcmVuY2VMZWdpc2xhdGl2ZSwgdW5kZWZpbmVkKVxuICB9XG5cbiAgbGV0IHZlbnRpbGF0aW9uVm90ZXMgPSBzY3J1dGluLnZlbnRpbGF0aW9uVm90ZXNcbiAgYXNzZXJ0KHZlbnRpbGF0aW9uVm90ZXMpXG4gIHtcbiAgICB2ZW50aWxhdGlvblZvdGVzID0gdmVudGlsYXRpb25Wb3Rlcy5vcmdhbmVcbiAgICBhc3NlcnQodmVudGlsYXRpb25Wb3RlcylcblxuICAgIGxldCBncm91cGVzID0gdmVudGlsYXRpb25Wb3Rlcy5ncm91cGVzXG4gICAgYXNzZXJ0KGdyb3VwZXMpXG4gICAge1xuICAgICAgZ3JvdXBlcyA9IGdyb3VwZXMuZ3JvdXBlXG4gICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShncm91cGVzKSlcbiAgICAgIGZvciAoY29uc3QgZ3JvdXBlIG9mIGdyb3VwZXMpIHtcbiAgICAgICAgY29uc3Qgdm90ZSA9IGdyb3VwZS52b3RlXG4gICAgICAgIGFzc2VydCh2b3RlKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgZGVjb21wdGVWb2l4ID0gdm90ZS5kZWNvbXB0ZVZvaXhcbiAgICAgICAgICBhc3NlcnQoZGVjb21wdGVWb2l4KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChkZWNvbXB0ZVZvaXguYWJzdGVudGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZVZvaXguYWJzdGVudGlvbnMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgZGVjb21wdGVWb2l4LmFic3RlbnRpb25zID0gZGVjb21wdGVWb2l4LmFic3RlbnRpb25cbiAgICAgICAgICAgICAgZGVsZXRlIGRlY29tcHRlVm9peC5hYnN0ZW50aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZWNvbXB0ZVZvaXgubm9uVm90YW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlVm9peC5ub25Wb3RhbnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGRlY29tcHRlVm9peC5ub25Wb3RhbnRzID0gZGVjb21wdGVWb2l4Lm5vblZvdGFudFxuICAgICAgICAgICAgICBkZWxldGUgZGVjb21wdGVWb2l4Lm5vblZvdGFudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRlY29tcHRlTm9taW5hdGlmID0gdm90ZS5kZWNvbXB0ZU5vbWluYXRpZlxuICAgICAgICAgIGFzc2VydChkZWNvbXB0ZU5vbWluYXRpZilcbiAgICAgICAgICBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2ZW50aWxhdGlvblZvdGVzLmdyb3VwZXMgPSBncm91cGVzXG4gICAgfVxuXG4gICAgc2NydXRpbi52ZW50aWxhdGlvblZvdGVzID0gdmVudGlsYXRpb25Wb3Rlc1xuICB9XG5cbiAgY29uc3QgbWlzZUF1UG9pbnQgPSBzY3J1dGluLm1pc2VBdVBvaW50XG4gIGlmIChtaXNlQXVQb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5EZWNvbXB0ZU5vbWluYXRpZihtaXNlQXVQb2ludClcblxuICAgIGxldCBkeXNmb25jdGlvbm5lbWVudCA9IG1pc2VBdVBvaW50LmR5c2ZvbmN0aW9ubmVtZW50XG4gICAgaWYgKGR5c2ZvbmN0aW9ubmVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuRGVjb21wdGVOb21pbmF0aWYoZHlzZm9uY3Rpb25uZW1lbnQpXG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZHlzZm9uY3Rpb25uZW1lbnQpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSBtaXNlQXVQb2ludC5keXNmb25jdGlvbm5lbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC52YWx1ZXMobWlzZUF1UG9pbnQpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBzY3J1dGluLm1pc2VBdVBvaW50XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuVm90YW50KHZvdGFudDogYW55KSB7XG4gIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSh2b3RhbnQsIFwicGFyRGVsZWdhdGlvblwiKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO1NBRVNDLHFCLEVBQXVCQyxpQjs7QUFFaEMsU0FBU0Msc0JBQVQsQ0FBZ0NDLGlCQUFoQyxFQUF3RDtFQUN0REYsaUJBQWlCLENBQUNFLGlCQUFELENBQWpCO0VBRUEsSUFBSUMsVUFBVSxHQUFHRCxpQkFBaUIsQ0FBQ0MsVUFBbkM7O0VBQ0EsSUFBSUEsVUFBVSxLQUFLQyxTQUFuQixFQUE4QjtJQUM1QixJQUFJLE9BQU9ELFVBQVAsS0FBc0IsUUFBMUIsRUFBb0M7TUFDbENMLE1BQU0sQ0FBQ08sV0FBUCxDQUFtQkYsVUFBbkIsRUFBK0IsR0FBL0I7TUFDQUEsVUFBVSxHQUFHLEVBQWI7SUFDRCxDQUhELE1BR08sSUFBSSxDQUFDRyxLQUFLLENBQUNDLE9BQU4sQ0FBY0osVUFBZCxDQUFMLEVBQWdDO01BQ3JDTCxNQUFNLENBQUNLLFVBQUQsQ0FBTjtNQUNBQSxVQUFVLEdBQUcsQ0FBQ0EsVUFBRCxDQUFiO0lBQ0Q7O0lBQ0QsTUFBTUssZUFBZSxHQUFHTCxVQUF4QjtJQUNBQSxVQUFVLEdBQUcsRUFBYjs7SUFDQSxLQUFLLElBQUlNLFNBQVQsSUFBc0JELGVBQXRCLEVBQXVDO01BQ3JDLElBQUlDLFNBQVMsS0FBSyxJQUFsQixFQUF3QjtRQUN0QjtNQUNEOztNQUNEQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsTUFBdEI7O01BQ0EsSUFBSUosS0FBSyxDQUFDQyxPQUFOLENBQWNFLFNBQWQsQ0FBSixFQUE4QjtRQUM1Qk4sVUFBVSxDQUFDUSxJQUFYLENBQWdCLEdBQUdGLFNBQW5CO01BQ0QsQ0FGRCxNQUVPO1FBQ0xYLE1BQU0sQ0FBQ1csU0FBRCxDQUFOO1FBQ0FOLFVBQVUsQ0FBQ1EsSUFBWCxDQUFnQkYsU0FBaEI7TUFDRDtJQUNGOztJQUNELElBQUlOLFVBQVUsQ0FBQ1MsTUFBWCxLQUFzQixDQUExQixFQUE2QjtNQUMzQixPQUFPVixpQkFBaUIsQ0FBQ0MsVUFBekI7SUFDRCxDQUZELE1BRU87TUFDTEQsaUJBQWlCLENBQUNDLFVBQWxCLEdBQStCQSxVQUEvQjs7TUFDQSxLQUFLLE1BQU1PLE1BQVgsSUFBcUJQLFVBQXJCLEVBQWlDO1FBQy9CVSxXQUFXLENBQUNILE1BQUQsQ0FBWDtNQUNEO0lBQ0Y7RUFDRjs7RUFFRCxJQUFJSSxJQUFJLEdBQUdaLGlCQUFpQixDQUFDWSxJQUE3Qjs7RUFDQSxJQUFJQSxJQUFJLEtBQUtWLFNBQWIsRUFBd0I7SUFDdEJVLElBQUksR0FBR1osaUJBQWlCLENBQUNhLEtBQXpCO0VBQ0QsQ0FGRCxNQUVPO0lBQ0xqQixNQUFNLENBQUNPLFdBQVAsQ0FBbUJILGlCQUFpQixDQUFDYSxLQUFyQyxFQUE0Q1gsU0FBNUM7RUFDRDs7RUFDRCxJQUFJVSxJQUFJLEtBQUtWLFNBQWIsRUFBd0I7SUFDdEJVLElBQUksR0FBR0EsSUFBSSxDQUFDSixNQUFaOztJQUNBLElBQUksQ0FBQ0osS0FBSyxDQUFDQyxPQUFOLENBQWNPLElBQWQsQ0FBTCxFQUEwQjtNQUN4QmhCLE1BQU0sQ0FBQ2dCLElBQUQsQ0FBTjtNQUNBQSxJQUFJLEdBQUcsQ0FBQ0EsSUFBRCxDQUFQO0lBQ0Q7O0lBQ0QsSUFBSUEsSUFBSSxDQUFDRixNQUFMLEtBQWdCLENBQXBCLEVBQXVCO01BQ3JCLE9BQU9WLGlCQUFpQixDQUFDWSxJQUF6QjtJQUNELENBRkQsTUFFTztNQUNMWixpQkFBaUIsQ0FBQ1ksSUFBbEIsR0FBeUJBLElBQXpCOztNQUNBLEtBQUssTUFBTUosTUFBWCxJQUFxQkksSUFBckIsRUFBMkI7UUFDekJELFdBQVcsQ0FBQ0gsTUFBRCxDQUFYO01BQ0Q7SUFDRjs7SUFDRCxPQUFPUixpQkFBaUIsQ0FBQ2EsS0FBekI7RUFDRDs7RUFFRCxJQUFJQyxNQUFNLEdBQUdkLGlCQUFpQixDQUFDYyxNQUEvQjs7RUFDQSxJQUFJQSxNQUFNLEtBQUtaLFNBQWYsRUFBMEI7SUFDeEJZLE1BQU0sR0FBR2QsaUJBQWlCLENBQUNlLE9BQTNCO0VBQ0QsQ0FGRCxNQUVPO0lBQ0xuQixNQUFNLENBQUNPLFdBQVAsQ0FBbUJILGlCQUFpQixDQUFDZSxPQUFyQyxFQUE4Q2IsU0FBOUM7RUFDRDs7RUFDRCxJQUFJWSxNQUFNLEtBQUtaLFNBQWYsRUFBMEI7SUFDeEJZLE1BQU0sR0FBR0EsTUFBTSxDQUFDTixNQUFoQjs7SUFDQSxJQUFJLENBQUNKLEtBQUssQ0FBQ0MsT0FBTixDQUFjUyxNQUFkLENBQUwsRUFBNEI7TUFDMUJsQixNQUFNLENBQUNrQixNQUFELENBQU47TUFDQUEsTUFBTSxHQUFHLENBQUNBLE1BQUQsQ0FBVDtJQUNEOztJQUNELElBQUlBLE1BQU0sQ0FBQ0osTUFBUCxLQUFrQixDQUF0QixFQUF5QjtNQUN2QixPQUFPVixpQkFBaUIsQ0FBQ2MsTUFBekI7SUFDRCxDQUZELE1BRU87TUFDTGQsaUJBQWlCLENBQUNjLE1BQWxCLEdBQTJCQSxNQUEzQjs7TUFDQSxLQUFLLE1BQU1OLE1BQVgsSUFBcUJNLE1BQXJCLEVBQTZCO1FBQzNCSCxXQUFXLENBQUNILE1BQUQsQ0FBWDtNQUNEO0lBQ0Y7O0lBQ0QsT0FBT1IsaUJBQWlCLENBQUNlLE9BQXpCO0VBQ0Q7O0VBRUQsSUFBSUMsV0FBVyxHQUFHaEIsaUJBQWlCLENBQUNnQixXQUFwQzs7RUFDQSxJQUFJQSxXQUFXLEtBQUtkLFNBQXBCLEVBQStCO0lBQzdCLElBQUksQ0FBQ0UsS0FBSyxDQUFDQyxPQUFOLENBQWNXLFdBQWQsQ0FBTCxFQUFpQztNQUMvQkEsV0FBVyxHQUFHLENBQUNBLFdBQUQsQ0FBZDtJQUNEOztJQUNELE1BQU1DLGdCQUFnQixHQUFHRCxXQUF6QjtJQUNBQSxXQUFXLEdBQUcsRUFBZDs7SUFDQSxLQUFLLElBQUlFLGNBQVQsSUFBMkJELGdCQUEzQixFQUE2QztNQUMzQyxJQUFJQyxjQUFjLEtBQUssSUFBdkIsRUFBNkI7UUFDM0I7TUFDRDs7TUFDREEsY0FBYyxHQUFHQSxjQUFjLENBQUNWLE1BQWhDOztNQUNBLElBQUlKLEtBQUssQ0FBQ0MsT0FBTixDQUFjYSxjQUFkLENBQUosRUFBbUM7UUFDakNGLFdBQVcsQ0FBQ1AsSUFBWixDQUFpQixHQUFHUyxjQUFwQjtNQUNELENBRkQsTUFFTztRQUNMdEIsTUFBTSxDQUFDc0IsY0FBRCxDQUFOO1FBQ0FGLFdBQVcsQ0FBQ1AsSUFBWixDQUFpQlMsY0FBakI7TUFDRDtJQUNGOztJQUNELElBQUlGLFdBQVcsQ0FBQ04sTUFBWixLQUF1QixDQUEzQixFQUE4QjtNQUM1QixPQUFPVixpQkFBaUIsQ0FBQ2dCLFdBQXpCO0lBQ0QsQ0FGRCxNQUVPO01BQ0xoQixpQkFBaUIsQ0FBQ2dCLFdBQWxCLEdBQWdDQSxXQUFoQzs7TUFDQSxLQUFLLE1BQU1SLE1BQVgsSUFBcUJRLFdBQXJCLEVBQWtDO1FBQ2hDTCxXQUFXLENBQUNILE1BQUQsQ0FBWDtNQUNEO0lBQ0Y7RUFDRjs7RUFFRCxJQUFJVyxxQkFBcUIsR0FBR25CLGlCQUFpQixDQUFDbUIscUJBQTlDOztFQUNBLElBQUlBLHFCQUFxQixLQUFLakIsU0FBOUIsRUFBeUM7SUFDdkMsSUFBSSxDQUFDRSxLQUFLLENBQUNDLE9BQU4sQ0FBY2MscUJBQWQsQ0FBTCxFQUEyQztNQUN6Q0EscUJBQXFCLEdBQUcsQ0FBQ0EscUJBQUQsQ0FBeEI7SUFDRDs7SUFDRCxNQUFNQywwQkFBMEIsR0FBR0QscUJBQW5DO0lBQ0FBLHFCQUFxQixHQUFHLEVBQXhCOztJQUNBLEtBQUssSUFBSUQsY0FBVCxJQUEyQkUsMEJBQTNCLEVBQXVEO01BQ3JELElBQUlGLGNBQWMsS0FBSyxJQUF2QixFQUE2QjtRQUMzQjtNQUNEOztNQUNEQSxjQUFjLEdBQUdBLGNBQWMsQ0FBQ1YsTUFBaEM7O01BQ0EsSUFBSUosS0FBSyxDQUFDQyxPQUFOLENBQWNhLGNBQWQsQ0FBSixFQUFtQztRQUNqQ0MscUJBQXFCLENBQUNWLElBQXRCLENBQTJCLEdBQUdTLGNBQTlCO01BQ0QsQ0FGRCxNQUVPO1FBQ0x0QixNQUFNLENBQUNzQixjQUFELENBQU47UUFDQUMscUJBQXFCLENBQUNWLElBQXRCLENBQTJCUyxjQUEzQjtNQUNEO0lBQ0Y7O0lBQ0QsSUFBSUMscUJBQXFCLENBQUNULE1BQXRCLEtBQWlDLENBQXJDLEVBQXdDO01BQ3RDLE9BQU9WLGlCQUFpQixDQUFDbUIscUJBQXpCO0lBQ0QsQ0FGRCxNQUVPO01BQ0xuQixpQkFBaUIsQ0FBQ21CLHFCQUFsQixHQUEwQ0EscUJBQTFDOztNQUNBLEtBQUssTUFBTVgsTUFBWCxJQUFxQlcscUJBQXJCLEVBQTRDO1FBQzFDUixXQUFXLENBQUNILE1BQUQsQ0FBWDtNQUNEO0lBQ0Y7RUFDRjtBQUNGOztBQUVELE9BQU8sU0FBU2EsWUFBVCxDQUFzQkMsT0FBdEIsRUFBMEM7RUFDL0N4QixpQkFBaUIsQ0FBQ3dCLE9BQUQsQ0FBakI7RUFFQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0MsU0FBMUI7RUFDQTNCLE1BQU0sQ0FBQzJCLFNBQUQsQ0FBTjtFQUNBO0lBQ0V6QixpQkFBaUIsQ0FBQ3lCLFNBQUQsQ0FBakI7SUFFQTNCLE1BQU0sQ0FBQ08sV0FBUCxDQUFtQm9CLFNBQVMsQ0FBQ0Msb0JBQTdCLEVBQW1EdEIsU0FBbkQ7RUFDRDtFQUVELE1BQU11QixLQUFLLEdBQUdILE9BQU8sQ0FBQ0csS0FBdEI7RUFDQTdCLE1BQU0sQ0FBQzZCLEtBQUQsQ0FBTjtFQUNBO0lBQ0UzQixpQkFBaUIsQ0FBQzJCLEtBQUQsQ0FBakI7SUFFQTdCLE1BQU0sQ0FBQ08sV0FBUCxDQUFtQnNCLEtBQUssQ0FBQ0Qsb0JBQXpCLEVBQStDdEIsU0FBL0M7RUFDRDtFQUVELElBQUl3QixnQkFBZ0IsR0FBR0osT0FBTyxDQUFDSSxnQkFBL0I7RUFDQTlCLE1BQU0sQ0FBQzhCLGdCQUFELENBQU47RUFDQTtJQUNFQSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNDLE1BQXBDO0lBQ0EvQixNQUFNLENBQUM4QixnQkFBRCxDQUFOO0lBRUEsSUFBSUUsT0FBTyxHQUFHRixnQkFBZ0IsQ0FBQ0UsT0FBL0I7SUFDQWhDLE1BQU0sQ0FBQ2dDLE9BQUQsQ0FBTjtJQUNBO01BQ0VBLE9BQU8sR0FBR0EsT0FBTyxDQUFDQyxNQUFsQjtNQUNBakMsTUFBTSxDQUFDUSxLQUFLLENBQUNDLE9BQU4sQ0FBY3VCLE9BQWQsQ0FBRCxDQUFOOztNQUNBLEtBQUssTUFBTUMsTUFBWCxJQUFxQkQsT0FBckIsRUFBOEI7UUFDNUIsTUFBTUUsSUFBSSxHQUFHRCxNQUFNLENBQUNDLElBQXBCO1FBQ0FsQyxNQUFNLENBQUNrQyxJQUFELENBQU47UUFDQTtVQUNFLE1BQU1DLFlBQVksR0FBR0QsSUFBSSxDQUFDQyxZQUExQjtVQUNBbkMsTUFBTSxDQUFDbUMsWUFBRCxDQUFOO1VBQ0E7WUFDRSxJQUFJQSxZQUFZLENBQUNDLFVBQWIsS0FBNEI5QixTQUFoQyxFQUEyQztjQUN6Q04sTUFBTSxDQUFDTyxXQUFQLENBQW1CNEIsWUFBWSxDQUFDZixXQUFoQyxFQUE2Q2QsU0FBN0M7Y0FDQTZCLFlBQVksQ0FBQ2YsV0FBYixHQUEyQmUsWUFBWSxDQUFDQyxVQUF4QztjQUNBLE9BQU9ELFlBQVksQ0FBQ0MsVUFBcEI7WUFDRDs7WUFFRCxJQUFJRCxZQUFZLENBQUN4QixTQUFiLEtBQTJCTCxTQUEvQixFQUEwQztjQUN4Q04sTUFBTSxDQUFDTyxXQUFQLENBQW1CNEIsWUFBWSxDQUFDOUIsVUFBaEMsRUFBNENDLFNBQTVDO2NBQ0E2QixZQUFZLENBQUM5QixVQUFiLEdBQTBCOEIsWUFBWSxDQUFDeEIsU0FBdkM7Y0FDQSxPQUFPd0IsWUFBWSxDQUFDeEIsU0FBcEI7WUFDRDtVQUNGO1VBRUQsTUFBTVAsaUJBQWlCLEdBQUc4QixJQUFJLENBQUM5QixpQkFBL0I7VUFDQUosTUFBTSxDQUFDSSxpQkFBRCxDQUFOO1VBQ0FELHNCQUFzQixDQUFDQyxpQkFBRCxDQUF0QjtRQUNEO01BQ0Y7O01BQ0QwQixnQkFBZ0IsQ0FBQ0UsT0FBakIsR0FBMkJBLE9BQTNCO0lBQ0Q7SUFFRE4sT0FBTyxDQUFDSSxnQkFBUixHQUEyQkEsZ0JBQTNCO0VBQ0Q7RUFFRCxNQUFNTyxXQUFXLEdBQUdYLE9BQU8sQ0FBQ1csV0FBNUI7O0VBQ0EsSUFBSUEsV0FBVyxLQUFLL0IsU0FBcEIsRUFBK0I7SUFDN0JILHNCQUFzQixDQUFDa0MsV0FBRCxDQUF0QjtJQUVBLElBQUlDLGlCQUFpQixHQUFHRCxXQUFXLENBQUNDLGlCQUFwQzs7SUFDQSxJQUFJQSxpQkFBaUIsS0FBS2hDLFNBQTFCLEVBQXFDO01BQ25DSCxzQkFBc0IsQ0FBQ21DLGlCQUFELENBQXRCOztNQUNBLElBQ0VDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjRixpQkFBZCxFQUFpQ0csTUFBakMsQ0FBeUNDLEtBQUQsSUFBV0EsS0FBSyxLQUFLcEMsU0FBN0QsRUFDR1EsTUFESCxLQUNjLENBRmhCLEVBR0U7UUFDQSxPQUFPdUIsV0FBVyxDQUFDQyxpQkFBbkI7TUFDRDtJQUNGOztJQUVELElBQ0VDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxXQUFkLEVBQTJCSSxNQUEzQixDQUFtQ0MsS0FBRCxJQUFXQSxLQUFLLEtBQUtwQyxTQUF2RCxFQUNHUSxNQURILEtBQ2MsQ0FGaEIsRUFHRTtNQUNBLE9BQU9ZLE9BQU8sQ0FBQ1csV0FBZjtJQUNEO0VBQ0Y7QUFDRjs7QUFFRCxTQUFTdEIsV0FBVCxDQUFxQkgsTUFBckIsRUFBa0M7RUFDaENYLHFCQUFxQixDQUFDVyxNQUFELEVBQVMsZUFBVCxDQUFyQjtBQUNEIn0=
|
|
207
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsImNsZWFuRGVjb21wdGVOb21pbmF0aWYiLCJkZWNvbXB0ZU5vbWluYXRpZiIsIm5vblZvdGFudHMiLCJ1bmRlZmluZWQiLCJzdHJpY3RFcXVhbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vblZvdGFudHNBcnJheSIsIm5vblZvdGFudCIsInZvdGFudCIsInB1c2giLCJsZW5ndGgiLCJjbGVhblZvdGFudCIsInBvdXIiLCJwb3VycyIsImNvbnRyZSIsImNvbnRyZXMiLCJhYnN0ZW50aW9ucyIsImFic3RlbnRpb25zQXJyYXkiLCJhYnNlbnRpb25zSXRlbSIsIm5vblZvdGFudHNWb2xvbnRhaXJlcyIsIm5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5IiwiY2xlYW5TY3J1dGluIiwic2NydXRpbiIsImRlbWFuZGV1ciIsInJlZmVyZW5jZUxlZ2lzbGF0aXZlIiwib2JqZXQiLCJ2ZW50aWxhdGlvblZvdGVzIiwib3JnYW5lIiwiZ3JvdXBlcyIsImdyb3VwZSIsInZvdGUiLCJkZWNvbXB0ZVZvaXgiLCJhYnN0ZW50aW9uIiwibWlzZUF1UG9pbnQiLCJkeXNmb25jdGlvbm5lbWVudCIsIk9iamVjdCIsInZhbHVlcyIsImZpbHRlciIsInZhbHVlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL3NjcnV0aW5zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSwgY2xlYW5YbWxBcnRlZmFjdHMgfSBmcm9tIFwiLi94bWxcIlxuXG5mdW5jdGlvbiBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmOiBhbnkpIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZGVjb21wdGVOb21pbmF0aWYpXG5cbiAgbGV0IG5vblZvdGFudHMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzXG4gIGlmIChub25Wb3RhbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG5vblZvdGFudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChub25Wb3RhbnRzLCBcIjBcIilcbiAgICAgIG5vblZvdGFudHMgPSBbXVxuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9uVm90YW50cykpIHtcbiAgICAgIGFzc2VydChub25Wb3RhbnRzKVxuICAgICAgbm9uVm90YW50cyA9IFtub25Wb3RhbnRzXVxuICAgIH1cbiAgICBjb25zdCBub25Wb3RhbnRzQXJyYXkgPSBub25Wb3RhbnRzXG4gICAgbm9uVm90YW50cyA9IFtdXG4gICAgZm9yIChsZXQgbm9uVm90YW50IG9mIG5vblZvdGFudHNBcnJheSkge1xuICAgICAgaWYgKG5vblZvdGFudCA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbm9uVm90YW50ID0gbm9uVm90YW50LnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9uVm90YW50KSkge1xuICAgICAgICBub25Wb3RhbnRzLnB1c2goLi4ubm9uVm90YW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KG5vblZvdGFudClcbiAgICAgICAgbm9uVm90YW50cy5wdXNoKG5vblZvdGFudClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vblZvdGFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50c1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzID0gbm9uVm90YW50c1xuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2Ygbm9uVm90YW50cykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBvdXIgPSBkZWNvbXB0ZU5vbWluYXRpZi5wb3VyXG4gIGlmIChwb3VyID09PSB1bmRlZmluZWQpIHtcbiAgICBwb3VyID0gZGVjb21wdGVOb21pbmF0aWYucG91cnNcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVjb21wdGVOb21pbmF0aWYucG91cnMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAocG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcG91ciA9IHBvdXIudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvdXIpKSB7XG4gICAgICBhc3NlcnQocG91cilcbiAgICAgIHBvdXIgPSBbcG91cl1cbiAgICB9XG4gICAgaWYgKHBvdXIubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYucG91clxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5wb3VyID0gcG91clxuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2YgcG91cikge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5wb3Vyc1xuICB9XG5cbiAgbGV0IGNvbnRyZSA9IGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICBpZiAoY29udHJlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZXMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAoY29udHJlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBjb250cmUudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyZSkpIHtcbiAgICAgIGFzc2VydChjb250cmUpXG4gICAgICBjb250cmUgPSBbY29udHJlXVxuICAgIH1cbiAgICBpZiAoY29udHJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmUgPSBjb250cmVcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIGNvbnRyZSkge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH1cblxuICBsZXQgYWJzdGVudGlvbnMgPSBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uc1xuICBpZiAoYWJzdGVudGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhYnN0ZW50aW9ucykpIHtcbiAgICAgIGFic3RlbnRpb25zID0gW2Fic3RlbnRpb25zXVxuICAgIH1cbiAgICBjb25zdCBhYnN0ZW50aW9uc0FycmF5ID0gYWJzdGVudGlvbnNcbiAgICBhYnN0ZW50aW9ucyA9IFtdXG4gICAgZm9yIChsZXQgYWJzZW50aW9uc0l0ZW0gb2YgYWJzdGVudGlvbnNBcnJheSkge1xuICAgICAgaWYgKGFic2VudGlvbnNJdGVtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhYnNlbnRpb25zSXRlbSA9IGFic2VudGlvbnNJdGVtLnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWJzZW50aW9uc0l0ZW0pKSB7XG4gICAgICAgIGFic3RlbnRpb25zLnB1c2goLi4uYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWJzZW50aW9uc0l0ZW0pXG4gICAgICAgIGFic3RlbnRpb25zLnB1c2goYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhYnN0ZW50aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uc1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9ucyA9IGFic3RlbnRpb25zXG4gICAgICBmb3IgKGNvbnN0IHZvdGFudCBvZiBhYnN0ZW50aW9ucykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IG5vblZvdGFudHNWb2xvbnRhaXJlcyA9IGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNWb2xvbnRhaXJlc1xuICBpZiAobm9uVm90YW50c1ZvbG9udGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobm9uVm90YW50c1ZvbG9udGFpcmVzKSkge1xuICAgICAgbm9uVm90YW50c1ZvbG9udGFpcmVzID0gW25vblZvdGFudHNWb2xvbnRhaXJlc11cbiAgICB9XG4gICAgY29uc3Qgbm9uVm90YW50c1ZvbG9udGFpcmVzQXJyYXkgPSBub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICBub25Wb3RhbnRzVm9sb250YWlyZXMgPSBbXVxuICAgIGZvciAobGV0IGFic2VudGlvbnNJdGVtIG9mIG5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5KSB7XG4gICAgICBpZiAoYWJzZW50aW9uc0l0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFic2VudGlvbnNJdGVtID0gYWJzZW50aW9uc0l0ZW0udm90YW50XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhYnNlbnRpb25zSXRlbSkpIHtcbiAgICAgICAgbm9uVm90YW50c1ZvbG9udGFpcmVzLnB1c2goLi4uYWJzZW50aW9uc0l0ZW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWJzZW50aW9uc0l0ZW0pXG4gICAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcy5wdXNoKGFic2VudGlvbnNJdGVtKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9uVm90YW50c1ZvbG9udGFpcmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNWb2xvbnRhaXJlc1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXMgPSBub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIG5vblZvdGFudHNWb2xvbnRhaXJlcykge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblNjcnV0aW4oc2NydXRpbjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKHNjcnV0aW4pXG5cbiAgY29uc3QgZGVtYW5kZXVyID0gc2NydXRpbi5kZW1hbmRldXJcbiAgYXNzZXJ0KGRlbWFuZGV1cilcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlbWFuZGV1cilcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZW1hbmRldXIucmVmZXJlbmNlTGVnaXNsYXRpdmUsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGNvbnN0IG9iamV0ID0gc2NydXRpbi5vYmpldFxuICBhc3NlcnQob2JqZXQpXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhvYmpldClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmpldC5yZWZlcmVuY2VMZWdpc2xhdGl2ZSwgdW5kZWZpbmVkKVxuICB9XG5cbiAgbGV0IHZlbnRpbGF0aW9uVm90ZXMgPSBzY3J1dGluLnZlbnRpbGF0aW9uVm90ZXNcbiAgYXNzZXJ0KHZlbnRpbGF0aW9uVm90ZXMpXG4gIHtcbiAgICB2ZW50aWxhdGlvblZvdGVzID0gdmVudGlsYXRpb25Wb3Rlcy5vcmdhbmVcbiAgICBhc3NlcnQodmVudGlsYXRpb25Wb3RlcylcblxuICAgIGxldCBncm91cGVzID0gdmVudGlsYXRpb25Wb3Rlcy5ncm91cGVzXG4gICAgYXNzZXJ0KGdyb3VwZXMpXG4gICAge1xuICAgICAgZ3JvdXBlcyA9IGdyb3VwZXMuZ3JvdXBlXG4gICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShncm91cGVzKSlcbiAgICAgIGZvciAoY29uc3QgZ3JvdXBlIG9mIGdyb3VwZXMpIHtcbiAgICAgICAgY29uc3Qgdm90ZSA9IGdyb3VwZS52b3RlXG4gICAgICAgIGFzc2VydCh2b3RlKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgZGVjb21wdGVWb2l4ID0gdm90ZS5kZWNvbXB0ZVZvaXhcbiAgICAgICAgICBhc3NlcnQoZGVjb21wdGVWb2l4KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChkZWNvbXB0ZVZvaXguYWJzdGVudGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZVZvaXguYWJzdGVudGlvbnMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgZGVjb21wdGVWb2l4LmFic3RlbnRpb25zID0gZGVjb21wdGVWb2l4LmFic3RlbnRpb25cbiAgICAgICAgICAgICAgZGVsZXRlIGRlY29tcHRlVm9peC5hYnN0ZW50aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZWNvbXB0ZVZvaXgubm9uVm90YW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlVm9peC5ub25Wb3RhbnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGRlY29tcHRlVm9peC5ub25Wb3RhbnRzID0gZGVjb21wdGVWb2l4Lm5vblZvdGFudFxuICAgICAgICAgICAgICBkZWxldGUgZGVjb21wdGVWb2l4Lm5vblZvdGFudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRlY29tcHRlTm9taW5hdGlmID0gdm90ZS5kZWNvbXB0ZU5vbWluYXRpZlxuICAgICAgICAgIGFzc2VydChkZWNvbXB0ZU5vbWluYXRpZilcbiAgICAgICAgICBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2ZW50aWxhdGlvblZvdGVzLmdyb3VwZXMgPSBncm91cGVzXG4gICAgfVxuXG4gICAgc2NydXRpbi52ZW50aWxhdGlvblZvdGVzID0gdmVudGlsYXRpb25Wb3Rlc1xuICB9XG5cbiAgY29uc3QgbWlzZUF1UG9pbnQgPSBzY3J1dGluLm1pc2VBdVBvaW50XG4gIGlmIChtaXNlQXVQb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5EZWNvbXB0ZU5vbWluYXRpZihtaXNlQXVQb2ludClcblxuICAgIGxldCBkeXNmb25jdGlvbm5lbWVudCA9IG1pc2VBdVBvaW50LmR5c2ZvbmN0aW9ubmVtZW50XG4gICAgaWYgKGR5c2ZvbmN0aW9ubmVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuRGVjb21wdGVOb21pbmF0aWYoZHlzZm9uY3Rpb25uZW1lbnQpXG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZHlzZm9uY3Rpb25uZW1lbnQpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSBtaXNlQXVQb2ludC5keXNmb25jdGlvbm5lbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC52YWx1ZXMobWlzZUF1UG9pbnQpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBzY3J1dGluLm1pc2VBdVBvaW50XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuVm90YW50KHZvdGFudDogYW55KSB7XG4gIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSh2b3RhbnQs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
|
package/lib/cleaners/xml.js
CHANGED
|
@@ -1,107 +1,73 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.symbol.js");
|
|
4
|
-
|
|
5
4
|
require("core-js/modules/es.symbol.description.js");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.object.to-string.js");
|
|
8
|
-
|
|
9
6
|
require("core-js/modules/es.symbol.iterator.js");
|
|
10
|
-
|
|
11
7
|
require("core-js/modules/es.array.iterator.js");
|
|
12
|
-
|
|
13
8
|
require("core-js/modules/es.string.iterator.js");
|
|
14
|
-
|
|
15
9
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
16
|
-
|
|
17
10
|
require("core-js/modules/es.array.slice.js");
|
|
18
|
-
|
|
19
11
|
require("core-js/modules/es.function.name.js");
|
|
20
|
-
|
|
21
12
|
require("core-js/modules/es.array.from.js");
|
|
22
|
-
|
|
23
13
|
require("core-js/modules/es.regexp.exec.js");
|
|
24
|
-
|
|
25
14
|
require("core-js/modules/es.object.define-property.js");
|
|
26
|
-
|
|
27
15
|
Object.defineProperty(exports, "__esModule", {
|
|
28
16
|
value: true
|
|
29
17
|
});
|
|
30
18
|
exports.cleanBooleanAttribute = cleanBooleanAttribute;
|
|
31
19
|
exports.cleanXmlArtefacts = cleanXmlArtefacts;
|
|
32
|
-
|
|
33
20
|
require("core-js/modules/es.array.concat.js");
|
|
34
|
-
|
|
35
21
|
require("core-js/modules/es.object.entries.js");
|
|
36
|
-
|
|
37
22
|
require("core-js/modules/es.array.is-array.js");
|
|
38
|
-
|
|
39
23
|
require("core-js/modules/es.object.keys.js");
|
|
40
|
-
|
|
41
24
|
var _assert = _interopRequireDefault(require("assert"));
|
|
42
|
-
|
|
43
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
44
|
-
|
|
45
26
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
46
|
-
|
|
47
27
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
48
|
-
|
|
49
28
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
50
|
-
|
|
51
29
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
52
|
-
|
|
53
30
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
54
|
-
|
|
55
31
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
56
|
-
|
|
57
32
|
var booleanByString = {
|
|
58
33
|
"false": false,
|
|
59
34
|
"true": true
|
|
60
35
|
};
|
|
61
|
-
|
|
62
36
|
function cleanBooleanAttribute(o, key) {
|
|
63
37
|
var stringValue = o[key];
|
|
64
|
-
|
|
65
38
|
if (stringValue === undefined || stringValue === null) {
|
|
66
39
|
return undefined;
|
|
67
40
|
}
|
|
68
|
-
|
|
69
41
|
var booleanValue = booleanByString[stringValue];
|
|
70
|
-
|
|
71
42
|
_assert["default"].notStrictEqual(booleanValue, undefined, "Invalid boolean value: ".concat(key, " = ").concat(stringValue));
|
|
72
|
-
|
|
73
43
|
o[key] = booleanValue;
|
|
74
44
|
return booleanValue;
|
|
75
|
-
}
|
|
76
|
-
|
|
45
|
+
}
|
|
77
46
|
|
|
47
|
+
/// Remove XML fields that have no use in JSON.
|
|
78
48
|
function cleanXmlArtefacts(o) {
|
|
79
49
|
// Remove namespaces.
|
|
80
|
-
var xmlns = o["@xmlns"];
|
|
81
50
|
|
|
51
|
+
var xmlns = o["@xmlns"];
|
|
82
52
|
if (xmlns !== undefined) {
|
|
83
53
|
_assert["default"].strictEqual(xmlns, "http://schemas.assemblee-nationale.fr/referentiel");
|
|
84
|
-
|
|
85
54
|
delete o["@xmlns"];
|
|
86
55
|
}
|
|
87
|
-
|
|
88
56
|
var xmlnsXsi = o["@xmlns:xsi"];
|
|
89
|
-
|
|
90
57
|
if (xmlnsXsi !== undefined) {
|
|
91
58
|
_assert["default"].strictEqual(xmlnsXsi, "http://www.w3.org/2001/XMLSchema-instance");
|
|
92
|
-
|
|
93
59
|
delete o["@xmlns:xsi"];
|
|
94
|
-
}
|
|
60
|
+
}
|
|
95
61
|
|
|
62
|
+
// Remove null or empty items.
|
|
96
63
|
|
|
97
64
|
for (var _i = 0, _Object$entries = Object.entries(o); _i < _Object$entries.length; _i++) {
|
|
98
65
|
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
66
|
+
_key = _Object$entries$_i[0],
|
|
67
|
+
value = _Object$entries$_i[1];
|
|
102
68
|
if (value === null || value !== undefined && (value["@xsi:nil"] === "true" || Array.isArray(value) && value.length === 0 || value.constructor === Object && Object.keys(value).length === 0)) {
|
|
103
69
|
delete o[_key];
|
|
104
70
|
}
|
|
105
71
|
}
|
|
106
72
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib29sZWFuQnlTdHJpbmciLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJvIiwia2V5Iiwic3RyaW5nVmFsdWUiLCJ1bmRlZmluZWQiLCJib29sZWFuVmFsdWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwieG1sbnMiLCJzdHJpY3RFcXVhbCIsInhtbG5zWHNpIiwiT2JqZWN0IiwiZW50cmllcyIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiY29uc3RydWN0b3IiLCJrZXlzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL3htbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5jb25zdCBib29sZWFuQnlTdHJpbmc6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICBmYWxzZTogZmFsc2UsXG4gIHRydWU6IHRydWUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoXG4gIG86IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIGtleTogc3RyaW5nLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gb1trZXldXG4gIGlmIChzdHJpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IGJvb2xlYW5CeVN0cmluZ1tzdHJpbmdWYWx1ZV1cbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIGJvb2xlYW5WYWx1ZSxcbiAgICB1bmRlZmluZWQsXG4gICAgYEludmFsaWQgYm9vbGVhbiB2YWx1ZTogJHtrZXl9ID0gJHtzdHJpbmdWYWx1ZX1gLFxuICApXG4gIG9ba2V5XSA9IGJvb2xlYW5WYWx1ZVxuICByZXR1cm4gYm9vbGVhblZhbHVlXG59XG5cbi8vLyBSZW1vdmUgWE1MIGZpZWxkcyB0aGF0IGhhdmUgbm8gdXNlIGluIEpTT04uXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5YbWxBcnRlZmFjdHMobzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAvLyBSZW1vdmUgbmFtZXNwYWNlcy5cblxuICBjb25zdCB4bWxucyA9IG9bXCJAeG1sbnNcIl1cbiAgaWYgKHhtbG5zICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB4bWxucyxcbiAgICAgIFwiaHR0cDovL3NjaGVtYXMuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9yZWZlcmVudGllbFwiLFxuICAgIClcbiAgICBkZWxldGUgb1tcIkB4bWxuc1wiXVxuICB9XG5cbiAgY29uc3QgeG1sbnNYc2kgPSBvW1wiQHhtbG5zOnhzaVwiXVxuICBpZiAoeG1sbnNYc2kgIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh4bWxuc1hzaSwgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiKVxuICAgIGRlbGV0ZSBvW1wiQHhtbG5zOnhzaVwiXVxuICB9XG5cbiAgLy8gUmVtb3ZlIG51bGwgb3IgZW1wdHkgaXRlbXMuXG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobykpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgKHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHZhbHVlW1wiQHhzaTpuaWxcIl0gPT09IFwidHJ1ZVwiIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgb1trZXldXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFM0IsSUFBTUEsZUFBMkMsR0FBRztFQUNsRCxTQUFPLEtBQUs7RUFDWixRQUFNO0FBQ1IsQ0FBQztBQUVNLFNBQVNDLHFCQUFxQixDQUNuQ0MsQ0FBeUIsRUFDekJDLEdBQVcsRUFDVTtFQUNyQixJQUFNQyxXQUFXLEdBQUdGLENBQUMsQ0FBQ0MsR0FBRyxDQUFDO0VBQzFCLElBQUlDLFdBQVcsS0FBS0MsU0FBUyxJQUFJRCxXQUFXLEtBQUssSUFBSSxFQUFFO0lBQ3JELE9BQU9DLFNBQVM7RUFDbEI7RUFDQSxJQUFNQyxZQUFZLEdBQUdOLGVBQWUsQ0FBQ0ksV0FBVyxDQUFDO0VBQ2pERyxrQkFBTSxDQUFDQyxjQUFjLENBQ25CRixZQUFZLEVBQ1pELFNBQVMsbUNBQ2lCRixHQUFHLGdCQUFNQyxXQUFXLEVBQy9DO0VBQ0RGLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLEdBQUdHLFlBQVk7RUFDckIsT0FBT0EsWUFBWTtBQUNyQjs7QUFFQTtBQUNPLFNBQVNHLGlCQUFpQixDQUFDUCxDQUF5QixFQUFRO0VBQ2pFOztFQUVBLElBQU1RLEtBQUssR0FBR1IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztFQUN6QixJQUFJUSxLQUFLLEtBQUtMLFNBQVMsRUFBRTtJQUN2QkUsa0JBQU0sQ0FBQ0ksV0FBVyxDQUNoQkQsS0FBSyxFQUNMLG1EQUFtRCxDQUNwRDtJQUNELE9BQU9SLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDcEI7RUFFQSxJQUFNVSxRQUFRLEdBQUdWLENBQUMsQ0FBQyxZQUFZLENBQUM7RUFDaEMsSUFBSVUsUUFBUSxLQUFLUCxTQUFTLEVBQUU7SUFDMUJFLGtCQUFNLENBQUNJLFdBQVcsQ0FBQ0MsUUFBUSxFQUFFLDJDQUEyQyxDQUFDO0lBQ3pFLE9BQU9WLENBQUMsQ0FBQyxZQUFZLENBQUM7RUFDeEI7O0VBRUE7O0VBRUEsbUNBQTJCVyxNQUFNLENBQUNDLE9BQU8sQ0FBQ1osQ0FBQyxDQUFDLHFDQUFFO0lBQXpDO01BQU9DLElBQUc7TUFBRVksS0FBSztJQUNwQixJQUNFQSxLQUFLLEtBQUssSUFBSSxJQUNiQSxLQUFLLEtBQUtWLFNBQVMsS0FDakJVLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxNQUFNLElBQzFCQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDLElBQUlBLEtBQUssQ0FBQ0csTUFBTSxLQUFLLENBQUUsSUFDM0NILEtBQUssQ0FBQ0ksV0FBVyxLQUFLTixNQUFNLElBQUlBLE1BQU0sQ0FBQ08sSUFBSSxDQUFDTCxLQUFLLENBQUMsQ0FBQ0csTUFBTSxLQUFLLENBQUUsQ0FBRSxFQUN2RTtNQUNBLE9BQU9oQixDQUFDLENBQUNDLElBQUcsQ0FBQztJQUNmO0VBQ0Y7QUFDRiJ9
|
package/lib/cleaners/xml.mjs
CHANGED
|
@@ -5,33 +5,31 @@ const booleanByString = {
|
|
|
5
5
|
};
|
|
6
6
|
export function cleanBooleanAttribute(o, key) {
|
|
7
7
|
const stringValue = o[key];
|
|
8
|
-
|
|
9
8
|
if (stringValue === undefined || stringValue === null) {
|
|
10
9
|
return undefined;
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
const booleanValue = booleanByString[stringValue];
|
|
14
12
|
assert.notStrictEqual(booleanValue, undefined, `Invalid boolean value: ${key} = ${stringValue}`);
|
|
15
13
|
o[key] = booleanValue;
|
|
16
14
|
return booleanValue;
|
|
17
|
-
}
|
|
15
|
+
}
|
|
18
16
|
|
|
17
|
+
/// Remove XML fields that have no use in JSON.
|
|
19
18
|
export function cleanXmlArtefacts(o) {
|
|
20
19
|
// Remove namespaces.
|
|
21
|
-
const xmlns = o["@xmlns"];
|
|
22
20
|
|
|
21
|
+
const xmlns = o["@xmlns"];
|
|
23
22
|
if (xmlns !== undefined) {
|
|
24
23
|
assert.strictEqual(xmlns, "http://schemas.assemblee-nationale.fr/referentiel");
|
|
25
24
|
delete o["@xmlns"];
|
|
26
25
|
}
|
|
27
|
-
|
|
28
26
|
const xmlnsXsi = o["@xmlns:xsi"];
|
|
29
|
-
|
|
30
27
|
if (xmlnsXsi !== undefined) {
|
|
31
28
|
assert.strictEqual(xmlnsXsi, "http://www.w3.org/2001/XMLSchema-instance");
|
|
32
29
|
delete o["@xmlns:xsi"];
|
|
33
|
-
}
|
|
30
|
+
}
|
|
34
31
|
|
|
32
|
+
// Remove null or empty items.
|
|
35
33
|
|
|
36
34
|
for (const [key, value] of Object.entries(o)) {
|
|
37
35
|
if (value === null || value !== undefined && (value["@xsi:nil"] === "true" || Array.isArray(value) && value.length === 0 || value.constructor === Object && Object.keys(value).length === 0)) {
|
|
@@ -39,4 +37,4 @@ export function cleanXmlArtefacts(o) {
|
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJib29sZWFuQnlTdHJpbmciLCJmYWxzZSIsInRydWUiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJvIiwia2V5Iiwic3RyaW5nVmFsdWUiLCJ1bmRlZmluZWQiLCJib29sZWFuVmFsdWUiLCJub3RTdHJpY3RFcXVhbCIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwieG1sbnMiLCJzdHJpY3RFcXVhbCIsInhtbG5zWHNpIiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiY29uc3RydWN0b3IiLCJrZXlzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL3htbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5jb25zdCBib29sZWFuQnlTdHJpbmc6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICBmYWxzZTogZmFsc2UsXG4gIHRydWU6IHRydWUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoXG4gIG86IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIGtleTogc3RyaW5nLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gb1trZXldXG4gIGlmIChzdHJpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IGJvb2xlYW5CeVN0cmluZ1tzdHJpbmdWYWx1ZV1cbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIGJvb2xlYW5WYWx1ZSxcbiAgICB1bmRlZmluZWQsXG4gICAgYEludmFsaWQgYm9vbGVhbiB2YWx1ZTogJHtrZXl9ID0gJHtzdHJpbmdWYWx1ZX1gLFxuICApXG4gIG9ba2V5XSA9IGJvb2xlYW5WYWx1ZVxuICByZXR1cm4gYm9vbGVhblZhbHVlXG59XG5cbi8vLyBSZW1vdmUgWE1MIGZpZWxkcyB0aGF0IGhhdmUgbm8gdXNlIGluIEpTT04uXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5YbWxBcnRlZmFjdHMobzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAvLyBSZW1vdmUgbmFtZXNwYWNlcy5cblxuICBjb25zdCB4bWxucyA9IG9bXCJAeG1sbnNcIl1cbiAgaWYgKHhtbG5zICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB4bWxucyxcbiAgICAgIFwiaHR0cDovL3NjaGVtYXMuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9yZWZlcmVudGllbFwiLFxuICAgIClcbiAgICBkZWxldGUgb1tcIkB4bWxuc1wiXVxuICB9XG5cbiAgY29uc3QgeG1sbnNYc2kgPSBvW1wiQHhtbG5zOnhzaVwiXVxuICBpZiAoeG1sbnNYc2kgIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh4bWxuc1hzaSwgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiKVxuICAgIGRlbGV0ZSBvW1wiQHhtbG5zOnhzaVwiXVxuICB9XG5cbiAgLy8gUmVtb3ZlIG51bGwgb3IgZW1wdHkgaXRlbXMuXG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobykpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgKHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHZhbHVlW1wiQHhzaTpuaWxcIl0gPT09IFwidHJ1ZVwiIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgb1trZXldXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBRTNCLE1BQU1DLGVBQTJDLEdBQUc7RUFDbERDLEtBQUssRUFBRSxLQUFLO0VBQ1pDLElBQUksRUFBRTtBQUNSLENBQUM7QUFFRCxPQUFPLFNBQVNDLHFCQUFxQixDQUNuQ0MsQ0FBeUIsRUFDekJDLEdBQVcsRUFDVTtFQUNyQixNQUFNQyxXQUFXLEdBQUdGLENBQUMsQ0FBQ0MsR0FBRyxDQUFDO0VBQzFCLElBQUlDLFdBQVcsS0FBS0MsU0FBUyxJQUFJRCxXQUFXLEtBQUssSUFBSSxFQUFFO0lBQ3JELE9BQU9DLFNBQVM7RUFDbEI7RUFDQSxNQUFNQyxZQUFZLEdBQUdSLGVBQWUsQ0FBQ00sV0FBVyxDQUFDO0VBQ2pEUCxNQUFNLENBQUNVLGNBQWMsQ0FDbkJELFlBQVksRUFDWkQsU0FBUyxFQUNSLDBCQUF5QkYsR0FBSSxNQUFLQyxXQUFZLEVBQUMsQ0FDakQ7RUFDREYsQ0FBQyxDQUFDQyxHQUFHLENBQUMsR0FBR0csWUFBWTtFQUNyQixPQUFPQSxZQUFZO0FBQ3JCOztBQUVBO0FBQ0EsT0FBTyxTQUFTRSxpQkFBaUIsQ0FBQ04sQ0FBeUIsRUFBUTtFQUNqRTs7RUFFQSxNQUFNTyxLQUFLLEdBQUdQLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDekIsSUFBSU8sS0FBSyxLQUFLSixTQUFTLEVBQUU7SUFDdkJSLE1BQU0sQ0FBQ2EsV0FBVyxDQUNoQkQsS0FBSyxFQUNMLG1EQUFtRCxDQUNwRDtJQUNELE9BQU9QLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDcEI7RUFFQSxNQUFNUyxRQUFRLEdBQUdULENBQUMsQ0FBQyxZQUFZLENBQUM7RUFDaEMsSUFBSVMsUUFBUSxLQUFLTixTQUFTLEVBQUU7SUFDMUJSLE1BQU0sQ0FBQ2EsV0FBVyxDQUFDQyxRQUFRLEVBQUUsMkNBQTJDLENBQUM7SUFDekUsT0FBT1QsQ0FBQyxDQUFDLFlBQVksQ0FBQztFQUN4Qjs7RUFFQTs7RUFFQSxLQUFLLE1BQU0sQ0FBQ0MsR0FBRyxFQUFFUyxLQUFLLENBQUMsSUFBSUMsTUFBTSxDQUFDQyxPQUFPLENBQUNaLENBQUMsQ0FBQyxFQUFFO0lBQzVDLElBQ0VVLEtBQUssS0FBSyxJQUFJLElBQ2JBLEtBQUssS0FBS1AsU0FBUyxLQUNqQk8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLE1BQU0sSUFDMUJHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixLQUFLLENBQUMsSUFBSUEsS0FBSyxDQUFDSyxNQUFNLEtBQUssQ0FBRSxJQUMzQ0wsS0FBSyxDQUFDTSxXQUFXLEtBQUtMLE1BQU0sSUFBSUEsTUFBTSxDQUFDTSxJQUFJLENBQUNQLEtBQUssQ0FBQyxDQUFDSyxNQUFNLEtBQUssQ0FBRSxDQUFFLEVBQ3ZFO01BQ0EsT0FBT2YsQ0FBQyxDQUFDQyxHQUFHLENBQUM7SUFDZjtFQUNGO0FBQ0YifQ==
|